mysql_real_escape_string() 和 mysql_escape_string() 对于应用程序来说足够安全吗?
简介:
维护应用程序安全至关重要,其中数据库安全起着重要作用。虽然 mysql_real_escape_string() 和 mysql_escape_string() 通常用于防止 SQL 注入,但人们对其功效感到担忧。
问题:
mysql_real_escape_string() 会吗和 mysql_escape_string() 足以保证应用程序安全吗?
答案:
不。
漏洞mysql_real_escape_string() 和 mysql_escape_string()
由于存在多个安全漏洞,这些函数不足以实现全面的应用程序安全:
SQL 注入:
示例:
$sql = "SELECT number FROM PhoneNumbers WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);
此查询可以是通过插入恶意数据来利用,可能导致未经授权的数据库访问。
LIKE SQL 攻击:
示例:
$sql = "SELECT url FROM GrabbedURLs WHERE " . mysql_real_escape_string($field) . " LIKE '%s%%' LIMIT %s";
此查询允许攻击者检索所有记录,造成安全风险。
字符集漏洞:
推荐的解决方案:准备好的语句
为了解决这些漏洞,建议的安全措施是使用准备好的语句。
示例:
$pdo = new PDO($dsn); $column = 'url'; $value = 'http://www.stackoverflow.com/'; $limit = 1; $statement = $pdo->prepare('SELECT url FROM GrabbedURLs WHERE ' . $column . '=? LIMIT ' . $limit); $statement->execute(array($value)); while (($data = $statement->fetch())) { }
结论:
mysql_real_escape_string() 和 mysql_escape_string() 针对某些特定情况提供有限的保护SQL注入攻击。然而,它们不足以保护应用程序免受各种其他漏洞的影响。推荐的方法是使用准备好的语句来确保全面的应用程序安全性。
以上是mysql_real_escape_string() 和 mysql_escape_string() 足以保证应用程序安全吗?的详细内容。更多信息请关注PHP中文网其他相关文章!