何时适合逃避html实体?

时间:2015-07-07 16:05:15

标签: html html5 xss html-entities

在我的服务器端应用程序中,每个输出都通过htmlentities函数传递。通过这种方式,我可以确保我的应用程序是xss安全的。

但为什么输入无法正确显示htmlentities?例如,这行代码:

  <input class="form-control" placeholder="name"    id="name" />
name.value = '&lt;script&gt;'

注意:&lt;script&gt; = htmlentities("<script>");

此代码在栏内显示单词&lt;script&gt;。但我希望看到<script>。对吗?

1 个答案:

答案 0 :(得分:0)

错误。 htmlentities()负责将字符转换为HTML实体。

采取以下示例,亲眼看看。

<input type="text" value="<?php echo htmlentities("<script>"); ?>" />
<input class="form-control" placeholder="name"    id="name" />
<input class="form-control" placeholder="name"    id="address" />
<script type="text/javascript">
    document.getElementById("name").value = "<?php echo htmlentities("<script>"); ?>".replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
    document.getElementById("address").value = "<?php echo htmlentities("<script>"); ?>";
</script>

不同之处在于您使用javascript来更新html元素的值,而javascript只是将转义值放在框中。关键是你必须在你的情况下解除转义的实体。