使用Apache清理GET查询

时间:2011-01-02 17:45:08

标签: apache .htaccess get sanitize

我看到这里有很多关于如何处理数据清理的讨论。可以吧 就像将重写规则添加到.htaccess一样简单吗?

RewriteRule ^([\w\-]+)$ index.php?page=$1

根据我的理解,这只允许字母,数字,_和 - 1美元,我是对的吗?

如果你为SQL查询添加这种预准备语句的用法,它应该是非常有用的, 是吗?

不知怎的感觉太容易变成现实,我错过了什么,有什么方法可以坚定起来吗?

2 个答案:

答案 0 :(得分:1)

  

如果你为SQL查询添加这种预准备语句的用法,那应该是非常明确的,是吗?

不是真的,因为您的规则对大多数用例来说过于严格。想想字符串输入中的变音符号。某些输入需要允许一些非ASCII字符。这些数据在URL中为percent encoded,因此您必须开始过滤掉某些字符,即使这对安全性也没用。除了数据库注入之外,还有许多更多的攻击向量。

对于所有这些危险,没有“一刀切”的卫生方法。对于每个场景(在文件名中使用;在HTML输出中;在Javascript输出中;在电子邮件中......),有一种正确的方法。在Web服务器级别过滤掉“无效”字符并不实际 - 为了获得完美的安全性,您必须在Apache语法中重新创建所有这些特定的卫生功能,这几乎是不可能的。

另请参阅:PHP: the ultimate clean/secure function

答案 1 :(得分:1)

如果您想要在Web服务器级别执行某些操作,则可能需要使用mod_security之类的内容进行调查。它将有助于缓解一些攻击 - 但最终的防御水平必须在PHP本身内完成。 Web服务器总会有一种被认为“很好”的攻击,但会导致应用程序出现混乱。无论你如何锁定查询参数以防止注入漏洞,都会有一些错过。

那么为什么浪费时间/天可以在PHP中执行一个简单的mysql_real_escape_string()并在那里捕获所有内容时提供完美的RewriteRule?