PHP配合MySQL防止SQL注入实战

需积分: 12 1 下载量 107 浏览量 更新于2024-09-11 收藏 878B TXT 举报
"MySQL防注入是保护网站免受恶意SQL注入攻击的重要措施。本文提供了一个简单的PHP示例,展示了如何结合MySQL进行防注入处理。" 在Web开发中,MySQL注入是一种常见的安全漏洞,允许攻击者通过输入恶意SQL代码来操控数据库。这种攻击可能导致数据泄露、数据篡改甚至整个系统的瘫痪。为了防止此类攻击,开发者需要确保所有的用户输入都经过适当的验证和清理。 此PHP代码片段展示了如何在与MySQL交互时进行防注入操作。首先,它包含了配置文件`config/config.php`,通常这会包含数据库连接信息(如DB_HOST、DB_USER、DB_PASSWORD和DB_NAME)。然后,它使用`mysql_connect()`函数建立到MySQL服务器的连接,并使用`mysql_select_db()`选择要操作的数据库。`mysql_query('SET NAMES UTF8')`设置字符编码为UTF8,确保数据正确显示。 接下来,它获取`$_REQUEST['member_id']`中的用户输入,并使用`trim()`函数去除两侧的空白字符。为了验证用户输入,`!is_numeric($member_id)`检查`member_id`是否为数字,如果不是,将返回错误信息并退出程序。 关键的防注入部分在于`_CheckAndQuote()`函数。这个自定义函数首先检查输入值是否为整数或浮点数,如果是,直接返回原值。否则,它使用`mysql_real_escape_string()`函数对输入值进行转义,防止SQL注入。转义函数会替换特殊字符(如单引号、双引号、反斜杠等)以避免它们被解释为SQL语句的一部分。然后,值被包裹在单引号中,准备插入到SQL查询中。 在SQL查询构造时,`_CheckAndQuote()`函数被用于`$member_id`,确保它安全地插入到查询语句中。`SELECT name FROM sdb_members WHERE member_id = _CheckAndQuote($member_id)`这样的查询可以防止直接的SQL注入攻击,因为`_CheckAndQuote()`已经处理了可能的恶意输入。 最后,`mysql_query()`执行SQL查询,如果查询成功,使用`mysql_fetch_row()`遍历结果集并打印数据;如果查询失败,输出错误信息。 尽管本示例展示了基本的防注入方法,但需要注意的是,`mysql_*`系列函数已过时,推荐使用`mysqli`或`PDO`扩展,它们提供了更好的安全性和性能。同时,应尽可能使用参数化查询或预处理语句,这些方法可以更有效地防止SQL注入。 防止MySQL注入是Web开发中不可或缺的安全实践,需要对所有用户输入进行验证和清理,以确保系统的安全性。