[英]htmlentities, htmlspecialchars and ajax issue
尝试将htmlentities / htmlspecialchars与ajax调用一起使用,当远程输出呈现回原始脚本时,它不会转换为html标记。
我已经搜遍了一个解决方案,但找不到一个,所以我在这里。
一切都很好,没有应用htmlentities,但我扫描了XSS,并提出了潜在的问题。
这是远程php文件中代码的相关部分:
<select class = "hook1" id = "<?php echo $version ; ?>" name="vdiesel" >
<option>Version essence</option>
<?php
while ($r= $stmt->fetch(PDO::FETCH_ASSOC)) {
$out="<option value='".$r['version_id'].'|'.$r['vid_diesel']."'>".$r['version']."</option>";
//echo $out;
echo htmlentities($out, ENT_QUOTES, 'UTF-8');
}
echo "</select>";
和相关的? ajax调用的一部分:
$.ajax({
type: "POST",
dataType:"html",
url: url,
beforeSend: function () {
$("#"+ selbot).html("<option>Loading ...</option>");
},
data: {passval:pass_id, pass2:selbot},
success: function(data){
$("#"+ selbot).html(data);
}
});
这是Firebug控制台响应的一个示例:
<select class = "hook1" id = "version9" name="vdiesel" >
<option>Version essence</option>
<option value='685|686'>Pop Star Essence</option>
</select>
</body>
</html>
正确地将上面的内容打印到html上,除了用htmlentities消毒的行,它打印出来如下,显然是正确的但没有识别html标签:
<option value='685/686'>Pop Star Essence</option>
我当然错过了一些基本的东西,希望你能告诉我。 谢谢
你编码太多了。
您应该只编码从数据库中获取的值,以便它们不会破坏html(并且不会造成XSS风险...):
$out="<option value='".htmlentities($r['version_id'], ENT_QUOTES, 'UTF-8')
.'|'.htmlentities($r['vid_diesel'], ENT_QUOTES, 'UTF-8')."'>"
.htmlentities($r['version'], ENT_QUOTES, 'UTF-8')."</option>";
你在错误的地方使用htmlentities()
。 它应仅用于应按字面显示的数据部分,而不是HTML容器。
while ($r= $stmt->fetch(PDO::FETCH_ASSOC)) {
$out="<option value='" . htmlentities($r['version_id'], ENT_QUOTES, 'UTF-8') . '|' . htmlentities($r['vid_diesel'], ENT_QUOTES, 'UTF-8') . "'>". htmlentities($r['version'], ENT_QUOTES, 'UTF-8') . "</option>";
echo $out;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.