重新设置了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";
到此,问题已经基本处理完毕,在此做个记录,以裨益网友