【问题标题】:Does an htaccess rewrite rule help prevent SQL Injection?htaccess 重写规则是否有助于防止 SQL 注入?
【发布时间】:2011-11-29 22:28:23
【问题描述】:

我在htaccess中有以下规则:

RewriteRule ^([a-zA-Z0-9\-\_]+)/?$ test.php?&url=$1 [L]

我的问题是这样的:

如果我有以下网址http://www.example.com/this-is-a-title

$url 变量是否受到 SQL 注入的影响,还是我不应该担心,因为 RewriteRule 只允许字母、数字、破折号和下划线,而不允许引号、撇号或 + 号?

编辑: 跟进问题

如果这是 url,会发生什么? http://www.example.com/this'is"a+title

当我将它放在 url 栏中时,我收到 404 错误,但实际发生了什么。符号' " + 是否被忽略或剥离,或者究竟是什么?

【问题讨论】:

    标签: .htaccess sql-injection


    【解决方案1】:

    如果您在将数据放入查询之前未正确清理数据,则应始终认为自己容易受到 SQL 注入攻击。使用 .htaccess 重写不是也不应被视为防止 SQL 注入的做法。

    使用mysql_real_escape_stringpg_escape_string(如果使用PHP)或使用来自POSTGET 的变量对所有查询使用准备好的语句。总是。

    【讨论】:

    • 为什么不能接受?注入攻击在什么情况下可以使用上述.htaccess 规则?我不反对,我只是想知道为什么。
    • 它不能作为你的唯一防线。永远不应该通过默默无闻来实现安全。只需一个人找出直接 URL 并加以利用。您应该始终、始终、始终清理进入数据库的数据。 总是。
    【解决方案2】:

    理论上,变量不会被注入。但是,您仍然应该始终清理您的输入。这只是最佳实践,因为如果有人设法通过另一种方法攻击服务器,您的 .htaccess 可能会被忽略。

    【讨论】:

      【解决方案3】:

      这取决于脚本本身。您可以对输入进行十六进制编码,例如0x2d3120756e696f6e2073656c656374202e2e2e2e。如果脚本对其进行解码,您的 .htaccess 将无法保护您。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-08
        • 1970-01-01
        • 2011-04-04
        • 1970-01-01
        • 2020-03-09
        • 2010-12-20
        • 2021-10-06
        • 1970-01-01
        相关资源
        最近更新 更多