我没有手动将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;
}
出于某种原因,这似乎只在部分时间起作用。我没有收到任何错误,只是没有数据返回。
格式化此方法以正确转义所有正在输出的数据的最佳方法是什么?
答案 0 :(得分:0)
我一直没有尝试将htmlspecialchars函数手动添加到所有输出数据,而是尝试将其放置在查询方法中,以便所有返回的数据将被自动处理。
这是一个不好的举动。 Always escape on output, never on input。除了对具有对数据库的写访问权的攻击者而言,输出转义相对于输入转义具有“明显的”安全优势,这还允许您获取原始数据并编写单元测试以确保其正确输出。
格式化此方法以正确转义所有正在输出的数据的最佳方法是什么?
由于您转义了输入并且原始数据丢失了,所以无法从给出的描述中判断出出了什么问题。
但通常,您要使用htmlentities($string, ENT_HTML5 | ENT_QUOTES, 'UTF-8')
(假设您的网站使用UTF-8;请适当选择编码),而不要使用裸露的htmlspecialchars($string)
。