Javascript 治疗</脚本>;一串

Javascript 治疗</脚本>;一串,javascript,html,Javascript,Html,我正在创建一个表来显示数据库记录。某人存储: <script>alert('hello');</script> alert('hello'); 在数据库中。因此,当它构造表时,它过早地关闭了脚本 我做了一个临时修复,没有更换任何服务器端,但这将是…一个痛苦的背后说,至少。如何使JavaScript将字符串视为字符串,并忽略结束标记 data[i] = new Array("INCIDENT NUMBER",

我正在创建一个表来显示数据库记录。某人存储:

<script>alert('hello');</script>
alert('hello');
在数据库中。因此,当它构造表时,它过早地关闭了脚本

我做了一个临时修复,没有更换任何服务器端,但这将是…一个痛苦的背后说,至少。如何使JavaScript将字符串视为字符串,并忽略结束标记

data[i] = new Array("INCIDENT NUMBER",
                                "ARREST",
                                "<script>alert('hello')</script>",
                                "DSO",
                                "USER",
                                "11-020906",
                                "10-100",
                                "02/09/2011",
                                "",
                                "",
                                "",
                                "",
                                "");
data[i]=新数组(“事件编号”,
“逮捕”,
“警报(‘你好’)”,
“DSO”,
“用户”,
"11-020906",
"10-100",
"02/09/2011",
"",
"",
"",
"",
"");
使用JSP服务器端


因此,我将其归结为服务器端解决方案。无法让浏览器忽略字符串中的标记。

这称为跨站点脚本(XSS)攻击,用户试图将可执行代码注入网站。处理这个问题有很多方法,所以最好是你自己做一些研究。处理此问题的一种方法是在注入信息之前在客户端使用jQuery的
.text()
方法。

您需要将
改为
>
,或者将“
”替换为“”

我想指出的是,您的站点似乎不易受到注入攻击;明智的做法是对进出数据库的数据进行清理,以确保它们不会传递代码-将
替换为
是一个开始,但可能需要比这一简单的破解更大的努力才能得到您想要的


您没有提到实际检索数据时使用的语言-请告诉我们,我会看看是否可以进一步帮助您。

验证和清理用户输入

在这种情况下,您可以检测任何特殊字符并将其转换为HTML符号()。因此,在将任何内容存储到数据库之前,您应该再添加一个步骤

  • 提取用户输入,将其发送到服务器
  • 让服务器执行一些验证和清理。在本例中,请将“”字符转换为HTML符号
  • 将新清理的文本存储在数据库中
  • 当然,还有很多其他的案例需要考虑,这就是为什么寻找一些开源解决方案比推出自己的解决方案更好。

    < P>使用这个函数:

    function sanitizeText(text) {
        var sval=text.replace(/&/g, '&amp;');
        sval = sval.replace(/</g, "&lt;");
        sval = sval.replace(/>/g, "&gt;");
        return sval;
    }
    
    函数sanitizeText(文本){
    var sval=text.replace(/&/g,&;');
    sval=sval.replace(//g,“”);
    返回sval;
    }
    
    像这样:

    data[i] = new Array("INCIDENT NUMBER",
                                    "ARREST",
                                    sanitizeText("<script>alert('hello')</script>"),
                                    "DSO",
                                    "USER",
                                    "11-020906",
                                    "10-100",
                                    "02/09/2011",
                                    "",
                                    "",
                                    "",
                                    "",
                                    "");
    
    data[i]=新数组(“事件编号”,
    “逮捕”,
    sanitizeText(“警报('hello')”),
    “DSO”,
    “用户”,
    "11-020906",
    "10-100",
    "02/09/2011",
    "",
    "",
    "",
    "",
    "");
    

    无论您在何处显示和接收用户的值。

    您需要研究HTML编码和其他XSS漏洞尝试这并没有解决问题。您的代码中没有显示如何将数据放回页面,但我猜您使用的是
    innerHTML
    ,或者jQuery
    HTML()
    。不要那样做。使用textContent或jQuery的
    text()
    ,它将元素的内容设置为以文本形式传入的数据,因此类似于
    的部分在完成构建数组之前关闭脚本部分。服务器端代码会为它找到的每一条记录插入此代码。然后它转到一个函数,该函数将2d数组转换为一个表。这取决于您的服务器端技术。你应该用谷歌清理用户输入和服务器输出,比如PHP中的
    htmlspecialchars
    。text()到什么?这是一段巨大的javascript代码,服务器端注入DB结果会中断get。请使用.text()处理用户输入的所有内容。