我在htaccess中有以下规则:
RewriteRule ^([a-zA-Z0-9\-\_]+)/?$ test.php?&url=$1 [L]
我的问题是:
如果我有以下网址http://www.example.com/this-is-a-title
$url
变量是否受SQL注入,或者我不应该担心它,因为RewriteRule只允许使用字母,数字,破折号和下划线而不是引号或撇号或+符号?
编辑: 跟进问题
如果这是网址会发生什么? http://www.example.com/this'is"a+title
当我将它放在网址栏中时,我收到404错误,但实际上发生了什么。符号' " +
是被忽略还是被剥离或者究竟是什么?
答案 0 :(得分:2)
如果在将数据放入查询之前未正确清理数据,则应始终认为自己容易受到SQL注入攻击。使用.htaccess
重写不是也不应该被视为防止SQL注入的做法。
使用mysql_real_escape_string
或pg_escape_string
(如果使用PHP)或使用POST
或GET
中的变量对所有查询使用预准备语句。总是
答案 1 :(得分:1)
理论上,没有变量不受注射。但是,您仍然应该对您的输入进行消毒。这只是最佳实践,因为如果有人设法通过其他方法攻击服务器,则可以忽略.htaccess。
答案 2 :(得分:1)
这取决于脚本本身。您可能能够对输入进行十六进制编码,例如0x2d3120756e696f6e2073656c656374202e2e2e2e
。如果脚本对其进行解码,则.htaccess将无法保护您。