htaccess中的mod_rewrite有助于防止注入吗?

时间:2013-05-29 20:23:34

标签: php mysql mod-rewrite sql-injection

我正致力于识别和修复SQL注入漏洞。我已经在很多地方转换为pdo / prepared语句。

但是,我们有一个页面如下:

www.site.com/domain/products/12345/description-of-the-product

在htaccess中,这被重写为:

www.site.com/domain/product.php?id=12345

htacess看起来像这样:

RewriteRule ^(.*)/products/([0-9]+)/([^/\.]+)/?$ /$1/product.php?id=$2 [L]

所以,这是我的问题:由于url是用mod_rewrite重写的,这只是与ingtegers相匹配,这是针对sql注入的一些保护吗?如果您尝试除了整数之外的URL中的任何其他内容,用户只会收到404错误,因为该页面不存在且mod_rewrite未被激活?

提前致谢。

4 个答案:

答案 0 :(得分:0)

的。实际上,也许,但是您应该依赖的功能来防止注入应该是正确的转义代码,如果我们谈论的是SQL注入,那将通过准备好的陈述即使这可能还不够,因为注入%字符会导致问题。

您可以使用任何您想要的验证,并且重写URL可能非常好,但这绝不会让您省略转义查询参数的步骤(希望如此)通过适当参数化的准备好的陈述)。

答案 1 :(得分:0)

它不会,因为恶意用户只能转到网址

www.site.com/domain/product.php?id=123'; DROP TABLE products;

并完全绕过你的mod_rewrite。虽然只会重写整数,但是要重写它们的URL仍然可用且可访问。无论何时进行SQL查询,都应使用PDO等清理当前进入查询的每个输入。

答案 2 :(得分:0)

没有。它使您的URL更清晰,但它仍然发送文本信息,在PHP代码的某些点可以发送到数据库。所以它需要得到保障。

您可以使用mysqli_real_scape_string($_GET['id')或使用How can I prevent SQL injection in PHP?中提到的其他方法来完成此操作。

答案 3 :(得分:0)

不要混淆输入数据验证和SQL格式化!

这两件事永远不应混为一谈。

正确的SQL格式不需要任何保护,只需要SQL语法规则。准备好的语句是一种可以保证语法正确查询的工具。然而,只有始终如一地无条件地使用它,它才能发挥作用。