【问题标题】:nested quotes in javascriptjavascript中的嵌套引号
【发布时间】:2010-11-30 06:34:06
【问题描述】:

这里有点菜鸟问题...

我在表格行列表上有一个 javascript 函数

<tr onclick="ClosePopup('{ScenarioID}', '{Name}');" />

但是,{Name} 值有时可以包含字符 "'"(单引号)。目前,错误 Expected: ')' 出现,因为它有效地提前结束了 javascript 函数并破坏了语法。

禁止 {Name} 值中的单引号影响 javascript 的最佳方法是什么?

干杯!

【问题讨论】:

    标签: javascript quotes


    【解决方案1】:

    您犯了不安全的 Web 模板编程的第一个致命罪行 - 没有逃避正在呈现到模板中的值的内容。我几乎可以向您保证,如果您采用这种方法,您的 Web 应用程序将容易受到 XSS(跨站点脚本)的攻击,并且任何第三方都将能够在您的页面中运行自定义 javascript,窃取用户数据并按照他们的意愿造成严重破坏。

    检查一下。 http://en.wikipedia.org/wiki/Cross-site_scripting

    解决方案是转义内容。要在同样位于 html 中的 javascript 中正确执行此操作,不仅仅是将转义序列放在反斜杠前面。

    任何体面的模板引擎都应该为您提供一种在将内容写入模板时转义内容的方法。您的数据库值可以保持原样,重要的部分是在输出时转义它。如果您的模板引擎或动态 Web 应用程序框架不允许这样做,请更改为允许的。 :)

    【讨论】:

    • 您忘记解释如何使用反斜杠和可能的替换方法来转义数据。不过还是 +1。
    • 公平调用,但是获取的值是使用 XSLT 从呈现的 XML(从安全数据库调用生成)中完成的。考虑到我只是“获取”数据,这真的是大罪吗?我会假设这仅在保存数据期间才真正适用
    【解决方案2】:

    为支持先前的评论,请阅读以下内容以更好地了解安全建议为何如此重要。

    http://eval.symantec.com/mktginfo/enterprise/white_papers/b-whitepaper_web_based_attacks_03-2009.en-us.pdf

    【讨论】:

      【解决方案3】:

      我认为你可以杀死几乎任何代码注入,例如,替换

      "Hello"
      

      String.fromCharCode(72,101,108,108,111)
      

      【讨论】:

        【解决方案4】:

        虽然每个人提供的安全信息都非常有价值,但在这种情况下它与我无关,因为这种情况下的一切都是客户端,在获取数据和呈现 XML 时应用了安全措施。该页面还通过 Windows 身份验证(仅限管理部分)进行保护,并且无法更改 Web 应用程序框架。最后我要找的答案真的很简单。

        <tr onclick='ClosePopup("{ScenarioID}", "{Name}");' />
        

        【讨论】:

        • @Scozard:如果数据包含"会怎样?
        • 现有数据不包含 " 并且输入数据的正则表达式验证已更新,因此仅接受字母数字值。
        • 但是是的,这需要更新为更可靠的方式。这不是理想的解决方案。
        猜你喜欢
        • 2011-03-03
        • 1970-01-01
        • 2012-04-08
        • 2018-05-07
        • 1970-01-01
        • 1970-01-01
        • 2011-10-04
        • 1970-01-01
        • 2023-03-23
        相关资源
        最近更新 更多