【发布时间】:2023-04-02 12:49:01
【问题描述】:
我想阻止任何包含使用 mod_rewite 或空 ID 的 ID 包含任何非数字字符的请求。我的.htaccess 文件中有以下规则:
RewriteCond %{QUERY_STRING} ID=(\d*[^\d&]+\d*)*(&|$)
RewriteRule .* - [F]
除了包含空格字符的请求之外,其他方法都有效。
GET /page.php?ID=5 5 HTTP/1.1
在我使用各种测试套件(如https://regex101.com/)时,两个5之间的空格字符被[^\d&]+成功匹配,但这种类型的请求仍然通过。
我需要改变什么?
(是的,在我的 PHP 中处理了错误的用户输入,所以它是否通过并不重要)
【问题讨论】:
-
空格是使用
%20在url中编码的,你为什么要担心这个? -
我相信你可以只使用
ID=[0-9]*[^0-9&]正则表达式。如果您不使用%1/%2,则无需捕获任何内容。 -
@Andreykul 空间是为来自常规浏览器的请求编码的,是的,但这些是探测漏洞的请求。
-
@Wiktor Stribiżew 我也想屏蔽一个空 ID
标签: regex .htaccess mod-rewrite pcre