导读:
分类:技术干货
题目:web安全性浅析
示例+原因+防御
XSS跨站脚本攻击
在新浪博客写一篇文章,同时偷偷插入一段 script
攻击代码中,获取cookie,发送给自己的服务器
发布博客,有人查看博客内容
会把查看者的cookie发送到攻击者的服务器
攻击原理:
能注入恶意的HTML/JavaScript代码到用户浏览的网页上,从而达到Cookie资料窃取、会话劫持、钓鱼欺骗等攻击。
Web浏览器本身的设计不安全。浏览器能解析和执行JS等代码,但是不会判断该数据和程序代码是否恶意。
防御措施:
让注入的js不可执行。
1.输入检查 XSS Filter 对输入内容做格式检查,类似“白名单”,可以让一些基于特殊字符的攻击失效。在客户端JS和服务器端代码中实现相同的输入检查(服务器端必须有)。
2.输出检查 在变量输出到html页面时,可以使用编码或转义的方式来防御XSS攻击 HtmlEncode:将字符转成HTMLEntities,对应的标准是ISO-8859-1。
& --> &
< --> <
> -->>
" --> "
' --> '
/ --> /
JS中可以使用JavascriptEncode。需要对“\”对特殊字符转义,输出的变量的必须在引号内部。
3.请求头设置 . set-cookie 设置 httpOnly 属性可以禁止JavaScript读取cookie
# CSRF 跨站请求攻击
攻击原理:
1.在网站A中登录过,存在漏洞(只用cookie验证)
2.在网站B引诱点击
传统使用cookie中存储sessionid,但是在任何一个站点都可以获取到你的sessionid并发起携带他的请求,这就是CSRF的原理。
防御措施:
1.token验证
token存储在用户session中,每个用户不同。
不将token存储在cookie中而是放在表单隐藏域中或者localstorage中,每次请求用代码添加,就能防止钓鱼。
2.Referer验证(判断站点的来源,比如不是订单页面不让提交订单)
在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址
3.隐藏令牌 (和token类似,比较隐蔽,比如放在请求头中)