codeigniter 或 php 的 sql 注入漏洞

Posted

技术标签:

【中文标题】codeigniter 或 php 的 sql 注入漏洞【英文标题】:sql injection vulnerability to codeigniter or php 【发布时间】:2014-10-13 12:00:49 【问题描述】:

您好,我想知道为什么以前从未有人问过这种示例问题。 我从我的大学得到了这段代码,他们说这种代码能够防止 sql 注入

我们使用codeigniter建站,这里是防止sql注入的代码

控制器

$usr = $this->input->post('userid');
$pwd = $this->input->post('passwd');

if($usr && $pwd) 
                $ack = $this->mAuth->get_user($usr);
$pwx = $ack['passwd'];
                    if($ack && $pwd == $pwx) 
                        //redirect code

型号

public function get_user($user_id='', $status=1) 
        $user_id = $this->db->escape(trim($user_id));
        $status  = $status ? 'and user_status_uid = 1' : '';

        $sql = "select * from users where user_id = lower($user_id)"

        return rst2Array($sql, 'row');
    

我尝试使用 1' 或 1 = 1 等登录,我发现它确实阻止了 sql 注入,即使它只是纯文本和密码。

此代码是否存在漏洞? 谢谢

【问题讨论】:

如果你想防止 sql 注入,永远不要通过字符串连接构建包含数据的 sql 查询。 检查这个问题:***.com/questions/1615792/… 这段代码 if($ack && $pwd == $pwx) //redirect code 它实际上可以防止注入以任何人的身份登录,对吗?有人真的可以举个例子吗? 【参考方案1】:

简单地说:“魔法”在$this->db->escape 函数中。它在字符串值周围添加引号,并为 SQL 语法正确转义它们。见https://ellislab.com/codeigniter/user-guide/database/queries.html

除非该函数中存在任何错误,否则它确实可以防止这种情况下的 SQL 注入。

【讨论】:

以上是关于codeigniter 或 php 的 sql 注入漏洞的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 PHP 和 Codeigniter 从 PHP Azure 连接到 SQL Server Azure

无法使用 PHP Codeigniter 连接 SQL Server

如何在 PHP Codeigniter 中处理 SQL 查询数据

SQL 基准测试:PHP ActiveRecord ORM 与 MySQL 与 CodeIgniter Active Record 与标准 PHP

如何将 codeigniter 与 Sql Server 2012 连接?

Codeigniter 无法连接到外部 SQL Server