使用 .htaccess 限制对特定 URL 的访问

使用 .htaccess 限制对特定 URL 的访问

您好,我正在使用 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。

相关内容