首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储过程是否阻止PostgreSQL中的SQL注入?

存储过程是否阻止PostgreSQL中的SQL注入?
EN

Security用户
提问于 2010-11-19 22:44:33
回答 4查看 5.3K关注 0票数 21

存储过程是否会防止数据库被注入?我做了一些研究,发现如果我们只使用存储过程,Server、Oracle和MySQL对SQL注入是不安全的。然而,在PostgreSQL中不存在这个问题。PostgreSQL核心中的存储过程实现是否阻止了SQL注入,还是有其他原因/差异?如果我们只使用存储过程,我可以在PostgreSQL中使用SQL注入吗?

EN

回答 4

Security用户

发布于 2010-11-19 22:58:52

简而言之,存储过程不会阻止SQL注入。这取决于如何处理存储过程中的动态SQL。

要获得更完整的答案,请查看此处发布的内容:https://stackoverflow.com/questions/627918/am-i-safe-against-sql-injection

票数 12
EN

Security用户

发布于 2010-11-21 03:31:54

查看这些链接,图片就会变得更清晰:

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

"...Measures以避免SQL注入

  1. 验证来自服务器上用户的所有输入。
  2. 如果有备用方法可用,请避免使用动态SQL查询。
  3. 使用带有嵌入式参数的参数化存储过程。
  4. 使用安全接口执行存储过程,例如JDBC中的可调用语句或ADO中的CommandObject。
  5. 使用低特权帐户运行数据库。
  6. 对应用程序中使用的存储过程赋予适当的角色和权限。“
票数 7
EN

Security用户

发布于 2010-11-21 00:40:33

如果您正确地使用了SP,那么您在SQL注入中是非常安全的(当然,假设您仍然进行适当的输入验证)。如果。

啊,但是正确使用SP是什么意思呢?

我经常看到的两种最常见的SP错误用法,即使在存储过程中也会导致SQL注入,它们是:

  • SP中的动态SQL。
  • 从代码中调用SP,因为您将执行连接字符串。也就是说,仅仅发送到数据库"exec (param1)",而不是使用命令/参数对象(或者根据语言将查询参数化)。SQLi仍然可以被注入SP呼叫..。
票数 6
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档