gpt4 book ai didi

java - 从请求中过滤掉编码的 javascript 内容

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:15:30 25 4
gpt4 key购买 nike

我在尝试清理请求内容以去除输入参数中包含的 HTML 和 javascript 时遇到问题。

这基本上是为了防止 XSS 攻击,理想的机制是验证输入并对输出进行编码,但由于某些限制,我无法在输出端工作。

此时我所能做的就是尝试通过过滤器来清理输入。我正在使用 ESAPI 规范化输入参数,并使用具有最严格的 Whitelist.none() 选项的 jsoup 来去除所有 HTML。

只要恶意 javascript 位于某些 HTML 标记内,此方法就有效,但对于带有 javascript 代码但周围没有任何 HTML 的 URL 则失败,例如:

http://example.com/index.html?a=40&b=10&c='-prompt``-' 

最终会在页面上显示一个警报。这就是我现在正在做的事情:

param = encoder.canonicalize(param, false, false);
param = Jsoup.clean(param, Whitelist.none());

那么问题是:

  • 有什么方法可以确保我的输入在过滤器中去除所有 HTML 和 javascript 代码?
  • 我是否应该加入一些正则表达式验证,但是否有任何正则表达式可以处理通过我现在检查的案例?

最佳答案

免责声明:

如果您的面向 Internet 的解决方案不允许输出转义,那么您将处于双赢场景。这就像 Windows 上的防病毒软件:您将能够检测到特定已知 攻击,但您将无法检测或防御未知攻击。如果你的雇主坚持走这条路,你的尽职调查就是让管理层了解这一事实,并让他们以书面形式接受风险。每次我遇到管理层有了这个,他们选择了正确的解决方案——输出转义。

============================================= =================

首先... watch out when using JSoup in any kind of a cleaning/filtering/input validation situation.

收到无效的 HTML,例如

<script>alert(1);

Jsoup 将添加缺少的 </script>标签。

这意味着如果您使用 Jsoup 来“清理”HTML,它会在开始处理之前首先将无效的 HTML 转换为有效的 HTML。

So the question is: Is there some way through which I can make sure that my input is stripped of all HTML and javascript code at the filter? Should I throw in some regex validations but is there any regex that will take care of the cases that are getting past the check I have right now?

没有。 ESAPI 和 ESAPI 的输入验证不适合您的用例,因为 HTML is not a regular language ESAPI 的验证输入是正则表达式。事实上,你不能按照你的要求去做:

Is there some way through which I can make sure that my input is stripped of all HTML and javascript code at the filter?

并且仍然有一个需要用户定义的 HTML/JavaScript 的正常运行的 Web 应用程序。

您可以根据自己的喜好稍微堆叠一下:我会选择像 OWASP's HTML Sanitizer. 这样的东西并针对列出的 XSS 输入测试您的实现 here .

其中许多输入都来自 OWASP 的 XSS 过滤器规避备忘单,并且至少会针对已知 尝试来测试您的应用程序。但是如果没有输出转义,你永远不会安全。

===================根据评论更新==================

所以用例是尝试阻止所有 html 和javascript。我的建议是实现 caja因为它封装了 HTML、CSS 和 Javascript。

虽然 Javascript 也很难从输入验证中进行管理,因为与 HTML 一样,JavaScript 是一种非常规语言。此外,每个浏览器都有自己的实现,以不同的方式偏离 ECMAScript 规范。如果你想保护你的输入不被解释,这意味着你最好为每个试图解释用户输入的浏览器系列都有一个解析器来阻止它。

当您真正需要做的就是确保对输出进行转义时。抱歉打败了马,但我必须强调输出转义比拒绝用户输入重要 100 倍。您两者都想要,但如果被迫选择其中之一,则输出转义总体上工作较少。

关于java - 从请求中过滤掉编码的 javascript 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36287212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com