最近研究了css规范,下一步就是简单分析一下前端安全相关的知识。
以下内容整理之淘宝UED相关资料
1、XSS (Cross Site Script)跨站攻击脚本
方式主要有:
- 在Web页面插入恶意的html代码
- 用户浏览网页,嵌入在页面里面的代码会被执行
种类主要有:
- 基于DOM的XSS
产生的原因:
i、页面含有一些不受服务器端控制的DOM
ii、通过form、referer、location修改页面的DOM
解决的方法:
避免客户端脚本对DOM的重写、重定向及其它的敏感操作,需要在客户端对form输入进行过滤
- 基于字符集的XSS
产生的原因:
页面字符集不固定,用户输入非期望字符集的字符,逃过了过滤。
解决的方法:
i、页面一定要指定字符集
ii、XML不仅要指定字符集,而且要标签闭合
- 持久性XSS
产生的原因:
破坏html结构,来源是数据库导致。
解决的方法:
对输入进行过滤
对输出进行编码,如<>等这些进行编码的转换
- 非持久性XSS
产生的原因:
直接将fomr或者搜索域中的字符扔到页面,比如搜索域输入带<script>的执行脚本,在展示搜索结果的时候会执行输入的脚本
解决的方法:
对输入进行过滤
对输出进行编码,如<>等这些进行编码的转换
- 基于Flash的跨站
产生的原因:
AS脚本接受用户输入并操作cookie,攻击者配合其他XSS方法将恶意swf文件嵌入页面
解决的方法:
i、管理好cookie的读写权限
ii、对flash接受用户输入进行过滤和限定
- Self-inflicted XSS
产生的原因:
某些用户作为攻击者,对其他用户进行攻击,最常见的可能就是分享了。
解决的方法:
对于自己不信任的尽量不要点击。
- 未经验证的跳转构成的跨站
产生的原因:
服务端做302调整,攻击者利用这跳转到恶意的网站。
解决的方法:
后端限定接收的URL
- Cookie的跨站
产生的原因:
脚本操作cookie,比如进行搜索提交等。
解决的方法:
后端对cookie进行验证
2、CSRF(伪造请求)
场景:
表单提交相关,比如登录、注册
Ajax请求数据相关的
防范:
验证码、时间戳
在表单中加入token,提交方式尽量POST
AJAX附带token
可被利用的脚本:
i、URL相关的
document.location = ...
document.location.hostname = ...
document.location.replace(...)
document.referer
document.URL = ...
window.location
ii、直接运行的脚本
eval(....)
window.setInterval(...)
window.setTimeout(...)
window.execScript(...)