关于2.4版本以后apache/httpd开始不支持下划线header的解决方法

官方文档给出的解释:http://httpd.apache.org/docs/current/env.html#fixheader

(以下摘自官方文档,英文不想看的可以直接看忽略。。直接从下划线后内容开始)

——————————————————————————————

Passing broken headers to CGI scripts

Starting with version 2.4, Apache is more strict about how HTTP headers are converted to environment variables in mod_cgiand other modules: Previously any invalid characters in header names were simply translated to underscores. This allowed for some potential cross-site-scripting attacks via header injection (see Unusual Web Bugs, slide 19/20).

If you have to support a client which sends broken headers and which can‘t be fixed, a simple workaround involving mod_setenvifand mod_headersallows you to still accept these headers#

# The following works around a client sending a broken Accept_Encoding
# header.

SetEnvIfNoCase ^Accept.Encoding$ ^(.*)$ fix_accept_encoding=$1
RequestHeader set Accept-Encoding %{fix_accept_encoding}e env=fix_accept_encoding————————————————————————————————————————————————————————————————————————————

1、原因:防止通过请求头注入进行跨站攻击,  如果非要支持有两种解决方法  a、降级httpd  b、修改配置文件(本文内容)

2、如何解决修改?直接进入正题,根据官网的提示,需要修改httpd的配置文件(以httpd2.4.6 centos7为例)楼主直接修改的虚拟主机配置文件,个人认为,只修改单个虚拟主机文件不影响其他虚拟主机。。感兴趣的可以自己测试修改/etc/httpd/conf/httpd.conf文件。这样应该是支持全局了。楼主自己的虚拟主机配置文件在/etc/httpd/conf.d文件夹下在配置文件下面位置添加  <VirtualHost *:80>    (添加位置)

  </VirtualHost>

添加内容:官方文档原文:
SetEnvIfNoCase ^Accept.Encoding$ ^(.*)$ fix_accept_encoding=$1
RequestHeader set Accept-Encoding %{fix_accept_encoding}e env=fix_accept_encoding直接将以上内容添加到配置文件中是没有用的。。楼主试过了需要修改五处内容(原文带颜色的部分)1)红色部分Accept.Encoding改为你要传入到请求头中带有下划线的内容,并将原来的下划线替换为.(点)例如:要将x-my_id传入到请求头中,那么将红色部分改为x-my.id2)修改绿色内容Accept-Encoding,将你的参数中带有下划线的部分改为-(dansh)例如,要将x-my_id传入,那么将绿色部分改为x-my-id3)修改三处紫色内容,这三处为变量名称,名称随意,要保持一致以x-my_id为例,最终修改结果为:(xxxxx为省略内容,不是实际需要添加的内容)
<VirtualHost *:yourport>  xxxxx
  SetEnvIfNoCase ^x-my.id$ ^(.*)$ aa=$1   RequestHeader set x-my-id %{aa}e env=aa
  xxxxx

   </VirtualHost>

注意:

  如果要添加多个带有下划线请求头参数支持,可以添加多个SetEnvIfNoCase和RequestHeader,但是变量(紫色内容)需要修改成不同的值。

PS:解释一下:
SetEnvIfNoCase ^x-my.id$ ^(.*)$ aa=$1 意思是如果x-my.id中有.那么将其值赋给aa
RequestHeader set x-my-id %{aa}e env=aa意思是将aa的值赋给请求头参数x-my-id

相当于将原来不支持的参数赋值给一个支持的参数,然后继续传递

以上内容,如有错误,欢迎指出。

原文地址:https://www.cnblogs.com/it-green-hand/p/9462633.html

时间: 2024-10-14 15:07:40

关于2.4版本以后apache/httpd开始不支持下划线header的解决方法的相关文章

Windows下Apache配置SSL以支持https及出错的解决办法

步骤一:安装apache,使其支持SSL,并安装php 1.安装配有SSL模块的apache,apache_2.2.8-win32-x86-openssl-0.9.8g 2.配置apache以支持SSL: 1)打开apache的配置文件conf/httpd.conf LoadModule ssl_module modules/mod_ssl.so Include conf/extra/httpd-ssl.conf 去掉两行前面的# 2)注意修改httpd-ssl.conf 文件里的两个字段: S

很爽的一点。用Mysql5.x以上版本出现报错#1929 Incorrect datetime value: &#39;&#39; for column &#39;createtime&#39; 解决方法

