【问题标题】:Avoiding XSS when echoing POSTed HTML回显 POSTed HTML 时避免 XSS
【发布时间】:2011-09-07 22:01:25
【问题描述】:

我有一个需要执行以下操作的网页:

  • 使用 JavaScript 动态创建 HTML 片段
  • 打开一个新窗口
  • 在新窗口中显示 HTML

我的第一种方法是使用 document.write 将 HTML 复制到窗口中。这在大多数情况下都有效,但是当原始窗口设置为document.domain 时,它会导致 Internet Explorer 出现问题。加上document.write 这些天往往不受欢迎。

所以我的第二种方法是将 HTML 放入隐藏表单中,将表单的目标设置为新窗口,然后发布表单。这意味着我需要服务器上的脚本通过回显 POST 的内容来响应表单。

但这很危险,因为有人可能会提出在内容中包含<script> 标签的请求。 如何避免潜在的 XSS 风险?我想我可以过滤掉像<script> 这样的东西,虽然这看起来很笨拙。如果我在服务器上创建 HTML,我可以对其进行加密,或者添加一些只能在服务器上验证的令牌。但我是在客户端上创建的。

编辑:感谢到目前为止的过滤建议。我可能会选择走这条路,但我想知道:如果我不希望对我创建的 HTML 有任何限制怎么办?有什么方法可以验证文档是由我的页面创建的吗?

【问题讨论】:

    标签: javascript html xss


    【解决方案1】:

    试试HTML Purifier

    编辑:

    “有什么方法可以验证文档是由我的页面创建的吗?”
    除非您创建另一个 html 服务器端副本并进行比较。用户可以查看脚本中的任何内容,尽管您可能会使非技术用户难以查看。客户端 Javascript 可以做的任何事情,恶意用户都可以在 Javascript 控制台上做。

    即使您以某种方式验证了请求来自您的脚本,恶意用户也可以使用 Javascript 控制台通过插入产生危险请求的代码行来修改您的脚本。所有 GET 和 POST 数据都必须被视为恶意数据。

    【讨论】:

      【解决方案2】:

      试试PHPIDS

      PHPIDS(PHP 入侵检测系统)是一个简单易用、结构良好、快速且先进的安全层,适用于基于 PHP 的 Web 应用程序。 IDS 既不会剥离、清理或过滤任何恶意输入,它只会识别攻击者何时试图破坏您的网站并以您想要的方式做出反应。基于一组经过批准且经过严格测试的过滤规则,任何攻击都会被赋予一个数字影响等级,这使得决定在黑客攻击之后应该采取什么样的行动变得容易。这包括从简单的日志记录到向开发团队发送紧急邮件、向攻击者显示警告消息甚至结束用户会话。

      【讨论】:

        猜你喜欢
        • 2013-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-24
        • 1970-01-01
        • 2022-11-23
        • 1970-01-01
        相关资源
        最近更新 更多