我似乎无法理解何时使用htmlspecialchars()。
我想在插入数据时执行以下操作:
$_POST = filter_input_array(INPUT_POST, [
'name' => FILTER_SANITIZE_STRING,
'homepage' => FILTER_DEFAULT // do nothing
]);
$course = new Course();
$course->name = trim($_POST['name']);
$course->homepage = $_POST['homepage']; // may contain unsafe HTML
$courseDAO = DAOFactory::getCourseDAO();
$courseDAO->addCourse($course); // simple insert statement
当我输出时,我会执行以下操作:
$courseDAO = DAOFactory::getCourseDAO();
$course = $courseDAO->getCourseById($_GET['id']);
?>
<?php ob_start() ?>
<h1><?= $course->name ?></h1>
<div class="homepage"><?= $course->homepage ?></div>
<?php $content = ob_get_clean() ?>
<?php include 'layout.php' ?>
我希望浏览器将$course->homepage
视为HTML并将其呈现为HTML。
我在这个问题上一直在阅读answers。我应该在这里的任何地方使用htmlspecialchars()
吗?
答案 0 :(得分:2)
(从安全POV)有三种类型的数据可以输出到HTML中:
(请注意,HTML属性和某些元素是特殊情况,例如onclick属性需要HTML编码的JavaScript,因此您的数据必须是HTML安全和 JS安全)。
如果是文字,请使用htmlspecialchars
将其转换为HTML。
如果它是受信任的HTML,那么只需输出它。
如果它是不受信任的HTML,那么您需要对其进行清理以确保其安全。这通常意味着使用DOM解析器解析它,然后删除未出现在白名单中的所有元素和属性作为安全(某些属性可能是特殊的,可以过滤而不是剥离),然后将DOM转换回HTML。像HTML Purifier这样的工具可以做到这一点。
$ course-&gt; homepage = $ _POST ['homepage']; //可能包含不安全的HTML
我希望浏览器将$ course-&gt;主页视为HTML格式。
然后你有第三种情况需要过滤HTML。
答案 1 :(得分:1)
如果您确定内容,则输出纯HTML。在所有其他资源上使用htmlspecialchars,尤其是用户输入,以防止出现安全问题。
答案 2 :(得分:1)