我的mysql安装后,保存删除表数据总是出现#1929 Incorrect datetime value: '' for column 'createtime' 的报错提醒,导致不能删除表里数据: 原因: 5以上的版本如果时期时间是空值应该要写NULL: 官方解释说:得知新版本mysql对空值插入有"bug", 要在安装mysql的时候去除默认勾选的enable strict SQL mode 那么如果我们安装好了mysql怎么办了,解决办法是更改mysql中的配置 my.ini 解决

【转】chrome 67版本后无法拖拽离线安装CRX格式插件的解决方法

第一种:开启开发者模式即可 (推荐) chrome  的设置 -> 更多工具 -> 扩展程序,开启开发者模式即可! 第二种方法:修改参数 首先打开下面地址:chrome://flags/#extensions-on-chrome-urls 将 disabled 改为 enable 重启即可 第三种:修改文件格式,加载扩展程序 有时候要在 chrome安装本地插件时,会报错,这时候将插件的后缀名 .crx 改为  .zip或者 .rar,然后将改好后缀名的文件解压到本地文件夹中,然后在 chro

Apache服务器httpd.exe进程占用cpu超过50%的解决方法

httpd.exe进程占用cpu超过50%,关闭掉Apache服务,cpu应用率立刻下降到0.  重新启动Apache又出现占用cpu高的情况.  原因是:httpd.exe和防火墙配置有冲突. 解决方法如下: 1.网上邻居->本地链接->属性->internet协议(TCP/IP)->属性->高级->wins标签->去掉起用LMhosts查询前的勾. 2.控制面版->windows防火墙->高级标签->本地链接设置->服务的标签里勾选安全

apache 指定的网络名不再可用 原因及解决方法

1.出现问题状况: 出现问题网站:http://www.ayyzz.cn/ 前段时间作文大全网出现有时候比较慢,有时候"找不到网页"404错误:另外在error.log里也报错: [Mon May 07 08:32:22 2014] [warn] (OS 64)指定的网络名不再可用. : winnt_accept: Asynchronous AcceptEx failed. 2.网上查找到原因: winnt(MPM) - Apache 2.2 参考手册有下列描述Apache MPM w

MyBatis笔记----报错:Exception in thread &quot;main&quot; org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)解决方法

报错 Exception in thread "main" org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ij34.model.UserMapper.selectarticle at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:230) at or

IE8及低版本浏览器不支持CSS3 media queries的解决方法

问题:IE8及其以下低版本IE浏览器在缩小窗口时,UI没有按照相应的要求显示窗口缩小时对应的布局:其他浏览器正常. 定位过程: 其实开始拿到问题时是无从下手,不知所以然,根本就没听说还有media这个CSS属性,就更不知道它的功能了.但是对于解决UI问题,有自己的一套思路,就是首先要思考为什么会错误以及为什么没有错误两个方面,然后针对这两个方面的疑问把html或js或css文件简化再简化,修改再修改,查看UI变化,从而缩小问题范围,最后找出问题根源. 如此我就想为什么其他浏览器界面布局没有问题呢

java.lang.NullPointerException at org.apache.jsp.**_jsp.jspInit(**_jsp.java)tomcat启动异常解决方法

今天遇到的其他一个问题就是,启动tomcat时,报:java.lang.NullPointerException at org.apache.jsp.**_jsp.jspInit(index_jsp.java)异常,因为我刚刚配置服务器,以为JSP页面出现了问题,不过写了一个空的JSP页面依旧是,后来才知道,jar包冲突导致的,我在tomcat的lib目录下放了jsp-api.jar的jar包,而项目中最初也一直有一个这个jar包,方法产生了冲突.解决办法就是删除掉项目里WEB-INF/lib下

Google Play发布App中遇到&quot;多个APK:版本1未提供给任何设备配置使用。&quot;问题的解决方法

在google play上发布apk,当上传了apk文件,填写了相关的内容信息和介绍图片.图标后,出现"发布应用"始终灰色无法点击,查看原因显示如下问题: 其中支持的设备数量始终显示为0,怀疑是编译出来的apk哪里不规范! 经过对原有工程代码的查找修改,去除了mips和x86两个jniLibs下的链接库后,再次上传后支持的设备数量终于显示出来. 原因是mips/x86两个文件夹下的文件与armeabi/armeabi-v7a的内容不一致,部分库在mips/x86下没有而在armeabi