防止参数绑定之外的SQL注入攻击

时间:2012-04-26 08:09:01

标签: python sql sql-injection

我已经完成了阅读有关防止SQL注入攻击的功课:我知道我需要使用参数绑定但是:

  • 我已经这样做了,谢谢。
  • 我知道我的用户使用的一些数据库驱动程序以最愚蠢的方式实现参数绑定。即,它们容易发生SQL注入攻击。我可以尝试限制他们可以使用哪个数据库驱动程序,但是这种策略注定要失败。
  • 即使我使用了一个不错的数据库驱动程序,我也不相信自己不会忘记至少使用一次参数绑定

所以,我想通过添加面向http的用户输入的额外清理来添加额外的保护层。诀窍在于我知道这一般很难做到,所以我宁愿使用经过良好审核的精心设计的第三方库,这是由安全专业人员编写的,以便将输入字符串转换为不太危险的内容,但我找不到任何内容明显的候选人我使用python所以,我会对基于python的解决方案感兴趣,但如果我可以将它们绑定到python,其他建议也没问题。

4 个答案:

答案 0 :(得分:2)

  
      
  • 我已经这样做了,谢谢。
  •   

好;有了这个,你可以完全确定(是的,完全确定)用户输入只被解释为值。您应该将精力用于保护您的站点免受其他类型的漏洞攻击(想到XSS和CSRF;确保您正确使用SSL,等等)。

  
      
  • 我知道我的用户使用的一些数据库驱动程序以最愚蠢的方式实现参数绑定。即,它们容易发生SQL注入攻击。我可以尝试限制他们可以使用哪个数据库驱动程序,但是这种策略注定要失败。
  •   

嗯,没有傻瓜证明,因为傻瓜非常聪明。如果您的受众决心破坏您保护数据的所有艰苦工作,那么您无法真正做任何事情。您可以做的是确定您认为哪些驱动程序是安全的,并在检测到您的用户正在使用其他内容时生成大恐怖警告

  
      
  • 即使我使用了一个不错的数据库驱动程序,我也不相信自己不会忘记至少使用一次参数绑定
  •   
  1. 所以不要这样做!

  2. 在开发过程中,记录发送给驱动程序的每个 sql语句。定期检查用户数据是否永远不会出现在此日志中(或作为参数记录为单独的事件)。

  3. SQL注入基本上是字符串格式化。您通常可以将每个数据库事务向后追溯到原始sql;如果用户数据被格式化为沿途的某个地方,则会出现问题。扫描项目时,我发现我能够以每分钟大约一次的速度找到它们,并有效地使用grep和我选择的编辑器。除非你有成千上万个不同的sql语句,否则每个语句都不应该过于困难。
  4. 尽量使您的数据库交互与应用程序的其余部分保持隔离。将sql与其余代码混合使得很难保持,或者执行我上面描述的检查。理想情况下,您应该经历某种数据库抽象(完整的ORM或更精细的东西),这样当您完成任务时,您就可以只是与数据库相关的代码。

答案 1 :(得分:1)

我不知道这是否适用,但我只是把它放在那里以求完整性,专家可以随意投票给我......更不用说我在某些情况下对其性能表示担忧。

我曾经负责保护用经典asp编写的老化的web应用程序来防止sql注入(当时它们受到的打击非常糟糕)

我有时间浏览所有代码(不是可能选择)所以我在我们的标准包含文件中添加了一个方法,该文件查看了用户提交的所有内容(通过请求参数迭代)并检查了黑名单html标签(例如脚本标签)和sql注入标志(例如“; - ”和“'; shutdown”)..

如果它找到一个重定向的用户告诉他们他们的提交是可疑的,如果他们有问题电话或电子邮件......等等等等。

它还记录了表中的注入尝试(一旦被转义)以及攻击的IP地址时间等细节。

总的来说它起了作用......至少攻击已经停止了。

我使用过的每一种网络技术都有某种方式在那里捏造这样的东西,只花了我一天的时间来开发和测试......

希望它有所帮助,我不会称之为行业标准或其他任何东西

<强> TL;博士?: 针对字符串黑名单检查所有请求参数

答案 2 :(得分:0)

  

所以,我想通过添加面向http的用户输入的额外清理来添加额外的保护层。

这种策略注定要失败。

答案 3 :(得分:-1)

在php中,我使用preg_replace来保护我的网站免受sql注入攻击。也可以使用preg_match。尝试在python中搜索相同的函数。