好的,我有一个创建新记录的表格。该表单包含几个文本字段。在将它们放入数据库之前,我通过 htmlentities($field, ENT_QUOTES) 运行这些字段。那太棒了。我不可能容易受到 XSS 的攻击,因为没有人有希望突破我的领域。
例如:
Assume the user entered 'Lol <script></script>'
<div>
<div>Description</div>
<div>Lol <script></script%gt</div>
</div>
这很好。文本显示非常适合用户。出现以下问题
Assume the user entered "John O'Conner"
<div>
<div>Name</div>
<div><input name="name" value="John O&#u0039;Conner"</div>
</div>
这不是很好,因为字段字面上显示为“John O&#u0039;Conner”。如果我允许引用,那么人们可以突破我的输入字段并注入 XSS。
如果可以避免的话,我真的不想将某些事情列入白名单。
就像在 SO 上一样。当我编辑帖子时,引号和任何随机文本仍在框中,但 SO 不受 XSS 的影响。
这些字段由 AJAX 请求填充,该请求返回所有字段的 JSON 数据。
编辑:
BOSS,你没抓住重点。我想要输入字段。我只希望 VALUES 正确显示。
<input id="name" name="name" value="" />
.
.
.
<script>
//AJAX request to fill fields here
</script>
如果用户输入“cat”,输入字段变为:
<input id="name" name="name" value="cat" />
并且在框中显示“猫”字样。
如果用户输入 John O'Conner,则输入字段变为:
<input id="name" name="name" value="John O&#u0039;Conner" />
并且框中显示“John O'Conner”一词(不好)。
如果我允许用户可以在 'John" onmouseover="alert(3);" data-dummy="Conner' 中输入引号,则输入字段将变为:
<input id="name" name="name" value="John" onmouseover="alert(3);" data-dummy="Conner" />
编辑:我最终做了:
var dummy = $("<div></div>");
//Itterate through the JSON object
$.each(returned_data, function(key,val) {
dummy.html(val)
$("#"+key).val(dummy.html());
});