首页 > 解决方案 > Ajax 安全性:JSON 与外部对象

问题描述

正如Owasp CheatSheet 系列中提到的,在“防止旧浏览器的 JSON 劫持”部分中,应该始终返回带有外部对象的 JSON。结果,相同的参考断言像下面这样的 JSON 是可利用的:

[{"object": "inside an array"}]

它还指出以下 JSON 格式不可利用:

 {"object": "not inside an array"}

但是,当我对数据库运行查询并使用 fetchAll(PDO::FETCH_ASSOC) 时,它会将数组完全采用第一种可利用的 JSON 格式。如何以第二种不可利用的格式从 fetchAll 生成 JSON?

已编辑

以下是我的 php fetchAll() 脚本:

    public function retrieveData() {
        $conn = parent::connected();
        $inactive = '0';
        $sql = "SELECT * FROM `category` WHERE term_status != :status";
        $stmt = $conn->prepare($sql);
        $stmt->bindParam("status", $inactive, PDO::PARAM_INT);
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

赞赏。

标签: phpjsonajaxsecurity

解决方案


基本上,总是返回一个对象,其属性包含你的结果数组。对你来说,它看起来像这样。

return [ 'result' => $stmt->fetchAll(PDO::FETCH_ASSOC) ];

这将返回如下内容:

{ 'result': [ ...rows ] }

推荐阅读