0

我了解htmlspecialchars()在页面上将用户提供的内容显示为 HTML 时应该使用。这是否适用于其他内容,例如 JavaScript、CSS、an 的值<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>
4

1 回答 1

1

我知道在页面上将用户提供的内容显示为 HTML 时,我应该使用 htmlspecialchars()。这是否适用于其他内容,例如 JavaScript、CSS、an 的值<INPUT>等?

呃……有点。

首先,假设您打算接受文本(然后将其表示为 HTML)。如果您接受 HTML,那么您需要使用不同的方法来清理它(这通常涉及使用真正的 HTML 解析器和可接受元素和属性的白名单,然后可能会额外检查属性值)。

如果我们假设我们正在处理文本......</p>

输入元素的值由 HTML 属性提供。HTML 属性包含 HTML,因此您需要用实体表示值内的特殊字符。

CSS 和 JavaScript 不是 HTML,因此您需要对目标语言使用适当的转义。但是,您随后(可能)将 CSS 或 JavaScript 嵌入到 HTML 文档中。

如果你把它放在一个属性值中,那么你需要像往常一样转义它。

如果你把它放到一个<script>or<style>元素中,那么你必须在 HTML 中处理它们的特殊处理规则。这些元素被定义为包含 CDATA(如果我们将其放在 HTML 4 术语中),因此您唯一需要注意的是数据的存在</script></style>其中。

如果您正在处理 XHTML(我建议您不要),那么您必须跳过Media Types Note中描述的常见问题。

于 2013-05-02T13:17:27.977 回答