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


prevent sql injection by converting string to arrays

在我的登录表单中,我在执行查询之前对用户名和密码进行哈希处理

。.class。。。

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注入吗?谢谢

不要相信自己阻止SQL注入的能力!许多比你更好的脑袋都倒在了它身上。

使用 mysqli 或 PDO 和参数化查询。这样做的好处是,数据库也可以缓存查询计划。

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

$query= mysqli_real_escape_string($database_connection, $user)

这将转义任何可能对 SQL 字符串产生不利影响的危险字符

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

在此步骤中,我们添加了修剪函数,该函数会取出任何空格 - 用于发起SQL注入攻击

您可以在此处查看有关此内容的更多信息

或者

,您可以将其转换为二进制:

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

。如果您不在 mysql db 上。