php设置HttpOnly

2018-09-19 07:00:17   php

  php  

什么是HttpOnly? 什么是HttpOnly?

  1. 根据Microsoft Developer NetworkHttpOnlySet-Cookie HTTP响应头中包含的附加标志。生成cookie时使用HttpOnly标志有助于降低客户端脚本访问受保护cookie的风险(如果浏览器支持它)。
  2. 以下示例显示了HTTP响应标头中使用的语法:
  3. Set-Cookie:<name> = <value> [; <最大年龄> = <年龄>]
  4. [; 到期= <日期>] [; 域= <域名>]
  5. [; 路径= <SOME_PATH>] [; 安全][; Http]
  6. 如果HTTP响应头中包含HttpOnly标志(可选),则无法通过客户端脚本访问cookie(如果浏览器支持此标志,则再次访问)。因此,即使存在跨站点脚本(XSS)缺陷,并且用户意外访问利用此漏洞的链接,浏览器(主要是Internet Explorer)也不会向第三方透露cookie
  7. 如果浏览器不支持HttpOnly并且网站尝试设置HttpOnly cookie,则浏览器将忽略HttpOnly标志,从而创建一个传统的,脚本可访问的cookie。因此,cookie(通常是您的会话cookie)很容易被恶意脚本窃取。缓解。

使用Httponly减轻最常见的Xss攻击

  1. 根据微软Secure Windows Initiative小组的高级安全项目经理Michael Howard的说法,大多数XSS攻击都是以会话cookie被盗为目标。服务器可以通过在它创建的cookie上设置HttpOnly标志来帮助缓解此问题,指示不应在客户端上访问cookie
  2. 如果支持HttpOnly的浏览器检测到包含HttpOnly标志的cookie,并且客户端脚本代码尝试读取cookie,则浏览器返回一个空字符串作为结果。这会通过防止恶意(通常是XSS)代码将数据发送到攻击者的网站来导致攻击失败。

使用PHP设置HttpOnly

PHP支持自5.2.0版(2006年11月)以来设置HttpOnly标志。

对于由PHP管理的会话cookie,该标志通过参数在HttpOnly上的 php.ini PHP手册中永久设置:

  1. session.cookie_httponly = True

或通过函数[6]在脚本中和期间:

  1. void session_set_cookie_paramsint $ lifetime [,string $ path [,string $ domain
  2. [,bool $ secure = false [,bool $ httponly = false]]]])

对于应用程序cookie,setcookie()中的最后一个参数设置HttpOnly标志[7]:

  1. bool setcookiestring $ name [,string $ value [,int $ expire = 0 [,string $ path
  2. [,string $ domain [,bool $ secure = false [,bool $ httponly = false]]]]]])

友情链接HttpOnly:
https://www.owasp.org/index.php/HttpOnly#What_is_HttpOnly.3F