【问题标题】:CodeIgniter MySQL escapingCodeIgniter MySQL 转义
【发布时间】:2011-05-21 02:04:39
【问题描述】:

我正在运行以下查询:

INSERT INTO deal (`site_id`, `status`, `slug`, `title`, `description`, `condition`, `sale_price`, `shipping`, `deal_url`, `buy_url`, `start`, `added`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW()) ON DUPLICATE KEY UPDATE `site_id` = ?,`status` = ?,`slug` = ?,`title` = ?,`description` = ?,`condition` = ?,`sale_price` = ?,`shipping` = ?,`deal_url` = ?,`buy_url` = ?,`start` = ?

由此代码构建:

    $this->db->query('INSERT INTO
            deal
                (`'.implode('`, `', array_keys($insert)).'`, `added`)
            VALUES
                ('.implode(', ', array_fill(0, count($insertValues), '?')).', NOW())
            ON DUPLICATE KEY UPDATE
            '.implode(',', array_keys($update)), array_merge($insertValues, array_values($update)));

这个问题是我的查询没有正确转义....

INSERT INTO deal (`site_id`, `status`, `slug`, `title`, `description`, `condition`, `sale_price`, `shipping`, `deal_url`, `buy_url`, `start`, `added`) VALUES ('2', 1, http://www.woot.com/sale/sony-dash-personal-internet-viewer-7, 'Sony Dash Personal Internet Viewer', 'Finally, someone made me my own, personal internet!', 'New', '69.99', $5 shipping, http://www.woot.com/sale/sony-dash-personal-internet-viewer-7, , 1305867600, NOW()) ON DUPLICATE KEY UPDATE `site_id` = '2',`status` = 1,`slug` = http://www.woot.com/sale/sony-dash-personal-internet-viewer-7,`title` = 'Sony Dash Personal Internet Viewer',`description` = 'Finally, someone made me my own, personal internet!',`condition` = 'New',`sale_price` = '69.99',`shipping` = $5 shipping,`deal_url` = http://www.woot.com/sale/sony-dash-personal-internet-viewer-7,`buy_url` = ,`start` = 1305867600

我有 XSS 过滤设置....我错过了什么吗?

【问题讨论】:

  • XSS 和 sql 注入是不同类型的漏洞,应该以不同的方式处理。
  • PDO 的要点通常是查询是抽象的,因此不需要转义,因为它们不需要构建。我不熟悉 CodeIgniter,但我建议您确认没有更标准的方法来执行此插入操作。
  • @Matchu 他们有一个叫做 ActiveRecord (codeigniter.com/user_guide/database/active_record.html) 的东西,但是 ON DUPLICATE KEY UPDATE 没有等效的功能,所以你会被困在第一个 SELECT 看看是否数据存在

标签: mysql codeigniter pdo


【解决方案1】:

奇怪。什么是数据库定义?我唯一能想到的是 DB 层得出的结论是其中一些列不需要转义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2016-02-28
    • 2019-01-05
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 2023-04-07
    相关资源
    最近更新 更多