cookie相关知识之HttpOnly

因为某种原因,有时候需要手动去拿某些网站的cookies。对于码农来说这根本不是事,打开开发者面板就可以拿了。但是后来发现手动拿也很麻烦。就在想着能不能写个插件自动获取自己浏览器上面的cookie。说干就干!

首先百度了一下js怎么获取cookies。发现document.cookie可以获取浏览器的cookie。美滋滋,以为马上就要完成任务了。测试了一下,发现通过这种方式获取的这个cookie没有用,没有通过身份校验,一脸懵逼。

通过一番对比和查找,终于发现是HttpOnly这个东西在搞鬼。在解释HttpOnly之前先科普一下xss攻击

XSS

什么是xss

XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中

xss攻击例子

以下例子截取自他山之石头
当我登录a.com后,我发现它的页面某些内容是根据url中的一个叫content参数直接显示的,猜测它测页面处理可能是这样,其它语言类似:

1
2
3
4
5
6
7
8
9
10
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>XSS测试</title>
</head>
<body>
页面内容:<%=request.getParameter("content")%>
</body>
</html>

我知道了Tom也注册了该网站,并且知道了他的邮箱(或者其它能接收信息的联系方式),我做一个超链接发给他,超链接地址为:http://www.a.com?content=,当Tom点击这个链接的时候(假设他已经登录a.com),浏览器就会直接打开b.com,并且把Tom在a.com中的cookie信息发送到b.com,b.com是我搭建的网站,当我的网站接收到该信息时,我就盗取了Tom在a.com的cookie信息,cookie信息中可能存有登录密码,攻击成功!

现在我们拿到cookie后,我们就可以为所欲为了。

HttpOnly

什么是HttpOnly

Cookie都是通过document对象获取的,我们如果能让cookie在浏览器中不可见就可以了,那HttpOnly就是在设置cookie时接受这样一个参数,一旦被设置,在浏览器的document对象中就看不到cookie了

总结

弄清楚这些后,发现果然事情没有那么简单,得找其它方式来获取这个权限了。

参考