因此,我的网站将允许用户将<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放在哪里?
应该在将其呈现为HTML之前立即对其进行编码,并且由于您不是在PHP中而是在JavaScript中呈现它,因此您应该(一致地)在此处进行编码。
((如果您改为在PHP端进行编码,则必须记住,此文本是[[only用于显示的,否则,例如,将其传递给您时,最终将进行双重编码)到另一个API方法。)
在JSRender中,有一个{{>...}}
标记(而不是{{...}}
)。有关详细信息,请参见其docs。<div>{{>yourData}}</div>
应该在将其呈现为HTML之前立即对其进行编码,并且由于您不是在PHP中而是在JavaScript中呈现它,因此您应该(一致地)在此处进行编码。
((如果您改为在PHP端进行编码,则必须记住,此文本是[[only用于显示的,否则,例如,将其传递给您时,最终将进行双重编码)到另一个API方法。)
在JSRender中,有一个{{> }}
(而不是{{ }}
)标记(请参见docs:]<div>{{> yourData }}</div>