注意:HttpOnly解决的是XSS后的Cookie劫持攻击。因为JS读取不到Cookie的值。
一个Cookie的使用过程如下:
Step1:浏览器向服务器发起请求,这时候没有Cookie。
Step2:服务器返回时发送Set-Cookie头,向客户端浏览器写入Cookie。
Step3:在该Cookie到期前,浏览器访问该域下的所有页面,都将发送该Cookie。
HttpOnly是在Set-Cookie时标记的:
Set-Cookie: <name>=<value>[; <Max-Age>=<age>]
[; expires=<date>][; domain=<domain_name>]
[; path=<some_path>][; secure][; HttpOnly]
服务器可能会设置多个Cookie(多个key-value对),而HttpOnly可以有选择性地加在任何一个Cookie值上。
例,使用HttpOnly
<?php
header("Set-Cookie: cookie1=test1;");
header("Set-Cookie: cookie2=test2;httponly", false);
?>
<script>
alert(document.cookie);
</script>
在这段代码中,cookie1没有HttpOnly,cookie2被标记为HttpOnly。两个Cookie均被写入浏览器。
在不同的语言中,给Cookie添加HttpOnly的代码如下
- Java EE
response.setHeader("Set-Cookie", "cookiename=value; Path=/;Domain=domainvalue;Max-Ag
e=seconds;HTTPOnly");
- C#
HttpCo