PHP addslashes() 函数详解

目录

一、函数作用与基本语法

核心功能

转义规则

基本语法

二、典型应用场景

[1. 数据库查询准备(不推荐直接使用)](#1. 数据库查询准备(不推荐直接使用))

[2. 字符串安全处理](#2. 字符串安全处理)

[3. 配合 json_encode 使用](#3. 配合 json_encode 使用)

三、注意事项与限制

[1. 安全问题](#1. 安全问题)

[2. 字符编码问题](#2. 字符编码问题)

[3. 替代方案对比](#3. 替代方案对比)

四、实用示例与最佳实践

[1. 现代数据库操作(推荐方式)](#1. 现代数据库操作(推荐方式))

[3. 多层转义处理](#3. 多层转义处理)

[4. 与 stripslashes() 配合使用](#4. 与 stripslashes() 配合使用)


一、函数作用与基本语法

核心功能

addslashes() 是 PHP 中用于字符串转义的函数,主要功能是在特定字符前添加反斜线(\)进行转义,通常用于准备要存入数据库的字符串数据。

转义规则

  1. 单引号(')→ 转义为 '

  2. 双引号(")→ 转义为 "

  3. 反斜线(\)→ 转义为 \

  4. NULL 字符(\0)→ 转义为 \0

基本语法

php 复制代码
string addslashes ( string $str )

参数:$str - 要转义的字符串 返回值:返回转义后的字符串

二、典型应用场景

1. 数据库查询准备(不推荐直接使用)

php 复制代码
$name = "O'Reilly";
$safe_name = addslashes($name);
$sql = "INSERT INTO users (name) VALUES ('$safe_name')";
// 生成:INSERT INTO users (name) VALUES ('O\'Reilly')

2. 字符串安全处理

php 复制代码
$user_input = '"alert("XSS")"';
$safe_output = addslashes($user_input);
// 结果:\"alert(\"XSS\")\"

3. 配合 json_encode 使用

php 复制代码
$data = ["message" => "It's a \"test\""];
$json = addslashes(json_encode($data));
// 结果:{\"message\":\"It\'s a \\\"test\\\"\"}

三、注意事项与限制

1. 安全问题

  • 不适用于所有数据库:不同数据库系统有不同的转义要求

  • 不能防止SQL注入:应该使用预处理语句(PDO或mysqli)

  • 已被废弃的用法:不再需要用于 magic_quotes_gpc(PHP 5.4+已移除)

2. 字符编码问题

  • 仅处理ASCII字符,对多字节字符(如中文)可能产生问题

  • 建议先统一转换为UTF-8编码

3. 替代方案对比

场景 推荐方案 说明
数据库操作 PDO预处理 最安全的防注入方式
HTML输出 htmlspecialchars() 防止XSS攻击
JSON处理 json_encode() 自动处理转义

四、实用示例与最佳实践

1. 现代数据库操作(推荐方式)

php 复制代码
// 使用PDO预处理语句(不需要addslashes)
$pdo = new PDO($dsn, $user, $pass);
$stmt = $pdo->prepare("INSERT INTO table (column) VALUES (?)");
$stmt->execute([$unsafe_data]);

3. 多层转义处理

php 复制代码
$original = "It's a \"test\"";
$escaped = addslashes($original);  // 转义一次
$double_escaped = addslashes($escaped);  // 转义两次
​
echo $original;      // It's a "test"
echo $escaped;       // It\'s a \"test\"
echo $double_escaped; // It\\\'s a \\\"test\\\"

4. 与 stripslashes() 配合使用

php 复制代码
$data = "O'Reilly";
$escaped = addslashes($data);  // O\'Reilly
$original = stripslashes($escaped); // O'Reilly

备注 :在现代PHP开发中,应优先考虑使用预处理语句而不是addslashes()。该函数主要适用于遗留系统维护或特定场景下的简单转义需求。对于新项目,建议使用更安全的替代方案。

相关推荐
碳水加碳水1 天前
Java代码审计实战:XML外部实体注入(XXE)深度解析
java·安全·web安全·代码审计
yenggd1 天前
centos系统apache支持php配置
centos·php·apache
晓衣1 天前
2025“獬豸杯”全国电子数据取证竞赛-k8s服务器取证wp
服务器·经验分享·程序人生·网络安全·容器·kubernetes·学习方法
lingggggaaaa1 天前
小迪安全v2023学习笔记(七十九讲)—— 中间件安全&IIS&Apache&Tomcat&Nginx&CVE
笔记·学习·安全·web安全·网络安全·中间件·apache
ytttr8731 天前
PHP中各种超全局变量使用的过程
开发语言·php
淮北4942 天前
计算机网络学习(七、网络安全)
学习·计算机网络·web安全
爱隐身的官人2 天前
新后端漏洞(上)- Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)
网络·安全·web安全·spel表达式注入命令执行
星马梦缘2 天前
计算机网络7 第七章 网络安全
网络·计算机网络·安全·web安全·非对称加密·对称加密
weixin_446260852 天前
探索网络安全的利器:theHarvester
安全·web安全
jieyu11192 天前
内网后渗透攻击--linux系统(权限维持)
网络安全·内网渗透