在我的服务器端应用程序中,每个输出都通过htmlentities函数传递。通过这种方式,我可以确保我的应用程序是xss安全的。
但为什么输入无法正确显示htmlentities?例如,这行代码:
<input class="form-control" placeholder="name" id="name" />
name.value = '<script>'
注意:<script> = htmlentities("<script>");
此代码在栏内显示单词<script>
。但我希望看到<script>
。对吗?
答案 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(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
document.getElementById("address").value = "<?php echo htmlentities("<script>"); ?>";
</script>
不同之处在于您使用javascript来更新html元素的值,而javascript只是将转义值放在框中。关键是你必须在你的情况下解除转义的实体。