如何防止在使用.val()时引入XSS漏洞?

时间:2015-04-09 00:03:14

标签: javascript jquery html xss

我将未经过处理的用户输入存储在我的数据库中,然后在输出时将其转义。

如果我将"><svg/onload=alert(3)>输入到输入中并将其保存在数据库中,然后加载一个转义数据的页面,将其放回输入中,页面源显示:

... value="&quot;&gt;&lt;svg/onload=alert(3)&gt;" ...

如你所见,它已经逃脱了。

但是,如果我然后运行此代码:

$(".somediv").html($("#myinput").val());

然后将以下内容放入元素中:

""><svg/onload=alert(3)>"

弹出警告框。

JSFIDDLE

我在这里做错了什么?我认为我输出的数据是我需要做的,但显然当用jQuery操纵DOM时,这是不正确的。

1 个答案:

答案 0 :(得分:4)

如果要设置文字,请使用.text()。属性值中的实体已被解释,""><svg/onload=alert(3)>" 属性的值。

$(".somediv").text($("#myinput").val());

&#13;
&#13;
$('#destination').text($('#source').attr('title'));
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="source" title="&amp;&quot;&lt;">Hover over me!</div>

<div id="destination"></div>
&#13;
&#13;
&#13;