我正在创建一个显示数据库记录的表。有人存储了:
<script>alert('hello');</script>
在数据库中。因此,当它构造表时,它会过早地关闭脚本。
我做了一个临时解决方案,取而代之的是没有任何服务器端,但那将是......后面的痛苦至少可以说。如何让JavaScript将字符串视为字符串,并忽略结束标记?
data[i] = new Array("INCIDENT NUMBER",
"ARREST",
"<script>alert('hello')</script>",
"DSO",
"USER",
"11-020906",
"10-100",
"02/09/2011",
"",
"",
"",
"",
"");
使用JSP服务器端。
所以我把它归结为服务器端分辨率。没有办法让浏览器忽略字符串中的标记。
答案 0 :(得分:0)
这称为跨站点脚本(XSS)攻击,用户尝试将可执行代码注入您的网站。有很多方法可以解决这个问题,所以最好自己做一些研究。处理此问题的一种方法是在注入信息之前在客户端使用jQuery的.text()
方法。
答案 1 :(得分:0)
您需要将<
更改为<
,将>
更改为>
,或者只需将</script>
替换为<
&#39;用&#39;&#39;。
我想指出,您的网站似乎可能会受到注射攻击的影响;清理进出数据库的数据以确保他们不会传递代码是明智的 - 将>
和<
替换为>
和{{1}这是一个开始,但它可能需要比这个简单的黑客更多的努力来获得你想要的东西。
您没有提及您使用哪种语言来实际检索数据 - 请告诉我们,我们会知道是否可以帮助您。
答案 2 :(得分:0)
验证并清理用户输入!
在这种情况下,您可以检测任何特殊字符并将其转换为HTML符号(http://www.w3schools.com/html/html_symbols.asp)。因此,在将任何内容存储到数据库之前,您应该再添加一步。
当然还有很多额外的案例需要考虑,这就是为什么寻找一些开源解决方案比推出自己的解决方案更好的原因。
答案 3 :(得分:0)
使用此功能:
function sanitizeText(text) {
var sval=text.replace(/&/g, '&');
sval = sval.replace(/</g, "<");
sval = sval.replace(/>/g, ">");
return sval;
}
像这样:
data[i] = new Array("INCIDENT NUMBER",
"ARREST",
sanitizeText("<script>alert('hello')</script>"),
"DSO",
"USER",
"11-020906",
"10-100",
"02/09/2011",
"",
"",
"",
"",
"");
或者您在哪里展示并从用户那里获得价值。