您好,我正在使用 xenforo 运行服务器。我想知道如何限制 .htaccess 中的 url。
网址为:https://mywebiste.com/index.php?members/find&q=oi%5Bp%5C&_xfRequestUri=%2Findex.php%3Fmembers%2F&_xfWithData=1&_xfToken=1648216864%2C89d40e7bf50a91b8a62f9fe448c5d1f3&_xfResponseType=json
存在 SQL 注入,因此认为只要阻止它就可以解决问题。
我尝试做这样的事情:
RewriteEngine On
RewriteRule ^index.php?members/find&q=oi%5Bp%5C&_xfRequestUri=%2Findex.php%3Fmembers%2F&_xfWithData=1&_xfTo
ken=1648216864%2C89d40e7bf50a91b8a62f9fe448c5d1f3&_xfResponseType=json - [F]
末尾带有 $:
RewriteEngine On
RewriteRule ^index.php?members/find&q=oi%5Bp%5C&_xfRequestUri=%2Findex.php%3Fmembers%2F&_xfWithData=1&_xfTo
ken=1648216864%2C89d40e7bf50a91b8a62f9fe448c5d1f3&_xfResponseType=json$ - [F]
我究竟做错了什么?
答案1
该RewriteRule
指令仅与 URL 路径匹配。要匹配查询字符串,您需要一个RewriteCond
与服务器变量匹配的附加(条件)指令QUERY_STRING
。
例如,要阻止该特定 URL:
RewriteCond %{QUERY_STRING} =members/find&q=oi%5Bp%5C&_xfRequestUri=%2Findex.php%3Fmembers%2F&_xfWithData=1&_xfToken=1648216864%2C89d40e7bf50a91b8a62f9fe448c5d1f3&_xfResponseType=json
RewriteRule ^index\.php$ - [F]
=
上的前缀条件模式(该指令的第二个参数RewriteCond
)使其成为字典字符串比较(完全匹配),而不是正则表达式,因此无需转义特殊的正则表达式元字符。
但是,这个 URL 非常具体,屏蔽那些不匹配特定 URL 是不是更好?图案? 尽管如果您已经充分验证了服务器端脚本中的 URL 参数值,那么就没有必要阻止这样的特定 URL。
答案2
您尝试实施的解决方案只会阻止您输入的 URL。以任何方式更改此 URL,例如交换两个 GET 参数、添加额外的 GET 参数(甚至是不相关的参数)或添加井号标签参数,都会使请求不同于 Apache,并突破您的保护。
而是修改你的 index.php 以正确处理请求并安全地处理用户输入(例如 GET 请求),如果有任何可疑信息出现,则提供 HTTP403 Unauthorized。