存储过程是否会阻止数据库被注入?我做了一些研究,发现如果我们只使用存储过程,SQL-Server、Oracle 和 MySQL 对 SQL 注入是不安全的。但是,这个问题在 PostgreSQL 中不存在。PostgreSQL 核心中的存储过程实现是否会阻止它进行 SQL 注入,或者还有其他原因/差异吗?如果我们只使用存储过程,我可以在 PostgreSQL 中使用 SQL 注入吗?
存储过程可以防止 PostgreSQL 中的 SQL 注入吗?
信息安全
应用安全
sql注入
数据库
PostgreSQL
2021-09-04 16:28:33
4个回答
简而言之 - 不,存储过程不会阻止 SQL 注入。这取决于您如何处理存储过程中的动态 SQL。
有关更完整的答案,请查看此处发布的内容:https ://stackoverflow.com/questions/627918/am-i-safe-against-sql-injection
检查这些链接,图片会更清晰:
http://anubhavg.wordpress.com/2008/02/01/are-stored-procedures-safe-against-sql-injection/
http://www.sqlmag.com/article/sql-server/protecting-against-sql-injection.aspx
"...避免SQL注入的措施
- 验证来自服务器上用户的所有输入。
- 如果有替代方法可用,请避免使用动态 SQL 查询。
- 使用带有嵌入式参数的参数化存储过程。
- 使用安全接口执行存储过程,例如 JDBC 中的 Callable 语句或 ADO 中的 CommandObject。
- 使用低权限帐户运行数据库。
- 为应用程序中使用的存储过程赋予适当的角色和权限。”
如果您正确使用 SP,那么您就可以免受SQL 注入的影响(当然,假设您仍然进行了正确的输入验证)。如果。
啊,但是正确使用SP是什么意思呢?
我经常看到的两种最常见的 SP 误用,即使使用存储过程也可能导致 SQL 注入,它们是:
- SP 内部的动态 SQL。
- 从代码中调用 SP,就像执行串联字符串一样。即只是发送到数据库“exec spname (param1)”,而不是使用命令/参数对象(或参数化查询,取决于语言)。SQLi 仍然可以注入到 SP 调用中......
无论查询是否为存储过程,都需要变量绑定和命名参数。还需要担心某些 SQL 语句,例如:LIKE
其它你可能感兴趣的问题