Xss 攻击示例
1 | ><marquee%20onwheel=alertxsser |
1 | ><marquee%20onwheel=alertxsser> |
1 | <marquee%20onwheel=alertxsser> |
1 | ></script><marquee onwheel=alert`xsser`> |
1 | ><script>alert('XSS') |
XSS 攻击的原理
攻击者直接在把html脚本当做参数传递到接口,然后接口依旧按照原样把参数返回。前端同学把返回的参数拍到页面,然后浏览器把html脚本参数当做正常的html执行,最终就导致了XSS攻击。
举个栗子:
发起如下的请求 –>
1 | http://xxxxx?paramOne=><marquee%20onwheel=alertxsser>¶mTwo=bob |
后端不对传入参数做处理,直接再拍回页面
1 | <input id="xx" name="xx" type="text" value=${paramOne}/> |
糟糕,><marquee%20onwheel=alertxsser> 这段代码会被当做正常的html执行,那么结果就是“页面开始滚动,或者页面出现一些奇怪的非正常页面展示”。
总结一下: XSS攻击就是攻击者把html作为参数传递给后端接口,后端接口把参数再原封不动的拍回页面展示。对于浏览器,它是无法识别参数是正常参数还是攻击脚本,它只能解释执行所有的html标签。
XSS 防御
1 | private static final String XSS_SCRIPT_PATTERN = "(?si)((<script.*?>[\\S\\s]*?<\\/script>)|(<script.*?/>)|(<.*?script>))"; |
XSS在项目中的实践落地
Servlet Filter + HttpServletRequestWrapper
Filter的作用是针对特定的uri进行拦截,并不是全局的的uri都过滤
HttpServletRequestWrapper主要是用于修改reqeust parameter的值。
下面是类图和时序图: