XSS与CSRF
引言
针对前端安全,主要有XSS跨站脚本攻击,CSRF跨站伪造请求,SQL注入等,今天主要讨论下关于前两种
XSS跨站脚本攻击
更多具体详细的解释可以查看XSS(跨站脚本攻击)的最全总结
XSS攻击通常被分为两类:存储型和反射型。还有第三类,和基于DOM的xss;下面我们不说定义直接看看怎么操作
- 反射型
一般有搜索框的网站,在搜索东西的时候会在结果页呈现你搜索的字符;
比如你搜索笔记本电脑,网站会提示你搜索“笔记本电脑”的结果如下,这说明用户的输入在页面上有了呈现;那么我们输入一段恶意脚本,也许也会原样输出执行,比如我们输入
1 | <script>alert(1)</script> |
恶意代码就是你可以放一段脚本,比较加入一个js文件请求,在js代码里来获取cookie等用户信息,并发送给自己;但用户并不会自己输入恶意脚本,那么就通过邮件等方式,让用户点击搜索结果连接,以达到脚本注入的目的;
当然基本上没什么网站会有这么明显的漏洞,这里只是演示说如何实现反射型攻击。
- 存储型
这种一般常出现在用户可输入,然后在网站动态展示,大家都能看到的网站,如微博,社区,评论等地方;常见的做法就是发一段脚本到输入区,网站会记录下来并动态的渲染在页面上,只要访问的用户都能看到;由于这种情形注入的脚本被写到了服务器数据库中,所以叫存储型攻击;
- 基于DOM
这种攻击的前提是易受攻击的网站有一个HTML页面采用不安全的方式从document.location 或document.URL 或 document.referrer获取数据(或者任何其他攻击者可以修改的对象),也就是说恶意代码直接来自这些可任意被修改的对象;详细可查看基于 DOM 的第三类跨站脚本 XSS
如上,一般只要这个网站某个页面将用户的输入包含在它生成的动态输出页面中并且未经验证或编码转义,这个缺陷就存在。
防范方法
- 所有前端的页面渲染,尽量使用ajax异步进行,从后台获取要显示的数据。
- 前端提交过来的数据,在后台入口处统统对HTML中的关键字进行html编码转义。
CSRF
更多具体详细的解释可以查看邪恶的CSRF – superfish
CSRF叫跨域伪造请求,其实就是模拟用户操作,就是在A网站登录的情况下,B网站可以发起A网站发起的请求;要达成这个目的就需要解决跨域的问题;
传统的ajax都有跨域的限制,但如发起get请求就很方便,以打开url的方式,jsonp的方式,请求三方资源的方式,都可以达成目的;
而采用原生表单的提交方式,可以发起post跨域请求;