我没有手动将htmlspecialchars函数添加到所有输出的数据中,而是尝试将其放置在我的查询方法中,以便自动处理所有返回的数据。
这是我的查询方法:
function query($query, $params=NULL) {
$stmt = $this->pdo->prepare($query);
$execute = $stmt->execute($params);
if($execute == false) {
return false;
}
//return $stmt->fetchAll();
$all_data = array();
foreach($stmt->fetchAll() as $value) {
$all_data[] = array_map("htmlspecialchars", $value);
}
return $all_data;
}
出于某种原因,这似乎只是部分时间起作用。我没有收到任何错误,只是没有返回任何数据。
格式化此方法以正确转义输出的所有数据的最佳方式是什么?
我没有手动将htmlspecialchar函数添加到所有输出的数据中,而是尝试将其放在查询方法中,以便自动处理所有返回的数据。
这是一个糟糕的举动。始终在输出时转义,从不在输入时转义。除了针对对数据库具有写访问权限的攻击者,输出转义比输入转义具有"明显"的安全优势外,这还允许您获取原始数据并编写单元测试,以确保其输出正确。
格式化此方法以正确转义输出的所有数据的最佳方式是什么?
由于您在输入时进行了转义,并且原始数据丢失,因此无法从给出的描述中判断出问题所在。
但通常情况下,您希望使用htmlentities($string, ENT_HTML5 | ENT_QUOTES, 'UTF-8')
(假设您的网站使用UTF-8;请适当选择编码),而不是裸htmlspecialchars($string)
。