【问题标题】:Allow %0A in url RewriteRule with htaccess使用 htaccess 在 url RewriteRule 中允许 %0A
【发布时间】:2013-08-12 14:33:32
【问题描述】:

我的 .htaccess 中有一个重写器,它允许我添加由 / 分隔的无限参数。

RewriteRule ^(.*)/?$ index.php?params=$1 [L,NC]

这可以正常工作,直到我向它发送一个带有编码 \n 的 urlencoded 字符串(使用 cURL)(%0A)。

所以server/param1/param2/param3text 有效,但server/param1/param2/param3text1%0Aparam3text2 无效。

我在 Stack Overflow 上发现一个 Q 提到了类似的问题:

How can I apply an htaccess rewrite rule to a URL containing a linefeed character (%0A)?

但我不能/不知道如何在我的(.*) 中实现[\r\n]

有什么帮助吗?

【问题讨论】:

    标签: .htaccess mod-rewrite curl


    【解决方案1】:

    好的,首先,我必须添加一个检查以确保该文件不存在(两个 RewriteCond 负责处理)。然后我必须创建一个匹配任何字符的模式,或者一个匹配一次或多次的\r\n (+)。零次或多次运算符 (*) 未正确返回结果。

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^((.|\r|\n)+)/? index.php?params=$1 [L,NC]
    

    【讨论】:

    • 这个答案是正确的,这个有效。但如果您正在阅读本文,请考虑设置安全连接以防止出现@Ed-AITpro 的问题。
    【解决方案2】:

    此处仅供参考:一种称为空白过滤的常见黑客方法使用 %0A

    可以通过使用替代来绕过空格字符的过滤 空白字符到空格字符 (%20)。大多数 SQL 引擎 考虑换行(在 *NIX 环境中为 %0a,在 Windows 中为 %0a%0d 环境)、制表符或 + 字符作为有效空格:

    【讨论】:

      【解决方案3】:

      您必须使用 %{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 中检查$_SERVER["QUERY_STRING"] 以获取包含%0A 的完整路径。

      【讨论】:

      • 这个没有报错,但它也把我系统运行的目录作为参数。
      • 不知道您有这样的 URL:http://domain.com/dir/param1/param2/param3text1%0Aparam3text2。编辑它以照顾它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 2018-06-16
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多