java xss 配置不作用_java – 用于XSS预防的ESAPI不起作用

本文讨论了Java应用中防止XSS攻击的挑战,特别是当涉及到scriptlet和静态代码扫描工具如Fortify时。强调了理解数据流和编码上下文的重要性。建议使用ESAPI的encodeForHTMLAttribute和encodeForJavaScript方法,根据数据的用途进行适当编码。对于在JavaScript中使用的值,可能需要分开编码,确保在HTML属性和JavaScript中分别进行正确处理。
摘要由CSDN通过智能技术生成

你需要问的第一个问题应该是“我将这个值交给了什么代码解释器?”

不幸的是,防止XSS不是基于配方的任务,从它的外观来看 – 你的应用程序正在使用scriptlet,这使得Fortify等静态代码扫描工具为你提供准确的结果变得更加困难. JSP在运行时编译,但Fortify仅扫描源.您应该注意到,应该有未来的任务/故事提交给JSTL重构Scriptlet – 您将在以后感谢我.那么你可以使用esapi taglibs来处理这些用例. Fortify可以很好地扫描纯Java代码,而taglibs可以帮助你.

> ESAPI.encoder().encodeForHTML(userId)只会在有问题的变量放在标签之间的用例中保护您免受XSS的影响,例如< span>< ; /跨度>这不是你的情况.

> ESAPI.encoder().encodeForHTMLAttribute(userId)就是您在特定的狭义用例中所需要的.这是因为转义规则在Html属性中与在标记中放置的数据不同.这应该可以解决你的问题.

>如果该值将由JavaScript独占使用,那么您需要ESAPI.encoder().encodeForJavaScript(userId)

>如果该值将是可渲染的,则HTML将被发送到将呈现您的标记的javascript函数,例如element.innerHTML =“< HTML>标签和标记“;你想

这只是一些例子,here are a few more – 但我的答案的首要任务是:您需要知道应用程序中每个变量的完整数据流,并始终编码适当的输出上下文.在安全领域,“上下文”意味着“数据正在传递给新的代码解释器”.如果你很好地实现这种理解,你将不再需要Fortify! 🙂

====增加了复杂性====

在您的评论中,您注意到该值后来被JavaScript使用.因此,在这种情况下,正确的解决方案可能是分叉两个不同的变量,每个变量都设置为正确的编码.对于HTML属性案例:

String escapedHtmlUserId = ESAPI.encoder().encodeForHTMLAttribute(userId);

对于Javascript案例:

String escapedJSUserId = ESAPI.encoder().encodeForJavaScript(userId);

然后适当地使用这些值.如果您使用了JSTL / taglib,则可以在正确的位置使用正确的esapi taglib,而不是分成两个单独的scriptlet变量.

===还有一件事===

来自对OP的评论:

我们有一个初始的scriptlet声明:

…%GT;

它稍后在javascript函数中使用:

只是要指出,如上所述,userId变量在初始化时不再是原始文本.实际上,javascript的编码变为:

...%>

如果javascript将使用* .innerHTML()或* .outerHTML()呈现HTML,这很好.否则,请注意输入已从原始状态更改.

==========更多添加代码,更多问题========

所以我们已经跟踪了我们所有的数据路径,我们已经仔细检查过我们的JSP没有被包含在一个不同的JSP中,这个JSP为我们引入了新的上下文来防范,这是我闻到的“误报,“但如果我是你,我会联系惠普支持并提出这个问题,以防误报.除非我能够访问完整的源代码,否则我不太了解您的应用程序的具体内容对您真正有用.因为你正在处理scriptlet – 可能Fortify无法跟踪从变量实例化到最终输出的完整数据路径,所以它很快就会失败,所以它至少可以警告你到目前为止发现了什么.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值