1

这里有点菜鸟问题...

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

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

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

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

干杯!

4

4 回答 4

6

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

看看这个。http://en.wikipedia.org/wiki/Cross-site_scripting

解决方案是转义内容。并且在同样位于 html 中的 javascript 中正确地做到这一点不仅仅是将转义序列放在反斜杠前面。

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

于 2009-09-22T01:54:29.923 回答
1

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

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

于 2009-09-22T02:13:16.970 回答
0

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

"Hello"

String.fromCharCode(72,101,108,108,111)
于 2009-09-22T02:14:03.523 回答
0

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

<tr onclick='ClosePopup("{ScenarioID}", "{Name}");' />
于 2009-09-22T03:31:44.300 回答