前端安全
做Web开发首先要保证网站或网页的安全性。了解常见的网站攻击方式是一个合格的web开发者的基本功力,只有做好了安全防护,才能保证网站的可靠性和可用性。
1、XSS
XSS(Cross Site Script, 跨站脚本攻击),是攻击者在Web页面中插入恶意脚本,当用户浏览页面时,促使脚本执行,从而达到攻击目的的一种攻击方式。其特点是攻击者会想方设法地在目标网站上执行第三方脚本。
举个例子。攻击者将<script src='bad-script.js'></script>
的数据当做一个评论提交到后台,如果后台没有做数据校验而直接存入数据库。之后的用户浏览评论时,服务器会从数据库中读取出该条评论并展示在页面上,攻击者注入的脚本bad-script.js也就执行了。所有浏览的用户都会受到攻击。
XSS分三种类型:
存储型XSS
注入的脚本永久地存在于目标服务器上,每当受害者向服务器请求此数据就会重新唤醒攻击脚本。
反射型XSS
当受害者被引诱点击一个恶意链接,提交一个伪造的表单,恶意代码会和正常返回的数据一起作为响应发送到受害者的浏览器,从而骗过浏览器,使之误以为恶意脚本来自于可信的服务器,以至于让恶意脚本得以执行。
DOM型XSS
有点类似于存储型XSS,但这是本地攻击行为,在本地更新DOM时导致了恶意脚本的执行,不会导致所有用户受到攻击。
防御方式:
输入过滤。对用户输入的数据做过滤,比如检查输入的数据是否符合预期的格式。同时,后台服务器需要在接受到用户输入数据后,对危险字符进行过滤或者转义处理,再存储到数据库中。
输出编码。输出HTML属性时可以使用HTML转义编码进行处理,输出页面脚本代码可以相应进行JavaScript编码处理。
HttpOnly Cookie。Web应用程序在设置cookie时,将其属性设置为HttpOnly,就可以避免该网页cookie被客户端恶意盗取,保护用户cookie信息。
设置
HTTP Header: "X-XSS-Protection:1"
。
2、CSRF
CSRF(Cross Site Request Forgery,跨站请求伪造),冒充用户在站内进行操作请求,达到攻击的目的。
举个例子。网站A是一家银行的网站,一个转账接口是"bankA.com/transfer?toID=?&cash=?"。该接口只有在已验证身份的情况下才能调用。此时,攻击者建立了一个B网站,里面放了一段隐藏代码,用来调用转账接口。当受害者登录A网站后,短时间不需要验证,在这个时间段内又访问了B网站,B里面隐藏的恶意代码就会执行成功。
预防方式:
关键操作只接受post请求。
检测Referrer值,判断请求来源是否可信。
使用Token来验证身份,这是目前的主流用法。服务器维护一个有生命周期的Token用以验证用户的身份。token的产生必须要随机、使用也是一次性的并且注意保密。
3、SQL注入
SQL注入是将一种SQL代码添加到输入参数中,传递到服务器解析并执行的一种攻击方法。
SQL注入攻击是输入参数未经过滤,然后直接拼接到SQL语句当中解析,执行达到预想之外的一种行为,称为SQL注入攻击。
预防方式:
严格检查输入变量的类型和格式。整数的参数,判断其不为空且类型为数字可通过。字符串参数,可以使用正则表达式过滤。
过滤和转义特殊字符。
利用MySQL的预编译机制。当绑定的参数传到MySQL服务器,MySQL服务器对参数进行编译,即填充到相应的占位符的过程中,做了转义操作。
4、参考文献
Last updated