繁体   English   中英

htmlentities,htmlspecialchars和ajax问题

[英]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>
&lt;option value=&#039;685|686&#039;&gt;Pop Star Essence&lt;/option&gt;
</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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM