【问题标题】:Best way to block XSS injection having decode and getParameter使用 decode 和 getParameter 阻止 XSS 注入的最佳方法
【发布时间】:2022-01-10 10:53:46
【问题描述】:

我的 Liferay 应用中有很多这种类型的旧代码:

String code = request.getParameter("code");

似乎在 Liferay 中有一个“HtmlUtil.escape”函数,所以我假设我可以像这样使用它:

String code = HtmlUtil.escapeAttribute(request.getParameter("code"));

这是最安全的方法吗?

我还有另一个简单的java项目:

public void buildParams(String[] items, HttpServletRequest request) throws Exception {

    typeRequest = URLDecoder.decode(request.getParameter(ReportUtil.PARAMETER_REQUEST_TYPE));
    countEx = URLDecoder.decode(request.getParameter(ReportUtil.PARAMETER_COUNT));

    Map<String, String> parametres = ReportGenerator.decodeMap(request.getParameter("parameters"), String.class);
    ...

这里没有Liferay“HtmlUtil.escape”功能阻止注入的经典方法是什么?

【问题讨论】:

    标签: java security xss decode getparameter


    【解决方案1】:

    HtmlUtil.escape 允许您转义某些文本,以便在 HTML 上下文中安全使用。

    作为替代品,您可以使用 Apache commons-textStringEscapeUtils 类提供的不同方法,尤其是 escapeXml** 类。

    无论如何,请考虑阅读 OWASP 创建的关于跨站点脚本预防的documentation

    它提供了有关该术语所涉及的不同相关类型的攻击的深刻见解,以及您可以如何预防或减轻每个攻击。

    文档提供了对几个相关库的引用,例如 OWASP Java Encoder projectOWASP Java Html Sanitizer

    第一个项目为您提供some examples,用于在不同场景中处理不受信任的内容。

    第二个允许您基于用户定义的策略进行更结构化的 HTML 处理。请考虑查看 Github 存储库中提供的不同 examples

    如果您需要一个完整的预防框架,您可以在您的应用程序中使用为 ESAPI 项目提供的工件,同样来自 OWASP。

    在服务器端代码中使用 HtmtUtil 之类的类转义接收到的信息没有任何问题,但是,正如您在提供的不同示例中所见,为了防止与 XSS 相关的攻击,通常执行当输出 HTML 代码片段时,当您向您的客户提供信息时时进行某种编码/转义:重要的是要防止有人可能,例如,引入一个终端 &lt;/textarea&gt; 标签,该标签终止 textarea,然后是带有一些恶意代码的 &lt;script&gt;...&lt;/script&gt; 块:

    </textarea><script>alert('hello')</script>
    

    当您想要防止其他类型的代码注入时,您所描述的服务器端处理类型更常用。请考虑从 OWASP 网站再次阅读this other documentation,我认为它可能有用。

    【讨论】:

    • @user2178964 您是否能够查看任何建议的解决方案?我用一些示例参考和说明更新了答案。我希望他们有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 2021-01-04
    • 2017-10-10
    • 1970-01-01
    • 2013-05-20
    相关资源
    最近更新 更多