• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

NGINX 和amp; PHP Cookie 会话 PHPSESSID 缺少 HTTPOnly、Secure 属性解决方案

武飞扬头像
sunsineq
帮助1

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;

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgaejjg
系列文章
更多 icon
同类精品
更多 icon
继续加载