Apache2 添加 Set-Cookie HttpOnly Secure

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache2 添加 Set-Cookie HttpOnly Secure相关的知识,希望对你有一定的参考价值。

参考技术A 背景:

网警告诉老板,我们的网站有漏洞,要在限时内处理

在被暴打一顿后准备辞职,但贫穷使我冷静,还是先来理一理思路吧。

要解决问题,首先是要定位问题,并且对于程序员来说大数情况下需要反复测试验证,所以第一步先找一个工具帮我们定位问题并可以验证问题的工具

Acunetix 扫描确认漏洞的存在,同时方便修复后验证

再查查自己的服务器版本

ubuntu 18.x + Apache2.4.7

可以开始百度了

1. Possible virtual host found

存在可能会漏隐私的虚拟机

 打开Apache2 http.conf 发现

解决方案:加个#注释掉

#ServerName localhost

2. OPTIONS method is enabled

需要对OPTIONS做限制,百度一翻

解决方案:在虚拟机中添加

<Location />

     <Limit OPTIONS>

         Order allow,deny

         Deny from all

     </Limit>

</Location>

3. Cookie(s) without HttpOnly flag set , Cookie(s) without Secure flag set

这两个问题足足花费了半天时间,各种百度无果,科学走起

比较有参考价值的文章:

https://stackoverflow.com/questions/24129201/add-secure-and-httponly-flags-to-every-set-cookie-response-in-apache-httpd

http://www.voidcn.com/article/p-baynbovc-btz.html

Header always edit Set-Cookie "(?i)^((?:(?!;\s?HttpOnly).)+)$" "$1; HttpOnly"

Header always edit Set-Cookie "(?i)^((?:(?!;\s?secure).)+)$" "$1; secure"

配置,重启,配置,重启,配置,重启,无果

初级程序员状态下无法解决,只能开启中级程序员状态

理解问题需要再深入再深入,我们真正需要解决的问题如下:

我们需要对传过来的所有Set-Cookie中的值,最后添加上 HttpOnly;Secure标识

中级程序员一般会直逼答案的核心,查apache2的官方文档

http://httpd.apache.org/docs/current/mod/mod_headers.html

Header always edit Set-Cookie "(?i)^((?:(?!;\s?HttpOnly).)+)$" "$1; HttpOnly"

Header always edit Set-Cookie "(?i)^((?:(?!;\s?secure).)+)$" "$1; secure"

#改为

Header always edit* Set-Cookie "(?i)^((?:(?!;\s?HttpOnly).)+)$" "$1; HttpOnly"

Header always edit* Set-Cookie "(?i)^((?:(?!;\s?secure).)+)$" "$1; secure"

保存,重启,再用Acunetix 测试一下,问题解决。

Apache mod_headers:无法编辑 set-cookie 标头

【中文标题】Apache mod_headers:无法编辑 set-cookie 标头【英文标题】:Apache mod_headers: can't edit set-cookie header 【发布时间】:2016-12-13 09:56:40 【问题描述】:

我正在尝试使用mod_headers 修改 cookie 对其有效的域:

来自: ipa_session=e88331a44e20d8b5caaacb0e896029fe; Domain=internal.example.com; Path=/ipa; Expires=Tue, 13 Dec 2016 09:31:33 GMT; Secure; HttpOnly

收件人:ipa_session=e88331a44e20d8b5caaacb0e896029fe; Domain=example.com; Path=/ipa; Expires=Tue, 13 Dec 2016 09:31:33 GMT; Secure; HttpOnly

Mod-headers 运行良好,这些规则有效:

Header set "something" "something"
Header edit "something" "something" "somethingdifferent"

但是编辑“Set-Cookie”标题什么都不做:

Header edit "Set-Cookie" "Domain=internal.example.com" "Domain=example.com"

Apache 语法没问题,但规则什么也没做。

Apache 包版本:2.4.18-2ubuntu3.1

【问题讨论】:

【参考方案1】:

必须在edit 之前添加always

Header always edit "Set-Cookie" "Domain=internal.example.com" "Domain=example.com"

在我的例子中,我也使用了edit*(替换所有匹配项)

【讨论】:

【参考方案2】:

添加到 Misko 的响应(因为我的帐户太新无法评论)Apache 文档说响应标头来自两组内部表。因此,有些事情需要“总是”才能工作,而没有“总是”需要其他事情才能工作。就我而言,Ubuntu 18.04、Apache 2.4.29 我必须删除“始终”才能从 PHP 7.2 中编辑标题。

文档似乎建议您可以同时使用这两个指令来涵盖所有基础,但我尚未对此进行测试。

【讨论】:

是的,我可以确认这一点。将我的网站移动到另一台服务器后,我不得不删除“总是”。

以上是关于Apache2 添加 Set-Cookie HttpOnly Secure的主要内容,如果未能解决你的问题,请参考以下文章

php安装windows下apache2.4.33/php5.6.36配置

怎样设置Cookie

set-cookie 不与 http 请求标头一起发回

Mac OS X 上的Apache配置

jmeter从上一个请求使用正则表达式抓取Set-Cookie值,在下一个请求中运用

编译安装apache2.4.18遇到的问题以及解决办法