Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过将字符串转换为数组防止sql注入_Php_Sql_Sql Injection - Fatal编程技术网

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

Php 通过将字符串转换为数组防止sql注入,php,sql,sql-injection,Php,Sql,Sql Injection,在我的登录表单中,我在执行查询之前对用户名和密码进行哈希运算 。。。类 private $username; private $password; protected function Login(){ $user = hash('sha256', $this->username); $pass = hash('sha256', $this->password); $this query = "..." ... } 在其他类型的表单(如搜索表单)中,

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

。。。类

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和参数化查询。这样做的另一个好处是允许数据库缓存查询计划。

不要相信自己有能力阻止SQL注入!许多比你更聪明的人都爱上了它


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

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

$query= mysqli_real_escape_string($database_connection, $user)
这将转义可能对SQL字符串产生不利影响的任何危险字符

$query = mysqli_real_escape_string($database_connection, trim($user))
在这一步中,我们添加了trim函数,该函数去掉了所有空格,这些空格用于发起SQL注入攻击


您可以看到有关此的更多信息

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

$query= mysqli_real_escape_string($database_connection, $user)
这将转义可能对SQL字符串产生不利影响的任何危险字符

$query = mysqli_real_escape_string($database_connection, trim($user))
在这一步中,我们添加了trim函数,该函数去掉了所有空格,这些空格用于发起SQL注入攻击


您可以查看有关此的更多信息

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

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

。。。如果您不在
mysql
db.

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

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

。。。如果您不在mysql上,请不要使用addslashes()。如果使用PDO或mysqli,请使用数据绑定功能。如果您使用的是mysql_*函数(您不应该使用),请使用mysql_real_escape_string()。使用或PDO library(我个人更喜欢)@sudowned,我想呕吐。为什么要散列用户名?我本以为那会增加碰撞的风险?此外,您应该与进行检查,但通常的建议是添加一个salt,在对密码进行哈希运算之前,您需要先检索它(基本上是从密码记录中检索)。哈希用户名至少是荒谬的,将所有内容进行哈希运算,然后使用随机salt进行加密,这样您就永远不会知道谁是谁。不要使用addslashes()。如果使用PDO或mysqli,请使用数据绑定功能。如果您使用的是mysql_*函数(您不应该使用),请使用mysql_real_escape_string()。使用或PDO library(我个人更喜欢)@sudowned,我想呕吐。为什么要散列用户名?我本以为那会增加碰撞的风险?此外,您应该检查,但通常的建议是添加一个salt,在对密码进行哈希运算之前,您需要检索它(基本上是从密码记录中检索)。哈希用户名至少是荒谬的,散列所有内容并用随机盐加密,这样你就永远不会知道谁是谁。更多的是一个评论而不是一个答案。有时候你不能说“这是一种安全的方式来做你正在做的非常不安全的事情。”+1:极客们总是试图重新发明方向盘的原因是什么?是的,无论如何我都会恢复我的观点,因为其他答案非常糟糕。这里的重要部分是参数化查询,因为它们很好。更多的是评论而不是回答。有时你不能说“这是一种安全的方式来做你正在做的非常不安全的事情。”+1:极客们总是试图重新发明轮子的原因是什么?是的,我无论如何都会恢复我的观点,因为这些其他答案非常糟糕。这里重要的部分是参数化查询,因为它们很好。