前记
web应用基于webx3框架,前端页面用velocity。在日常环境部署时,安全检测结果有css漏洞,并给出了解决方案。
XSS是 CrossSite Scripting的缩写,中文名称为跨站脚本攻击。
XSS是攻击者在Response中加入恶意脚本,脚本会在浏览器中执行,导致用户重要信息泄露。例如在服务器端的Screen java类里添加:
Code_1: context.put("css","<script> alert(\"My FirstJavaScript\");</script>");
那么浏览器就会执行这段js脚本, 弹出一个alert对话框
3. 如何防止XSS?
Webx3.0框架对XSS攻击有很好的解决方案。在webx*.xml配置文件里,默认情况下对所有htm文件进行转义,只有在noescape里配置的不转义。 例如
<plugins> <vm-plugins:escape-supportdefaultEscape="html"> <vm-plugins:noescape> <vm-plugins:if-matches pattern="^control\." /> <vm-plugins:if-matches pattern="^screen_placeholder" /> <vm-plugins:if-matches pattern="^stringEscapeUtil\.escape"/> <vm-plugins:if-matchespattern="^csrfToken\.(get)?hiddenField" /> </vm-plugins:noescape> </vm-plugins:escape-support> </plugins>
由于Code_1 没有使用noescape,那么就会被webx3.0框架的防止XSS攻击处理,客户端得到的内容为:
Code_2: <script>alert("My First JavaScript");</script>
说明:<是<的转义符号,>是>的转义符总结: Code_2不会被脚本引擎执行,因此CSS威胁解除。 浏览器的渲染引擎会把Code_2渲染为文字<script> alert("My FirstJavaScript");</script>
防止XSS攻击的手段为:凡是到VM页面中的内容都会执行HTML escape转义处理,因此<script>将转义为<script>。然而浏览器中脚本引擎只会执行<script>中的 内容,对<script>中的内容置若罔闻,从而避免CSS攻击。<script>只会被html解释器翻译为<script>在页面中显示。