在Query函数中使用htmlspecialchars

时间:2013-12-11 17:59:12

标签: php security class pdo htmlspecialchars

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

出于某种原因,这似乎只在部分时间起作用。我没有收到任何错误,只是没有数据返回。

格式化此方法以正确转义所有正在输出的数据的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

  

我一直没有尝试将htmlspecialchars函数手动添加到所有输出数据,而是尝试将其放置在查询方法中,以便所有返回的数据将被自动处理。

这是一个不好的举动。 Always escape on output, never on input。除了对具有对数据库的写访问权的攻击者而言,输出转义相对于输入转义具有“明显的”安全优势,这还允许您获取原始数据并编写单元测试以确保其正确输出。

  

格式化此方法以正确转义所有正在输出的数据的最佳方法是什么?

由于您转义了输入并且原始数据丢失了,所以无法从给出的描述中判断出出了什么问题。

但通常,您要使用htmlentities($string, ENT_HTML5 | ENT_QUOTES, 'UTF-8')(假设您的网站使用UTF-8;请适当选择编码),而不要使用裸露的htmlspecialchars($string)