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安全》
本文链接:https://360us.net/article/40.html