我将未经过处理的用户输入存储在我的数据库中,然后在输出时将其转义。
如果我将"><svg/onload=alert(3)>
输入到输入中并将其保存在数据库中,然后加载一个转义数据的页面,将其放回输入中,页面源显示:
... value=""><svg/onload=alert(3)>" ...
如你所见,它已经逃脱了。
但是,如果我然后运行此代码:
$(".somediv").html($("#myinput").val());
然后将以下内容放入元素中:
""><svg/onload=alert(3)>"
弹出警告框。
我在这里做错了什么?我认为我输出的数据是我需要做的,但显然当用jQuery操纵DOM时,这是不正确的。
答案 0 :(得分:4)
如果要设置文字,请使用.text()
。属性值中的实体已被解释,""><svg/onload=alert(3)>"
属性的值。
$(".somediv").text($("#myinput").val());
$('#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="&"<">Hover over me!</div>
<div id="destination"></div>
&#13;