首页  >  文章  >  后端开发  >  mysql_real_escape_string() 和 mysql_escape_string() 足以保护 MySQL 应用程序吗?

mysql_real_escape_string() 和 mysql_escape_string() 足以保护 MySQL 应用程序吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-01 03:03:28995浏览

Are mysql_real_escape_string() and mysql_escape_string() Enough to Secure MySQL Applications?

MySQL 安全性:mysql_real_escape_string() 和 mysql_escape_string() 足够吗?

mysql_real_escape_string() 和 mysql_escape_string() 对于应用程序安全性的功效引发了一些争论。虽然这些函数可以防止已知的 SQL 注入向量,但它们的局限性可能会让您容易受到更高级的攻击。

SQL 注入敏感性

尽管使用 mysql_real_escape_string(),您可能会在 PHP 变量集成到查询中的场景中,仍然容易受到 SQL 注入的影响。例如,考虑以下代码:

<code class="php">$sql = "SELECT number FROM PhoneNumbers " .
       "WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);</code>
熟练的黑客可以通过以下输入利用此查询:

<code class="php">$field = "1=1"
$value = "1"</code>
这绕过了预期的逻辑,而是返回(可能)所有记录符合指定条件的人。

喜欢攻击

mysql_real_escape_string() 无法有效防止 LIKE 攻击,例如:

<code class="php">$sql = "SELECT number FROM PhoneNumbers " .
       "WHERE " . mysql_real_escape_string($field) . " LIKE " . mysql_real_escape_string($value);</code>
恶意用户可以将 $value 设置为 % 来检索所有记录,从而可能暴露敏感数据.

字符集漏洞

即使在 2011 年,Internet Explorer 仍然容易受到字符集漏洞的攻击。此漏洞可以让攻击者控制您的数据库,类似于 SQL 注入。

准备的语句:A主动方法

mysql_real_escape_string() 和mysql_escape_string() 很容易受到攻击,因为它们是反应式防御机制。另一方面,准备好的语句提供了主动的解决方案。通过仅执行有效且已编程的 SQL,准备好的语句可以显着降低意外 SQL 执行的风险,无论底层数据库是否存在漏洞。

以下是使用准备好的语句的示例:

<code class="php">$statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' .
                           'WHERE ' . $column . '=? ' .
                           'LIMIT ' . intval($limit));
$statement->execute(array($value));</code>
与使用 mysql_real_escape_string() 相比,准备好的语句既安全又简洁。他们依靠数据库服务器的保护措施来防范已知和未知的威胁。

以上是mysql_real_escape_string() 和 mysql_escape_string() 足以保护 MySQL 应用程序吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn