整体的 xss 防范是非常复杂和繁琐的,不仅需要在全部需要转义的位置,对数据进行对应的转义。而且要防止多余和错误的转义,避免正常的用户输入出现乱码。
虽然很难通过技术手段完全避免 xss,但可以总结以下原则减少漏洞的产生:
<%= data %>
而不是 <%- data %>
;{{! data }
而不是 {{= data }
;freemarker.core.outputformat
。onload="onload('{{data}}')"
、onclick="go('{{action}}')"
这种拼接内联事件的写法。在 javascript 中通过 .addeventlistener()
事件绑定会更安全。createelement
、setattribute
之类的方法实现。或者采用比较成熟的渲染框架,如 vue/react 等。
cross-site scripting(跨站脚本攻击)简称 xss,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 cookie、sessionid 等,进而危害数据安全。
为了和 css 区分,这里把攻击的第一个字母改成了 x,于是叫做 xss。
xss 的本质是:恶意代码未经过滤,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行。
而由于直接在用户的终端执行,恶意代码能够直接获取用户的信息,或者利用这些信息冒充用户向网站发起攻击者定义的请求。
在部分情况下,由于输入的限制,注入的恶意脚本比较短。但可以通过引入外部的脚本,并由浏览器执行,来完成比较复杂的攻击策略。
xss 有哪些注入的方法:
javascript:
等可执行代码。background-image:url("javascript:...");
的代码(新版本浏览器已经可以防范)。expression(...)
的 css 表达式代码(新版本浏览器已经可以防范)。总之,如果开发者没有将用户输入的文本进行合适的过滤,就贸然插入到 html 中,这很容易造成注入漏洞。攻击者可以利用漏洞,构造出恶意的代码指令,进而利用恶意代码危害数据安全。
详情请查看:https://segmentfault.com/a/1190000016551188#articleheader4
如对本文有疑问, 点击进行留言回复!!
轻松解决 org.apache.taglibs.standard.tlv.JstlCoreTLV 困惑
vert实践五——Json?Protocol Buffer?FlatBuffers?
[基于tensorflow的人脸检测] 基于神经网络的人脸检测8——验证训练好的神经网络
selenium + ajax抓取英雄联盟全部英雄的详细信息及多线程保存全部皮肤图片到本地
网友评论