解决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
相关文章
- Apache系列:Centos7.2下安装与配置apache
- apache 重点难点
- apache Storm学习之二-基本概念介绍
- [Linux] Apache Gateway Timeout
- Apache Doris 分析型数据库(三)数据划分
- CentOS Apache配置详解
- Atitit 文件存储标准化api 总结 目录 1. 操作系统,进行操作1 1.1. FileUtils类的应用1 1.2. 各大api 比较2 2. Java。Io用apache的commo
- 【异常】IDEA中Maven插件提示异常Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin
- 基于 Apache Hudi 极致查询优化的探索实践
- 【大数据 OLAP】Apache Kudu 极简教程
- Cause: org.apache.ibatis.type.TypeException: Error setting non null for xxx with JdbcType错误的详细解决方法
- exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
- 全国职业院校技能大赛网络安全竞赛——Apache安全配置详解
- Apache Curator获得真正的
- Eclipse Server runtime设置里找不到apache tomcat的处理方法
- Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly.