接受查询字符串中的特殊字符

时间:2016-11-15 作者:Ionică Bizău

当前,当查询字符串参数值看起来像SQL命令时(例如,如果它包含\'and):

domain.com/path/to/page?foo=a%27%20or%20%27a
相反,这应该是打开页面的有效url。我认为这个问题应该在.htaccess 文件目前.htaccess 如下所示:

# BEGIN s2Member GZIP exclusions
<IfModule rewrite_module>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} (^|\\?|&)s2member_file_download\\=.+ [OR]
RewriteCond %{QUERY_STRING} (^|\\?|&)no-gzip\\=1
RewriteRule .* - [E=no-gzip:1]

# Force Trailing Slash
RewriteCond %{REQUEST_URI} /+[^\\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]

# Force Download Rule
<FilesMatch "\\.(mp4|mp3|jpg|jpeg|pdf|png|tif|mobi|epub|azk)">
<If "%{QUERY_STRING} =~ /dl/">
ForceType application/octet-stream
Header set Content-disposition "attachment"
</If>
</FilesMatch>

</IfModule>
# END s2Member GZIP exclusions

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
我们应该在某个地方将这些特殊字符列入白名单,例如%27 和特殊SQL关键字(如and). 在第一行之前添加此行RewriteCond 行,未进行任何更改:

RewriteCond %{QUERY_STRING} (;|<|>|\'|"|\\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\\*|union|select|insert|drop|delete|update|cast|create|char|convert|alter|declare|order|script|set|md5|benchmark|encode) [NC,OR]
(摘自this page)

如何解决这个问题?

1 个回复
最合适的回答,由SO网友:MaximOrlovsky 整理而成

看起来像mod_security 阻止您的请求。检查是否已安装<?php phpinfo(); ?> 点击此处:enter image description here

如果是这样,您应该联系您的托管提供商或管理员。