46. XSS篇——XSS防御

一、 HttpOnly

HttpOnly最早是由微软提出的,并在IE6中实现的,至今已经成为一个标准。浏览器将禁止页面的JavaScript访问带有HttpOnly属性的Cookie

严格的说,HttpOnly并非为了对抗XSS——HttpOnly解决的是XSS后的cookie劫持攻击。

在“初探XSSpayload”一节中,曾经演示过“如何使用XSS窃取用户的Cookie,然后登陆进该用户的账户”。但如果该Cookie设置了HttpOnly,则这种攻击会失败,因为JavaScript取不到cookie的值。

一个cookie的使用过程如下:

Step1:浏览器向服务器发送请求,这时候没有cookie

Step2:服务器返回时发送set-cookie头,向客户端浏览器写入cookie。

Step3:在该cookie到期前,浏览器访问该域下的所有页面,都将发送该cookie。

需要注意的是,服务器可能会设置多个cookie(多个key-value对),而HttpOnly可以有选择性地加在任何一个Cookie值上。

在某些时候,应用可能需要JavaScript访问某几项cookie,这种cookie可以不设置HttpOnly标记;而仅把HttpOnly标记给用于认证的关键cookie。

但是HttpOnly不是万能的,添加了HttpOnly不等于解决了XSS问题。

二、输入检查

输入检查的逻辑,必须放在服务器端代码中实现。如果只是在客户端使用JavaScript进行输入检查,是很容易被攻击者绕过的。目前web开发的普遍做法是同时在客户端JavaScript中和服务器端代码中实现相同的输入检查。客户端JavaScript的输入检查,可以阻挡大部分误操作的正常用户,从而节约服务器资源。

在XSS的防御上,输入检查一般是检查用户输入的数据中是否包含一些特殊的字符,比如<、>、’、”、等等。如果发现存在特殊字符,则将这些特殊字符过滤或者编码。

比较睿智的“输入检查”可能还会匹配XSS的特征。比如查找用户数据是否包含了“<script>”、“JavaScript”等敏感字符。

三、输出检查

对于变量输出到HTML页面时,可以使用编码或者转义的方式来防御XSS攻击。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值