我在我的代码中使用了mysql_real_escape_string($ _ REQUEST ['page'])。它能够防止我的PHP代码中的SQL注入,否则我将不得不做更多的保护?Php sql注入保护
感谢
我在我的代码中使用了mysql_real_escape_string($ _ REQUEST ['page'])。它能够防止我的PHP代码中的SQL注入,否则我将不得不做更多的保护?Php sql注入保护
感谢
是的,但prepared statements更好。
个人而言,我会放弃mysql
扩展名并迁移到mysqli
扩展名。 mysql
扩展的问题在于它的旧版本,坦率地说,它很容易忘记逃离某些东西。
mysqli
支持prepared statements,它也有一个OOP API,这使得它更容易开发。
当您开始使用prepared statements时,可以更轻松地跟踪您的参数。它也会自动为你逃脱。
我也建议在大多数情况下使用预准备语句,但只有插入来自用户的可能是字符串的数据时才有必要。准备好的陈述更加昂贵(性能),所以当你可以避免它们时,你可能应该这样做。使用准备好的语句和/或数据库事务有很多好处。除非你已经有了,否则你应该仔细研究它。
如果您从例如表单接收数值,您只需要通过将输入转换为数字来确保数据质量(任何来自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.
希望我有任何帮助!
不是,它不是。 mysql_real_escape_string只能帮助字符串 – 2010-12-27 14:54:43