.htaccess 允许使用htaccess在url重写规则中使用%0A
我在.htaccess中有一个重写规则,允许我添加以/'分隔的无限参数.htaccess 允许使用htaccess在url重写规则中使用%0A,.htaccess,mod-rewrite,curl,.htaccess,Mod Rewrite,Curl,我在.htaccess中有一个重写规则,允许我添加以/'分隔的无限参数 RewriteRule ^(.*)/?$ index.php?params=$1 [L,NC] 这将正常工作,直到我向它发送一个urlencoded字符串(使用cURL),其中包含一个编码的字符串(%0A) 因此,server/param1/param2/param3text起作用,但server/param1/param2/param3text1%0Aparam3text2不起作用 我在堆栈溢出中发现一个Q提到了类似的问
RewriteRule ^(.*)/?$ index.php?params=$1 [L,NC]
这将正常工作,直到我向它发送一个urlencoded字符串(使用cURL),其中包含一个编码的字符串(%0A)
因此,server/param1/param2/param3text
起作用,但server/param1/param2/param3text1%0Aparam3text2
不起作用
我在堆栈溢出中发现一个Q提到了类似的问题:
但是我不能/不知道如何在我的(.*)
中实现[\r\n]
有什么帮助吗?好的,所以首先,我必须添加一个检查以确保该文件不存在(两个重写器会处理这个问题)。然后我必须创建一个匹配任何字符的模式,或者一个匹配一次或多次的
\r
或\n
(+
)。零次或多次运算符(*
)未正确返回结果
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^((.|\r|\n)+)/? index.php?params=$1 [L,NC]
您必须利用
%{THE_REQUEST}
变量从原始Apache web服务器请求获取实际路径
请尝试以下代码:
RewriteCond %{QUERY_STRING} !^params=.+ [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+[^/]+/([^\s]+) [NC]
RewriteRule ^ index.php?params=%1 [L,QSA]
然后在
index.php
内检查$\u服务器[“QUERY\u STRING”]
中包含%0A
的完整未删除路径。仅供参考:一种称为空白过滤的常见黑客方法使用%0A
通过使用替代项,可以绕过对空格字符的筛选
将空格字符转换为空格字符(%20)。大多数SQL引擎
考虑一个行返回(A*nix环境中的%0a,Windows中的%0a%0d)
环境),制表符或+字符作为有效空白:
这一个没有导致错误,但它也将我的系统运行的目录作为参数。不知道您有一个类似于:
http://domain.com/dir/param1/param2/param3text1%0Aparam3text2
。编辑它来处理它。这个答案是正确的,这个有效。但是如果你正在阅读,请考虑设置一个安全连接,以防止@ Ed AITpro的问题。