mysql_real_escape_string() 和 mysql_escape_string() 足以保证应用程序安全吗?

Mary-Kate Olsen
发布: 2024-11-02 03:27:03
原创
817 人浏览过

Are mysql_real_escape_string() and mysql_escape_string() Sufficient for App Security?

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 注入的攻击,尤其是在查询中使用的 PHP 变量时。
  • 示例:

    $sql = "SELECT number FROM PhoneNumbers WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);  
    登录后复制

    此查询可以是通过插入恶意数据来利用,可能导致未经授权的数据库访问。

LIKE SQL 攻击:

  • LIKE 查询可能会受到以下攻击的影响特殊字符,例如“%”或“_”,绕过预期的搜索条件。
  • 示例:

    $sql = "SELECT url FROM GrabbedURLs WHERE " . mysql_real_escape_string($field) . " LIKE '%s%%' LIMIT %s";  
    登录后复制

    此查询允许攻击者检索所有记录,造成安全风险。

字符集漏洞:

  • Internet Explorer 仍然容易受到字符集漏洞的攻击,允许黑客注入任意 SQL 命令,包括 SQL 注入。

推荐的解决方案:准备好的语句

为了解决这些漏洞,建议的安全措施是使用准备好的语句。

  • 准备好的语句利用数据库服务器固有的安全机制。
  • 它们通过仅执行预期的 SQL 来防止 SQL 注入。
  • 准备好的语句还可以简化代码并最大限度地减少漏洞。

示例:

$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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!