带有 htmlspecialchars 的 pdo fetchAll - 保护 js 注入
pdo fetchAll with htmlspecialchars - protect js injection
所以我的网站将允许用户将 <script>alert("hey");</script>
保存到基本上任何字段,然后当我呈现它时,它会显示警报,但它不应该。在阅读它时,听起来您应该在 select 和呈现数据时使用 htmlspecialchars。
我有一个 api 层,其中我 select 数据和 return 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 中渲染它,而是在 JavaScript 中渲染它,你应该这样做那里(一直)。
(如果您改为在 PHP 端编码,您必须记住此文本 仅 用于显示,否则您最终会得到双重编码,例如,将其传递给另一个 API 方法。)
在 JSRender 中有 {{>...}}
标签(而不是 {{:...}}
)。详情见其docs.
<div class="card-header py-1 px-2">
{{>Comment}}
</div>
所以我的网站将允许用户将 <script>alert("hey");</script>
保存到基本上任何字段,然后当我呈现它时,它会显示警报,但它不应该。在阅读它时,听起来您应该在 select 和呈现数据时使用 htmlspecialchars。
我有一个 api 层,其中我 select 数据和 return 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 中渲染它,而是在 JavaScript 中渲染它,你应该这样做那里(一直)。
(如果您改为在 PHP 端编码,您必须记住此文本 仅 用于显示,否则您最终会得到双重编码,例如,将其传递给另一个 API 方法。)
在 JSRender 中有 {{>...}}
标签(而不是 {{:...}}
)。详情见其docs.
<div class="card-header py-1 px-2">
{{>Comment}}
</div>