缺少HTTPOnly和Secure属性解决方案

重新设置了WEB服务器之后,发现一些账号无法登陆

服务器是用 apt 方式安装的 Apache2 + php-fpm

1. 之前怀疑是 302 重定向到问题,但是 a2enmod/a2dismod rewrite 之后,均无法解决此问题。

2. 用chrome登陆一个文件管理器,由于单个文件好调试,F12之后,

3. F12之后,发现全是英文,经过一番摸索,终于设置到了 中文。

4. 偶尔发现响应头中有个黄色的三角符号,吃惊之余看到 

set-cookie:;HttpOnly;Secure

这不就是 mod_headers模块的问题吗?可能是Apache2版本的问题,导致之前虚拟机中设置的header在当前版本中存在语法问题。

到这里问题是找到了,先了解一下 Cookie安全相关属性

HttpOnly :将HttpOnly 设置为true ,通过程序(JS脚本、Applet等)将无法读取到Cookie信息,防止程序获取cookie后进行攻击。

Secure :设置了Secure (没有值),则只有当使用https协议连接时cookie才可以被页面访问,防止信息在传递的过程中被监听捕获后信息泄漏。

打开虚拟机相关的配置文件,看到一行

Header edit Set-Cookie ^(.*)$ ;HttpOnly;Secure

看起来没问题,谷歌搜索之后,发现还是有语法问题,少了红色的 $1 ,可能是Apache设置引起的差异。

Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure

5. 给 Header edit Set-Cookie ^(.*)$ ;HttpOnly;Secure 增加了  $1 问题解决,

    程序的问题就是这个神奇,程序员为什么会猝死,为什么是吃青春饭的,由此可得到答案,实在比在放大镜下面看蚊子的牛牛还艰辛。

远离IT,则人生幸福

6. 这问题在PHP、nginx也可以处理。

    PHP

php.ini 文件开启以下两行,默认大概位于 1390左右

session.cookie_httponly=true
session.cookie_secure =

或者在 php 代码中使用 ini_set 函数设置

@ini_set('session.cookie_httponly',   'On');
@ini_set('session.cookie_secure',      'On');
@ini_set('session.use_only_cookies', 'On');

 

    Nginx

Nginx.conf 文件中设置 http{ } 或 server{ }
add_header Set-Cookie "HttpOnly";
add_header Set-Cookie "Secure";

 

到此,问题已经基本处理完毕,在此做个记录,以裨益网友

 

上一篇:C++核心编程 14(二)左移运算符重载


下一篇:Centos7下系统报错Generating “/run/initramfs/rdsosreport.txt”