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

问题描述 投票:3回答:3

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

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

然后,当我加载该页面时会出现警报。

反正有防止这种情况发生吗?

javascript jquery html xss
3个回答
2
投票

有几种解决方法,但是由于您没有提到正在使用的后端技术,因此很难给出大致的答案。

此外,您是否要允许或拒绝在框中输入regular HTML的功能也没有提及。

方法1:

对输入的内容进行消毒。当服务器接受某些内容时,查找脚本标记并将其删除。

实际上这很难实现,可能比预期的要大。

方法2:

在返回服务器的途中转义数据。在PHP中,有一个名为htmlentities会将所有HTML转换成按原样键入的内容进行渲染。

htmlentities将会出现在您的页面上。

方法3

白名单

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

这很难正确地解决,您最好使用经过充分测试的库包。


1
投票

您应该将用户输入视为纯文本而不是HTML。通过正确转义HTML实体,您可以呈现看起来像有效的HTML文本,而无需浏览器尝试执行它。通常,对于您的客户端代码以及任何由用户提供的值传递给您的后端,这都是一个好习惯。由此产生的问题广泛地称为脚本注入或跨站点脚本。

实际上在客户端,这很容易,因为您使用的是jQuery。根据用户输入更新DOM时,请使用<script>alert("hello")</script>方法代替text方法。您可以在[text]中看到区别的简单示例。


0
投票

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

示例

无所不包

© www.soinside.com 2019 - 2024. All rights reserved.