XSS
一、XSS
1.定义
XSS的英语全称是Cross-Site Scripting(跨站脚本攻击),因为和CSS同名,为了做出区别,改称为XSS。XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
<input type="text" value="<%= getParameter("name") %>">
<div>
<%= getParameter("name") %>
</div>
//当输入 "><script>alert('haha');</script> 会被执行脚本
2.分类
存储型
攻击代码被攻击者提交到服务器数据库中,当其他用户使用网站时,攻击代码被服务端从数据库取出来拼接到html返回给用户浏览器,被浏览器拼接执行。
反射型
用户打开攻击者的url,攻击代码被藏在了url中,服务端将url中的内容取出来拼接到html返回给用户浏览器,被浏览器响应执行。
DOM
用户打开攻击者的url,攻击代码被藏在了url中,被前端的JavaScript取出执行。
3.预防手段
输入过滤
在后端输入放进数据库的时候进行过滤转义(前端不过滤,因为可能被跳过前端直接发请求),但是这种方法对于明确输入类型的如数字、地址等可以,其他的话可能出现乱码问题,毕竟前端不同的地方可能编码类型不一致。
预防存储型和反射型 XSS 攻击
纯前端渲染
将html的数据和业务内容分开,浏览器使用静态的html,在通过调用JavaScript将数据从DOM加载上去,但性能要求较高且有拼接html的危险。
转义 HTML
对一些字符进行转义
预防 DOM 型 XSS 攻击
尽量避免将可疑的数据拼接到字符串中