使用mysql_query的参数

Sac*_*dra -1 php mysql

在学习的某个地方,我发现了一些有趣的东西..它说的内容如下:

$query = sprintf("SELECT firstname, lastname, address, age FROM friends 
WHERE firstname='%s' AND lastname='%s'",mysql_real_escape_string($firstname),
    mysql_real_escape_string($lastname));
Run Code Online (Sandbox Code Playgroud)

使用这样的查询代替

$query="select firstname, lastname, address, age FROM friends
WHERE firstname='".$_RETURN['name1']."', lastname='".$_RETURN['name2']."'";
Run Code Online (Sandbox Code Playgroud)

这看起来是否合理..你有没有试过这种编码......以及它如何帮助防止任何恶意攻击..

Bob*_*bby 5

首先,这就是SQL-Injection.它基本上只是通过用户输入改变对数据库的查询的可能性.

我们来看一个例子:

查询:

SELECT temp1 FROM temp WHERE temp2 = 'VAR1';
Run Code Online (Sandbox Code Playgroud)

现在我们将为VAR1指定以下值:'; DROP TABLE *; -- 我们将获得:

SELECT temp1 FROM temp WHERE temp2 = ''; DROP TABLE *; --';
Run Code Online (Sandbox Code Playgroud)

有了mysql_real_escape_string它看起来是这样的:

SELECT temp1 FROM temp WHERE temp2 = '\'; DROP TABLE *; --'
Run Code Online (Sandbox Code Playgroud)

mysql_real_escape_string '保护'字符串以供查询使用.

但最后,你应该mysql_*完全停止使用它.在防止SQL注入或其他方法对查询进行调整时,它们被弃用并被认为是不安全的.

您应该像这样停止连接查询并开始使用预处理语句,这些语句不仅更易于使用,默认情况下会阻止SQL注入,还可以提高应用程序的速度.

对于PHP,有两个扩展,旨在关闭整个mysql_*打开:

我再说一遍:请停止使用mysql_*!

  • 那是我的小桌子...... +1 (6认同)