我了解在页面上将用户提供的内容显示为HTML时,我应该使用htmlspecialchars()
。这是否适用于其他内容,如JavaScript,CSS,<INPUT>
的值等?我相信我听过一些人要说使用json_encode()
代替htmlspecialchars()
来编码JS。
<?php
$dangerous=$_GET['dangerous'];
session_start();
$_SESSION['mySession']=$dangerous;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo($dangerous);?></title>
<style type="text/css">
div.<?php echo($dangerous);?> {size:12px;}
</style>
<script type="text/javascript">
var myVar=<?php echo($dangerous);?>;
</script>
</head>
<body>
echo(<?php echo($dangerous);?>)
<input type="text" value="<?php echo($dangerous);?>" class="whatEver" name="myInput" />
<a href="<?php echo($dangerous);?>">Some Link</a>
</body>
</html>
答案 0 :(得分:1)
我知道在页面上将用户提供的内容显示为HTML时,我应该使用htmlspecialchars()。这是否适用于其他内容,如JavaScript,CSS,
<INPUT>
的值等?
错......等等。
首先,假设您打算接受 text (然后您将表示为HTML)。如果您接受HTML,那么您需要使用不同的方法来清理它(这通常涉及使用真正的HTML解析器和可接受元素和属性的白名单,然后可能额外检查属性值。)
如果我们假设我们正在处理文本......
输入元素的值由HTML属性提供。 HTML属性包含HTML,因此您需要使用实体来表示值内的特殊字符。
CSS和JavaScript不是HTML,因此您需要对目标语言使用适当的转义。但是,然后您(可能)将CSS或JavaScript嵌入到HTML文档中。
如果要将其放在属性值中,则需要正常转义它。
如果要将其放入<script>
或<style>
元素中,则必须使用HTML处理其特殊处理规则。这些元素被定义为包含CDATA(如果我们将其置于HTML 4术语中),因此您唯一需要注意的是数据中存在</script>
或</style>
。
如果你正在处理XHTML(我建议你不要),那么你必须跳过the Media Types Note中描述的常见箍。