我不知道这是不是一个好问题,但今天让我有了很多疑问。所以我使用PHP函数基本上节省时间和转义值,就像我们之前使用mysql_real_escape()
一样,但我被告知这样做实际上很危险,这就是我在做的事情:
function mysql_string_safe($stringtoclean)
{
$safestring = mysqli_real_escape_string($GLOBALS['confDBLink'],$stringtoclean);
return $safestring;
}
我现在有疑问..如何做到这一点实际上是不安全的?既然我正在做的就是向函数发送一个值,然后在mysqli_real_escape_string
中将其转义? (然后返回当然)
因此,当我真的想要逃避一个值时,我会做以下事情:
mysql_string_safe($valuetoescape);
我真的很想知道,不仅因为有疑问,而且还知道,因为如果这是非常危险的,因为我被告知,那么我也会从我的应用程序中删除它。
非常感谢你的时间。
答案 0 :(得分:4)
本身没有任何不安全因素,但使用预处理语句/绑定值比显式转义输入更受欢迎。由于以下几个原因,后者可能不安全:
答案 1 :(得分:1)
我愿意成为那个告诉你的人并不是指你有一个调用mysql_real_escape_string()
的函数,而是指你使用mysql_*
函数的事实所有。您可能已经看到此消息的变体,这解释了为什么您不应该使用这些功能:
Please, don't use mysql_*
functions in new code。它们不再被维护,deprecation process已经开始了。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial。
答案 2 :(得分:0)
根据您的系统已使用mysqli的数量,我会切换到PDO:
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
$stmt->bindValue(':username', $_POST['username']);
$stmt->execute();
$row = $stmt->fetch();
通过如图所示绑定值,PDO会为您处理字符的转义。这通常被认为是与PHP交互的改进方式,你可以在这里阅读:http://php.net/manual/en/book.pdo.php
我知道这并没有严格回答你的问题,我认为这是一个完全不同的解决方案可能有用的情况。