在查询函数中使用htmlspecialchar


Using htmlspecialchars within Query function

我没有手动将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)