带有htmlspecialchars的pdo fetchAll-保护js注入

问题描述 投票:0回答:1

因此,我的网站将允许用户将<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);

在我的api中,我将htmlspecialchars放在哪里?

javascript php htmlspecialchars
1个回答
1
投票

应该在将其呈现为HTML之前立即对其进行编码,并且由于您不是在PHP中而是在JavaScript中呈现它,因此您应该(一致地)在此处进行编码。

((如果您改为在PHP端进行编码,则必须记住,此文本是[[only用于显示的,否则,例如,将其传递给您时,最终将进行双重编码)到另一个API方法。)

在JSRender中,有一个{{>...}}标记(而不是{{...}})。有关详细信息,请参见其docs

<div>{{>yourData}}</div>


0
投票

应该在将其呈现为HTML之前立即对其进行编码,并且由于您不是在PHP中而是在JavaScript中呈现它,因此您应该(一致地)在此处进行编码。

((如果您改为在PHP端进行编码,则必须记住,此文本是[[only用于显示的,否则,例如,将其传递给您时,最终将进行双重编码)到另一个API方法。)

在JSRender中,有一个{{> }}(而不是{{ }})标记(请参见docs:]

<div>{{> yourData }}</div>

© www.soinside.com 2019 - 2024. All rights reserved.