在学习的某个地方,我发现了一些有趣的东西..它说的内容如下:
$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)
这看起来是否合理..你有没有试过这种编码......以及它如何帮助防止任何恶意攻击..
首先,这就是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_*!
| 归档时间: |
|
| 查看次数: |
4236 次 |
| 最近记录: |