2010-06-12 108 views
0

我在我的代码中使用了mysql_real_escape_string($ _ REQUEST ['page'])。它能够防止我的PHP代码中的SQL注入,否则我将不得不做更多的保护?Php sql注入保护

感谢

+0

不是,它不是。 mysql_real_escape_string只能帮助字符串 – 2010-12-27 14:54:43

回答

0

是的,但prepared statements更好。

+0

想解释一下为什么? – symcbean 2010-06-12 23:21:26

+0

如果您将其作为准备好的语句语法的一部分进行转换,那么意外地无法转换变量会更困难,那么如果您将六个变量连接成一个字符串。 – Quentin 2010-06-13 21:27:28

0

个人而言,我会放弃mysql扩展名并迁移到mysqli扩展名。 mysql扩展的问题在于它的旧版本,坦率地说,它很容易忘记逃离某些东西。

mysqli支持prepared statements,它也有一个OOP API,这使得它更容易开发。

当您开始使用prepared statements时,可以更轻松地跟踪您的参数。它也会自动为你逃脱。

0

我也建议在大多数情况下使用预准备语句,但只有插入来自用户的可能是字符串的数据时才有必要。准备好的陈述更加昂贵(性能),所以当你可以避免它们时,你可能应该这样做。使用准备好的语句和/或数据库事务有很多好处。除非你已经有了,否则你应该仔细研究它。

如果您从例如表单接收数值,您只需要通过将输入转换为数字来确保数据质量(任何来自GET或POST的输入始终被PHP视为字符串,除非您将它们转换为字符串),并且任何恶意代码将被删除。

下面是一个例子:

$intCarAge = (int) $_POST['car_age']; 
mysqli_query("UPDATE cars SET car_age = " . $intCarAge . " WHERE id = '123' "); 

的 “(INT)” 中的输入变量$ _POST [ 'car_age']对数(整数)的数据转换。它可以在代码中的任何变量之前添加。变量内的任何字母将被删除,并保留任何数字。 You can read more about number conversion here.

希望我有任何帮助!