防御XSS的一般方法

 提示:转载请注明原文链接

 本文永久链接:http://360us.net/article/40.html

1、HttpOnly

HttpOnly最早由微软提出,并在IE6中实现,至今已经逐渐成为一个标准。

浏览器将禁止页面的javascript访问带有HttpOnly属性的Cookie。

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

PHP设置带HttpOnly属性Cookie的方法是使用自带的setcookie函数:

setcookie('PHPSESSID', '79ce945e3bfd1917919e63a7ddbfe385', null, null, null, null, true);

最后一个参数是设置httponly属性,执行后服务器会发送如下设置cookie的头:

Set-Cookie:PHPSESSID=79ce945e3bfd1917919e63a7ddbfe385; path=/; HttpOnly


2、输入检查

常见的Web漏洞如XSS、SQL注入等,都要求攻击这构造一些特殊字符,这些特殊字符可能是正常用户不会用到的,所有输入检查就有存在的必要了。

输入检查,在很多时候也被用于格式检查。例如网站注册使用的用户名,会被要求只能用字母、数字的组合,“hello1234”就是合法的,而“hello@#¥”就是非法的了。

这些格式检查就像白名单,可以让一些基于特殊字符的攻击失效。

输入检查一般是检查用户输入的数据中是否包含特殊字符。如果发现则过滤或者编码。

PHP输入检查过滤的库可以用HTML Purifier


3、输出检查

对于输入检查没有过滤的XSS,可以在输出的时候在进行一遍过滤。

一般来说,除了富文本的输出外,在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。

PHP中可以使用htmlentities和htmlspecialchars编码特殊字符。


上面只是常用的方式,并不能防御所有的XSS攻击。

XSS攻击方式有很多种,还需要针对不同场景使用不同的方法去应对。



参考:《白帽子将Web安全》

 评论
昵称
邮箱
网址
最多500个字符