这里有一点菜鸟问题......
我在表行列表中有一个javascript函数
<tr onclick="ClosePopup('{ScenarioID}', '{Name}');" />
但是,{Name}值有时可以包含字符"'"
(单引号)。目前出现错误预期:')',因为它有效地提前结束了javascript函数并破坏了语法。
禁止{Name}值中的单引号影响javascript的最佳方法是什么?
干杯!
答案 0 :(得分:6)
你犯下了不安全的网页模板编程的第一个致命罪 - 没有逃避被渲染到模板中的值的内容。我几乎可以向您保证,如果采用这种方法,您的Web应用程序将容易受到XSS(跨站点脚本)的攻击,并且任何第三方都可以在您的页面中运行自定义JavaScript,窃取用户数据并按照自己的意愿进行破坏。
检查出来。 http://en.wikipedia.org/wiki/Cross-site_scripting
解决方案是逃避内容。并且在javascript中正确地执行此操作,这也是在html内部,不仅仅是将转义序列放在反斜杠前面。
任何体面的模板引擎都应该为你提供一种在内容写入模板时逃避内容的方法。您的数据库值可以保留原样,重要的部分是在输出时转义它。如果您的模板引擎或动态Web应用程序框架不允许这样做,请更改为。 :)
答案 1 :(得分:1)
为支持先前的评论,请阅读以下内容,以便更好地了解安全建议如此重要的原因。
答案 2 :(得分:0)
我认为你可以删除任何代码注入,例如,替换
"Hello"
与
String.fromCharCode(72,101,108,108,111)
答案 3 :(得分:0)
尽管每个人提供的安全信息都非常有价值,但在这种情况下我并不那么重要,因为在这种情况下,所有内容都是客户端,在获取数据和呈现XML时会应用安全措施。该页面也受到Windows身份验证(仅限管理员部分)的保护,并且无法更改Web应用程序框架。我一直在寻找的答案真的很简单。
<tr onclick='ClosePopup("{ScenarioID}", "{Name}");' />