.htaccess 允许使用htaccess在url重写规则中使用%0A

.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提到了类似的问

我在.htaccess中有一个重写规则,允许我添加以/'分隔的无限参数

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的问题。