可能重复: 防止PHP中SQL注入的最佳方法?
我一直在做一些关于SQL注入的研究,但是我有一些问题我找不到答案。是否有可能防止SQL注入对字符串级别的攻击?我的意思是,我们不能阻止它;
真的有必要使用PDO/mysqli的东西吗?分析要在mysql中处理的sql字符串就足够了吗?请记住,我不是一个PHP或MySQL专家在回答。我是一个试图了解他们的人。
发布于 2012-10-30 21:08:14
当然,只要每次调用函数时不介意查询,就可以使用mysql_real_escape_string($postID)来防止注入。
PDO和MySQLi提供的不仅仅是注入保护。它们允许准备语句,这些语句可以在不多次调用db的情况下保护代理注入。这意味着更快的整体性能。想象一下试图向表中插入一个包含30列的用户记录.这是很多mysql_real_escape_string()电话。
准备好的语句同时发送所有数据以及查询,并在一个请求中在服务器上转义它。Mysql的支持已经准备好了状态,旧的php mysql_库不支持它们。
是时候转移到mysqli或者更好的PDO了--你永远不会回头。
发布于 2012-10-30 21:13:47
我鼓励您使用PDO (PHP数据对象)。它将有助于防止SQL注入,并应加快查询速度。此外,您的应用程序将从数据库中变得更抽象。
如下所示:
$stmt = $conn->prepare("INSERT INTO table_name VALUES(:id, :firstname, :lastname)");
$stmt->bindValue(':id', $id);
$stmt->bindValue(':firstname', $firstname);
$stmt->bindValue(':lastname', $lastname);
$stmt->execute();发布于 2012-10-30 21:10:38
我不鼓励您再使用mysql_函数了,因为它们是不推荐的。有关为什么停止常规mysql_的更多信息,请查看:mysql_。你可以很容易地切换到mysqli。其实也没那么复杂。此外,如果您想转义字符,并且不想用新的转义方式替换每个mysql_real_escape_string,则可以使用以下函数:
function mysql_string_safe($stringtoclean)
{
//In this case,
$safestring = mysqli_real_escape_string('your_handle_here',$stringtoclean);
return $safestring;
}因此,您可以将mysql_real_escape_string替换为mysql_string_safe。Mysqli与mysql_非常相似,但它更安全。我已经转换到它,它没有花太长时间,这是很容易的,因为它只是替换的东西。连接到数据库也是不同的。另一方面,PDO支持不同的数据库驱动程序,但是如果您想节省时间而不切换数据库驱动程序,只需使用mysqli即可。
https://stackoverflow.com/questions/13147555
复制相似问题