跨站点脚本(XSS)和预防

如OWASP网站(https://www.owasp.org/index.php/Cross-site_Scripting_(XSS))所述,跨站点脚本(XSS)攻击的变种几乎是无限的。 在这里,我建议使用基于Servlet筛选器的解决方案来清理HTTP请求。
攻击
让我们看看XSS攻击是如何表现出来的。 附件是一个过度简化的portlet,它显示了一个场景,该场景在论坛等基于社交和协作的系统中非常常见。 参见下面的伪序列图。


测试
在这里,1.有一个可用的表单,用户可以在其中输入带有提交按钮和名为“ mytext”的文本框的评论。 用户A呈现此表单。 2.用户A在输入文本框中输入一个Java脚本并提交表单(这是邪恶输入您的应用程序的步骤)。 只是为了让您看到问题所在; 假设用户输入的脚本将应用程序存储的cookie发送到攻击者的站点。 3.用户B登录到系统,他想查看用户A提供的注释。因此,他进入相应页面,系统在其中呈现A提供的“ mytext”的值。4.浏览器呈现“ mytext”的值,即一个Java脚本,它获取为用户B存储的当前站点的所有cookie,并将其发送给Attackers系统。
预防措施(总比治愈更好),我们将看到清除HTTP参数如何有助于阻止这种攻击。 为了使这次攻击成功,当B提供A的评论时,将向浏览器发送什么样的响应? 就像是 -
<div>A's Comments</div>
<div>
<script>
<!--
This script will get all cookies and will send them to attacker's site.
-->
</script>
</div>
如您所见,这种攻击之所以可能是因为,对于浏览器而言,HTML文档是标记和可执行代码的混合体。 混合可执行代码和标记的能力是攻击者可以利用的致命组合。 使用Servlet过滤器,我们可以清除所有输入参数并删除所有可以表示浏览器可执行指令的特殊字符。 这样,没有邪恶进入系统。 这是执行此操作的非常简单的Servlet过滤器。 使用HttpServletRequest上的包装器,并且在转义后重写方法以返回请求参数值。 为了逃避,我建议使用Apache Commons项目的StringEscapeUtils,而不要进行一些自定义编码。
另一种方法是让用户输入他们想要的任何东西,但在渲染时将<,>,&,',“转换为其相应的字符实体代码。 通常,这可以通过使用JSTL来完成–
<div>A's comments</div>
<div>
<c:out value="${comments}" escapeXml="true" />
</div>
当用户可以彼此共享代码片段时,此方法特别有用。
基于用户与系统之间的交互,可以设计出许多其他巧妙的方式来发起XSS攻击。 但是拥有对系统输入的绝对控制权肯定可以再次防范此类攻击。

参考: XSS和预防我们JCG伙伴 Advait特里维迪在CoolCode博客。

翻译自: https://www.javacodegeeks.com/2012/08/cross-site-scripting-xss-and-prevention.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值