代码之家  ›  专栏  ›  技术社区  ›  Scott

javascript中的嵌套引号

  •  1
  • Scott  · 技术社区  · 15 年前

    这里有一个小小的问题…

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

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

    但是,名称值有时可以包含字符 "'" (单引号)。目前的错误 应输入:“)” 结果是,它有效地提前结束了javascript函数并破坏了语法。

    禁止name value中的单引号影响javascript的最佳方法是什么?

    干杯!

    4 回复  |  直到 15 年前
        1
  •  6
  •   Josh    15 年前

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

    过来看。 http://en.wikipedia.org/wiki/Cross-site_scripting

    解决方案是转义内容。在HTML内部的javascript中,要正确地完成这一点,不仅仅是将转义序列放在反斜杠前面。

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

        2
  •  1
  •   austin cheney    15 年前

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

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

        3
  •  0
  •   Robert L    15 年前

    我认为,您可以通过替换

    "Hello"
    

    具有

    String.fromCharCode(72,101,108,108,111)
    
        4
  •  0
  •   Scott    15 年前

    尽管每个人提供的安全信息都很有价值,但在这种情况下,它与我没有太大关系,因为在这个实例中,所有的东西都是客户端的,在获取数据和呈现XML时,都会应用安全措施。该页还通过Windows身份验证(仅限管理部分)进行保护,并且无法更改Web应用框架。我要找的答案最终非常简单。

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