通过将字符串转换为数组来防止sql注入

时间:2012-08-15 21:28:55

标签: php sql sql-injection

在我的登录表单中,我在执行查询之前使用用户名和密码

......上课......

private $username;
private $password;
protected function Login(){
    $user = hash('sha256', $this->username);
    $pass = hash('sha256', $this->password);
    $this query = "..."
    ...
}

以其他形式(如搜索表单)我将字符串转换为数组,然后执行查询,这样查询将如下所示:

$searchstring = explode(' ', $search);
//.... Some lines of PHP code... and the resulting query is: ...
$this->query = "SELECT... WHERE name LIKE 'DELETE%' OR name LIKE 'FROM%' ";
$this->query.= " OR name LIKE 'USERS%' OR name LIKE 'WHERE%' OR name LIKE '1%'";

这足以阻止sql注入吗?感谢

3 个答案:

答案 0 :(得分:5)

不要相信自己的能力来阻止SQL注入!许多比你更好的人已经陷入困境。

使用mysqli或PDO和参数化查询。这样做的另一个好处是允许数据库缓存查询计划。

答案 1 :(得分:0)

您可以采取一些非常简单的步骤来提高代码的安全性:

$query= mysqli_real_escape_string($database_connection, $user)

这会逃避任何可能对SQL字符串产生负面影响的危险字符

$query = mysqli_real_escape_string($database_connection, trim($user))

在这一步中,我们添加了trim函数,它取出了任何白色空格 - 用于启动SQL注入攻击

您可以详细了解此here

答案 2 :(得分:0)

或者您可以将其转换为二进制文件:

function mssql_escape($data) {
    if(is_numeric($data))
        return $data;
    $unpacked = unpack('H*hex', $data);
    return '0x' . $unpacked['hex'];
}

...如果你不在mysql db。