Those things about Cookie security settings

First, the headline: those things about Cookie security settings

       Sub-heading: httponly resolve property and secure property

 

Second, Introduction

Often see cross-site scripting XSS attacks to steal cookie case, there is a rehabilitation program httponly. Write out today shift the next ...

2.1 must first prepare the cookie knowledge. If you know the first cookie, please read this article:

js于cookies.zip、google cookie.

 

 

Three, Cookie property

cookie contents, as shown:

 

HTTP response header:

Set-Cookie: <name>=<value>[; <Max-Age>=<age>][; expires=<date>][; domain=<domain_name>]=[; path=<some_path>][; secure][; HttpOnly]

                                

Cookie common attributes

A Cookie contains the following information:

1) Cookie name , Cookie name must use only the characters used in a URL, usually with letters and numbers, can not contain special characters, special characters if you want to transcode. Js The cookie can be used when operation of escape () for the name of the transcoding.

2) Cookie value , Cookie value name Similarly Cookie may be transcoded and encrypted .

3)Expires,过期日期,一个GMT格式的时间,当过了这个日期之后,浏览器就会将这个Cookie删除掉,当不设置这个的时候,Cookie在浏览器关闭后消失。

4)Path,一个路径,在这个路径下面的页面才可以访问该Cookie,一般设为“/”,以表示同一个站点的所有页面都可以访问这个Cookie。

5)Domain,子域,指定在该子域下才可以访问Cookie,例如要让Cookie在a.test.com下可以访问,但在b.test.com下不能访问,则可将domain设置成a.test.com。

6)Secure,安全性,指定Cookie是否只能通过https协议访问,一般的Cookie使用HTTP协议既可访问,如果设置了Secure(没有值),则只有当使用https协议连接时cookie才可以被页面访问。

7)HttpOnly,如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息。

注意:上图为在w3shool上为setcookie语法,并没有显示7 httponly哦,各自版本支持问题。

 

四、认识httponly属性

4.1认识HTTPONLY

       为了解决XSS(跨站脚本攻击)的问题,IE6开始支持cookie的HttpOnly属性,这个属性目前已被大多数浏览器(IE、FF、Chrome、Safari)所支持。当cookie中的HttpOnly属性被设置为true时(最后第7位),前端脚本就无法访问或操作cookie了(只能通过后台访问),这样XSS就失效了。 HttpOnly会话cookie支持的浏览器,将仅用于发送HTTP(或HTTPS)请求时,从而限制从其他非HTTP的API(如JavaScript)访问。减轻此限制,但会议通过跨站点脚本(XSS)的cookie盗窃的威胁并没有消除。此功能仅适用于会话管理的cookie,而不是其他的浏览器的cookies。-----------------这里还没理解过来的,没关系,继续往下看

 

4.2 httponly效果演示

先看例子演示:

1.php

<?php setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);   ?> <script>alert(document.cookie);</script>

我们可以看到这个弹出来的这个框框是什么内容都没有的。

2.php

 

<?php setcookie("abc", "test" );   ?> <script>alert(document.cookie);</script>

我们通过对比可以看出,有HTTPONLY的页面,JS是不能获取到COOKIES内容的,而没有HTTPONLY的页面,JS轻松获取COOKIES无压力。

 

简易理解:阻止客户端脚本访问Cookie

 

新浪微博XSS的时候,就遇到过HTTPONLY,即使你通过XSS获取到了用户的COOKIES,也无法通过这个COOKIES访问用户的页面,所以说,HTTPONLY的设置是每个网站必备的!

 

4.3.HttpOnly的设置样例(未测试可行性)

 

javaE

1
2
response.setHeader( "Set-Cookie" , "cookiename=value;
Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");

具体参数的含义再次不做阐述,设置完毕后通过js脚本是读不到该cookie的,但使用如下方式可以读取

1
Cookie cookies[]=request.getCookies();

C#

<div class="syntaxhighlighter c# ie" id="highlighter_114362">
1
2
3
HttpCookie myCookie =  new  HttpCookie( "myCookie" );  
myCookie.HttpOnly =  true
Response.AppendCookie(myCookie);

VB.NET

1
2
3
Dim myCookie As HttpCookie =  new  HttpCookie( "myCookie"
myCookie.HttpOnly = True 
Response.AppendCookie(myCookie)

 

   但是在.NET 1.1 ,中您需要手动添加

1
Response.Cookies[cookie].Path +=  ";HTTPOnly" ;

Servlet3

只需要在web.xml中添加如下片段:

1
2
3
4
5
6
<session-config>
   <cookie-config>
     <http-only> true </http-only>
     <secure> true </secure>
   </cookie-config>
</session-config>

 

PHP中,cookie的HttpOnly有两种设置方式。

1
2
3
4
方法一:
header( "Set-Cookie:tmp=100;HttpOnly" );
方法二:
setcookie( "tmp" 100 , NULL, NULL, NULL, NULL, TRUE);

 

PHP4

1
header( "Set-Cookie: hidden=value; httpOnly" );

 

PHP5

1
setcookie( "abc" "test" , NULL, NULL, NULL, NULL, TRUE);    最后一个参数为HttpOnly属性

 

五、深挖

问:为什么设置了httponly-cookie盗窃的威胁并没有彻底消除?

答:因为httponly作用只是限制从其他非HTTP的API(如JavaScript)访问,cookie还是有可能传递的过程中被监听捕获后信息泄漏。

我查阅了msdn,它上面这么说的:

将 HttpOnly 属性设置为 true并不能防止对网络频道具有访问权限的攻击者直接访问该 Cookie针对这种情况,应考虑使用安全套接字层 (SSL) 来提供帮助。工作站的安全也很重要,原因是恶意用户可能使用打开的浏览器窗口或包含持久性 Cookie 的计算机,以合法用户的标识获取对网站的访问。

setcookie("tmp", 100, NULL, NULL, NULL, TRUE, TRUE);【https】

                                                           6         7

总结下:

增多 cookie 安全性添加HttpOnly和secure属性

(1)HttpOnly属性

如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。

(2)secure属性

当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被盗取到Cookie 的具体内容。

对于以上两个属性,

secure属性是防止信息在传递的过程中被监听捕获后信息泄漏。 6号位true

HttpOnly属性的目的是防止程序获取cookie后进行攻击。7号位true

注意,为了降低XSS跨站点脚本攻击带来的损害,通常需要将HTTP-only Cookie和其他技术组合使用。如果单独使用的话,它无法全面抵御跨站点脚本攻击。可以使用专门的工具(fiddler2,burp)对安全性进行测试。XSS_cookie跨站点脚本攻击示例请参阅我的其他文章。

 

六、资源链接

1、AVA年份安全 第四周 SESSION COOKIE HTTPONLY 标识

2、<a href="http://msdn.microsoft.com/zh-cn/library/system.web.httpcookie.httponly.%3Ca%20href=" http:="" www.2cto.com="" kf="" web="" asp="" "="" target="_blank" class="keylink" style="color: rgb(51, 51, 51); text-decoration-line: none;">aspx" target="_blank">http://msdn.microsoft.com/zh-cn/library/system.web.httpcookie.httponly.aspx

3、https://www.owasp.org/index.php/HTTPOnly

4、http://www.w3school.com.cn/php/func_http_setcookie.asp

5、Cookie使用安全HttpOnly引见以及防止XSS攻击时的作用

6、http://www.myexception.cn/mobile/824869.html 

个人之拙见,不妥之处还望斧正。Luolired

Guess you like

Origin blog.csdn.net/Deng_gene/article/details/69371397