【问题标题】:Best Practice For XSS Attacks in Rest Api [closed]Rest Api 中 XSS 攻击的最佳实践 [关闭]
【发布时间】:2021-01-30 01:11:45
【问题描述】:

我已经阅读了很多关于它的内容,但无法真正决定哪种方式是最好的。 我有一个为客户服务的 web 应用程序和一个 java rest 应用程序。 使用rest api和frontend中的参数防止xss攻击的最佳方法是什么?

  • 在服务器端和客户端验证每个参数
  • 过滤和控制请求参数
  • 在将每个数据放入标签之间之前进行客户端控制 等等... 感谢您的宝贵时间。

【问题讨论】:

    标签: java rest spring-security xss code-injection


    【解决方案1】:

    与任何深度防御一样重要,因此验证和编码应该对任何用户提供的输入进行。编码非常重要,因为可能被认为是恶意的内容是上下文相关的。例如,安全的 HTML 可能是 SQL Injection attack。

    可以保存 REST API 中的参数,这意味着它们会从后续请求中返回,或者结果可能会在请求中反映给用户。这意味着您可以同时获得reflected and stored XSS attacks。您还需要小心DOM Based XSS attacks。解决存储、反射和 DOM XSS 之间重叠问题的更现代的分类是 Server XSS and Client XSS。

    OWASP 有一个很棒的Cross Site Scripting Prevention Cheat Sheet,详细说明了如何防止跨站点脚本。我发现XSS Prevention Rules Summary 和Output Encoding Rules Summary 部分非常方便。

    最大的收获是浏览器会根据上下文以不同的方式解析数据,因此不要只使用HTML Entity Encode the data everywhere,这一点非常重要。这意味着做两件事很重要:

    • Rule #0 - 仅在允许的位置插入不受信任的(用户提供的)数据。仅将数据插入 HTML 文档到规则 #1-5 定义的“槽”中。

    • 当您将数据插入其中一个受信任的插槽时,请遵循该特定插槽的编码规则。规则在之前链接的Cross Site Scripting Prevention Cheat Sheet 中有详细说明。

    还有一个DOM based XSS Prevention cheat sheet。与服务器端 XSS 备忘单一样,它提供了一组规则来防止基于 DOM 的 XSS。

    【讨论】:

      【解决方案2】:

      当涉及到 XSS 时,唯一可能的选择是验证用户输入,任何类型的用户输入,无论是从浏览器传递还是以任何其他方式(例如从终端客户端传递)。

      这取决于您所遵循的场景。 如果它只是没有 HTML 内容的数据,那么您无需担心 XSS。 否则,只需删除 ,> 符号或将它们转换为字符编码字符串就足够了。 您也可以避免使用 innerHTML 将新内容附加到文档中,而使用 innerText 代替,即使有 XSS 内容也不会执行。

      但是当 api 响应返回 HTML 内容以及您需要在某处显示的内容时,它会变得有点复杂。在这种情况下,避免在 HTML sn-p 中直接显示用户输入 - 尝试字符编码或删除 、> 符号,这样就可以了

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-13
        • 2010-09-11
        • 2020-12-24
        • 2013-10-23
        • 2019-10-21
        • 1970-01-01
        • 2010-11-08
        相关资源
        最近更新 更多