在我的登录表单中,我在执行查询之前对用户名和密码进行哈希处理
。.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 上。