【发布时间】:2020-08-08 16:39:51
【问题描述】:
所以我的网站将允许用户将<script>alert("hey");</script> 保存到基本上任何字段,然后当我渲染它时,它会显示警报,但它不应该。在阅读它时,听起来您应该在选择和呈现数据时使用 htmlspecialchars。
我有一个 api 层,我在其中选择数据并返回 json,然后使用 jsrender 进行渲染。
这是我的查询和 api 的示例:
$return = ["list",[]];
$sql = "SELECT * FROM `News`;"
if ($stmt = $GLOBALS['mysqli']->prepare($sql)) {
if ($stmt->execute($param)) {
$list = $stmt->fetchAll(PDO::FETCH_ASSOC);
$return["list"] = $list ;
}
}
header('Content-Type: application/json');
echo json_encode( $return);
我的模板看起来像:
<div class="card-header py-1 px-2">
{{:Comment}}
</div>
在我的 api 中,我应该把 htmlspecialchars 放在哪里?
【问题讨论】:
-
您是否允许任何 HTML?如果没有,在保存之前将其删除是有意义的。否则,可能想要对您的内容进行编码(同样,在保存时)。两者都可以通过过滤器完成:php.net/manual/en/filter.filters.sanitize.php。还有 strip_tags,如果你想允许有效标签的子集:php.net/manual/en/function.strip-tags.php
-
如果您使用
strip_tags,请务必小心。这将破坏科学公式和其他具有有效<和>符号的数据。
标签: javascript php jsrender htmlspecialchars