防止超出参数绑定的sql注入攻击

2024-09-27 23:24:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我在阅读有关防范sql注入攻击的文章时做了功课:我知道我需要使用参数绑定,但是:

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

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


Tags: 用户httpdbsql参数面向专业方式
3条回答

So, I would like to add an extra layer of protection by adding extra sanitization of http-facing user input.

这一战略注定要失败。在

  • I already do this, thank you.

很好;只有这样,您就可以完全确定(是的,完全确定)用户输入只被解释为值。你应该把精力放在保护你的站点不受其他类型的漏洞(想到XSS和CSRF;确保你正确地使用SSL等等)。在

  • I know that some of the db drivers my users use implement parameter binding in the most stupid possible way. i.e., they are prone to sql injection attacks. I could try to restrict which db driver they can use but, this strategy is doomed to fail.

好吧,没有所谓的傻瓜证明,因为傻瓜是如此的聪明。如果你的听众决心破坏你为保护他们的数据而付出的所有努力,你真的无能为力。你能做的就是确定你认为哪些驱动程序是安全的,当你发现你的用户正在使用其他东西时,就会发出一个可怕的警告。在

  • Even if I use a decent db driver, I do not trust myself to not forget to use parameter binding at least once
  1. 所以不要那样做!

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

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

我不知道这是否适用,但我只是把它放在那里的完整性,专家可以随意否决我。。。更不用说我对它在某些情况下的表现有顾虑。在

有一次我的任务是保护一个用传统asp编写的老化的web应用程序,以防止sql注入(当时它们受到了相当严重的打击)

我没有时间浏览所有的代码(不是可能的选择),所以我在一个标准的include文件中添加了一个方法,查看用户提交的所有内容(遍历请求参数),并检查是否有黑名单的html标记(例如脚本标记)和sql注入符号(例如“;--”和“';shutdown“)。。在

如果它发现一个,它重定向用户告诉他们,他们的提交是可疑的,如果他们有一个问题的电话或电子邮件。。废话。在

它还将注入尝试记录在一个表中(一旦被转义)以及攻击的IP地址时间等详细信息。。在

总的来说,这是一种享受。。至少袭击停止了。在

我使用过的每一种网络技术都有一些类似的东西,我只花了一天的时间来开发和测试。。在

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

太长了,读不下去了?: 根据字符串黑名单检查所有请求参数

相关问题 更多 >

    热门问题