解决URL中包含“%2F”导致Apache地址重写mod_rewrite失效的问题

在使用Apache地址重写mod_rewrite期间,发现,当URL和PATH_INFO中出现%2f(/)或者%5c(\), 会被认为这是个不合法的请求, Apache将会直接返回"404 (Not Found)"错误。

也就是说,Apache在调用 mod_proxy 或 mod_rewrite 模块之前,就直接拒绝请求,给出404错误。

这样做主要是为了防止CGI的安全漏洞发生,尤其是在脚本中使用了PATH_INFO但是又没有做安全过滤操作的话,很容易被注入漏洞。

假定URL是安全的,即我们想用这种URL中包含这种编码转换的字符串,如何操作?如何解决这个问题?

有2种解决方案:

方案一:打开Apache的“AllowEncodedSlashes”指令

在Apache的配置文件(httpd.conf)中,找到 <VirtualHost> 节点,配置如下代码即可(注意,把此规则添加到.htaccess文件中是不起作用的。)

<VirtualHost *:80>
	AllowEncodedSlashes On
</VirtualHost>

打开此指令,告诉Apache服务器,允许URL地址中包含编码字符串,如

http://www.example.com/books/the_lamp%2C_linux%2Fapache%2Fmysql%2Fphp_solution.html

这样,不修改PHP代码就可解决问题。但是,并不是所有的用户都允许去修改Apache的配置文件,或者说,不修改Apache的配置文件,如何解决这个问题?

方案二:两次urlencode()

$url .= urlencode(urlencode($title)) . ‘.html‘

变成

http://www.example.com/books/the_lamp%252C_linux%252Fapache%252Fmysql%252Fphp_solution.html

具体可以参看:http://httpd.apache.org/docs/2.2/mod/core.html#allowencodedslashes

时间: 2024-10-07 07:20:37

解决URL中包含“%2F”导致Apache地址重写mod_rewrite失效的问题的相关文章

iOS边练边学--NSURLSession、NSURLSessionTask的介绍与使用以及url中包含了中文的处理方法

一.NSURLSession.NSURLSessionTask的使用步骤 首先创建NSURLSession对象 通过NSURLSession对象创建对应的任务 <1>NSURLSessionDataTask的GET和POST  -- 以及url中包含了中文的解决办法 <2>NSURLSessionDownloadTask实现小文件的下载 <3>NSURLSessionDownloadTask实现大文件的断点下载 -- 暂时没有实现退出程序后的文件续传 1 #import

解决url中&amp;times会被转成&#215;的问题

解决url中&times会被转成×的问题 参考原文:hutaoo的博客<×被转义为X的问题> 一.发生错误的情况: 在URL中参数若有&times则会被转成x,例如: $url = "http://www.test.com/index.php?id=1&timestamp=1584947618&age=10"; echo $url; 输出结果为:http://www.test.com/index.php?id=1×tamp=158494761

解决C++中宏定义导致的名字污染

在编写一个 Graph 模板类的时候,为了使用户可以自定义 距离 的类型,比如 int 或者 double 甚至其他高精度有理数的封装类, 我将距离的类型定义为模板参数 T_DIST ,并使用了标准库中的库函数 std::numeric_limits<T_DIST>::max() 来定义最大距离 template <typename T_DIST> const typename TopologicalGraph<T_DIST>::Distance Topological

解决NSData中包含非法UTF-8编码

我们开发中常会遇上将NSData转换为NSString,或通过NSJSONSerialization解析JSON的场景,一旦NSData中包含非法的UTF-8编码,那么结果将是返回nil,但这样的结果并不符合我们预期,因为可能这其中仅仅只是一个编码错误,我们更希望将错误编码丢弃或替换为错误字符.在Google上找了一圈,有人也实现了这样的方法,但个人觉得写得不够严谨,容错性也不太好,索性自己写一个吧,严格按照RFC3629的标准. UTF-8是一种变长的编码,针对不同长度的字节有固定的格式,在R

URL中包含有特殊字符,进行转义

String temp = URLEncoder.encode(json); URL中的特殊字符 有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了.编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值.例如 空格的编码值是"%20". 下表中列出了一些URL特殊符号及编码 :替换为%3A 十六进制值 1. +  URL 中+号表示空格 %2B 2. 空格 URL中的空格可以用+号或者编码 %20 

[转]asp.net URL中包含中文参数造成乱码的解决方法

本文转自:http://www.jb51.net/article/22437.htm 问题: 前段时间,在系统中做了一个类似于友情链接的功能块,一直运行良好,直到有一天加了类似于以下的链接地址:http://www.****.com/user.aspx?id=水天,就出现大问题了: 1.从IE地址栏中直接输入这个地址,访问没错: 2.做一个静态页,其中包括这个超链接,点击访问也没错: 3.就是把这个链接添加到这个功能块中,点击访问那边接收到的是乱码. 一开始,被这个问题也搞得头大,在google

解决Fedora中由于clipit导致复制/粘贴无法使用问题

在Fedora中clipit用于剪贴板管理使用之后,爱不释手. 但是,最进发现由于clipit导致复制/粘贴无法使用问题. 卸载了clipit就可以,正常在桌面使用复制/粘贴 若是要继续使用clipit 可以使用https://github.com/rainsome/myutils/blob/master/clipitrc 替换 ~/.config/clipit/clipitrc 文件 重启clipit既可以正常使用复制/粘贴 原文地址:http://blog.51cto.com/200355/

PHP URL中包含中文,查看时提示404

使用Microsoft Web Platform在IIS里配置安装一个wordpress,一切顺利. 当添加一片文章时,自动生成URL类似如下: http://localhost/wordpress/index.php/2017/06/28/dc%e8%b6%85%e8%83%bd%e5%a6%b9%e5%ad%90%ef%bc%9a%e6%98%9f%e9%99%85%e6%b8%b8%e6%88%8f-2017/ 点击打开提示404.经查询,搜索到如下解决方法: 找到"wp-include&

解决URL路径包含+等特殊符号,编码也无效的办法

<?xml version="1.0" encoding="UTF-8"?><configuration>      <system.webServer>        <security>          <requestFiltering allowDoubleEscaping="True"/>        </security>      </system.w