防止用户输入的脚本在网页中运行

时间:2014-08-20 05:08:31

标签: javascript jquery html xss

在我的应用程序中,有一个评论框。如果有人输入了

之类的评论
  

<script>alert("hello")</script>

然后在我加载该页面时出现警告。

有没有阻止这个?

4 个答案:

答案 0 :(得分:2)

有几种方法可以解决这个问题,但由于您没有提到您正在使用哪种后端技术,因此除了粗略的答案外,很难提供任何其他技术。

此外,您尚未提及是否要允许或拒绝在框中输入常规 HTML的功能。

方法1:

在途中清理输入。当您在服务器上接受某些内容时,请查找脚本标记并将其删除。

这实际上要难得多,可能会有所期待。

方法2:

在返回服务器的途中逃离数据。在PHP中有一个名为的函数 htmlentities这将把所有HTML转换成字面上输入的内容。

<script>alert("hello")</script>字样会显示在您的页面上。

方法3

白名单

这远远超出了单个帖子的答案,并且确实需要了解您的后端系统,但是可以允许某些 HTML字符禁止其他人。

这很难做到正确,你最好使用经过严格测试的库包。

答案 1 :(得分:1)

您应该将用户输入视为纯文本而不是HTML。通过正确转义HTML实体,您可以在不让浏览器尝试执行它的情况下呈现看似有效的HTML文本。对于您的客户端代码以及传递给后端的任何用户提供的值,这通常是一种很好的做法。由此产生的问题通常被称为脚本注入或跨站点脚本。

实际上在客户端,这非常简单,因为您使用的是jQuery。根据用户输入更新DOM时,请使用text方法代替html方法。您可以在此jsFiddle中看到一个简单的差异示例。

答案 2 :(得分:1)

最好的方法是用其他字符串替换<script>。例如在C#中使用:

str.replace("<script>","O_o");

其他选项有很多缺点。

1.Block javascript:这也会导致某些验证被禁用。这些验证是在前端完成的。从数据库中检索后,它又可以正常工作。我的意思是攻击者可以将脚本作为输入形式注入并保存在数据库中在您从另一个页面中的数据库返回记录后,它将呈现为脚本!!!

2。渲染为文本。在某些技术中,它需要本身具有风险的第三方程序包。也许这些程序包具有后门功能!

答案 3 :(得分:-1)

将值转换为字符串,在我的情况下解决了

示例

任何东西