NGINX & PHP Cookie 会话中 PHPSESSID 缺少 HTTPOnly、Secure 属性解决方案
1 / 说明
基于安全的考虑,需要给cookie加上Secure和HttpOnly属性,HttpOnly比较好理解,设置HttpOnly=true的cookie不能被js获取到,无法用document.cookie打出cookie的内容。Secure属性是说如果一个cookie被设置了Secure=true,那么这个cookie只能用https协议发送给服务器,用http协议是不发送的。
会话cookie中缺少Secure属性会导致攻击者可以通过非HTTPS页面窃取到用户的cookie信息,造成用户cookie信息的泄露。
cookie中的Secure指的是安全性。通过设定cookie中的Secure,可以指定cookie是否只能通过https协议访问。一般的cookie使用HTTP协议既可访问,如果启用Secure属性,则浏览器仅仅会在HTTPS请求中向服务端发送cookie内容。
在WEB应用中,对于敏感业务,如:登录或者付款,需要使用HTTPS来保证内容的传输安全,而在用户成功获得授权之后,获得的客户端身份cookie如果没有设置为Secure,那么很有可能会被非HTTPS页面拿到,从而造成重要的身份泄露。
2 / PHP解决方案
PHP 5.6以后的版本:
① 简单粗暴直接修改php.ini文件
session.cookie_httponly=true
session.cookie_secure =
② 在php代码中使用ini_set函数设置
ini_set(“session.cookie_httponly”, 1);
(单一入口框架加载index.php 入口文件即可)
③在调用 session_start()之前调用 session_set_cookie_params()函数设置
如果是框架需要修改底层代码,老框架推荐前两个粗暴有效的方法。
<?php private function startSession($time = 3600, $ses = 'MYSES') { session_set_cookie_params($time); session_name($ses); session_start(); if (isset($_COOKIE[$ses])) #第五个参数 设置为true setcookie($ses, $_COOKIE[$ses], time() + $time, "/", true); } ?>
3 / Nginx解决方案
● cookie没有使用http-only;
● cookie没有携带secure属性;
● http头中需要配置“X-Frame-Options:SAMEORIGIN”;
以上这几点可以通过nginx的配置来轻松实现,具体方法就是在需要更改的网页server的配置里面添加下面几句话。
## 加载Nginx.conf 文件 http{ } 或 server{ }
add_header Set-Cookie “HttpOnly”;
add_header Set-Cookie “Secure”;
## 表示该页面可以在相同域名页面的 frame 中展示
add_header X-Frame-Options SAMEORIGIN;
————————————————
版权声明:本文为CSDN博主「Ba?cker」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/backerli/article/details/120465246