首页 > 数据库 > mysql教程 > `mysql_real_escape_string()` 和 `mysql_escape_string()` 是否足以保护我的 Web 应用程序免受 SQL 注入?

`mysql_real_escape_string()` 和 `mysql_escape_string()` 是否足以保护我的 Web 应用程序免受 SQL 注入?

Susan Sarandon
发布: 2024-12-13 03:16:14
原创
827 人浏览过

Are `mysql_real_escape_string()` and `mysql_escape_string()` Enough to Secure My Web Application Against SQL Injection?

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

虽然这些函数可以增强数据保护,但不足以全面保障 Web 应用程序的所有安全

SQL 注入

  • Mysql_escape_string() 仍然可能使您容易受到 SQL 注入攻击,特别是在查询中使用可变数据时。

LIKE SQL攻击

  • 带有“�ta%”等参数的 LIKE 查询可被利用来返回所有记录或泄露敏感信息,例如完整的信用卡号。

字符集漏洞

  • Internet Explorer 仍然容易受到字符集的影响

LIMIT 漏洞

  • Mysql_real_escape_string() 对于 LIMIT 漏洞攻击无效,可以执行通过操纵 LIMIT 进行任意 SQL 查询

主动防御:准备好的语句

  • 不要仅仅依赖转义,考虑使用准备好的语句来防止意外的 SQL 执行。
  • 准备好的语句强制执行有效的服务器端 SQL 语法,降低已知和未知的风险

代码示例

以下是 PHP 中 mysql_escape_string() 和准备好的语句的比较:

// Escaping Method
$sql = sprintf("SELECT url FROM GrabbedURLs WHERE %s LIKE '%s%%' LIMIT %s",
               mysql_real_escape_string($argv[1]),
               mysql_real_escape_string($argv[2]),
               mysql_real_escape_string($argv[3]));

// Prepared Statement
$statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' .
                           'WHERE ' . $column . '=? ' .
                           'LIMIT ' . intval($limit));
$statement->execute(array($value));
登录后复制

准备好的语句,虽然实施时间稍长,但可以针对恶意 SQL 查询提供卓越的保护并降低代码复杂性。

以上是`mysql_real_escape_string()` 和 `mysql_escape_string()` 是否足以保护我的 Web 应用程序免受 SQL 注入?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板