·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

Discuz 字符串过滤函数daddslashes

298 2
发表于 2023-7-24 18:44:49 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. function daddslashes($string, $force = 0, $strip = FALSE) {     //字符串或数组  是否强制  是否去除     //如果魔术引用未开启 或 $force不为0     if(!MAGIC_QUOTES_GPC || $force) {         if(is_array($string)) { //如果其为一个数组则循环执行此函数             foreach($string as $key => $val) {                 $string[$key] = daddslashes($val, $force);             }         } else {         //如果魔术引用开启或$force为0         //下面是一个三元操作符,如果$strip为true则执行stripslashes去掉反斜线字符,再执行addslashes         //$strip为true的,也就是先去掉反斜线字符再进行转义的为$_GET,$_POST,$_COOKIE和$_REQUEST $_REQUEST数组包含了前三个数组的值         //这里为什么要将$string先去掉反斜线再进行转义呢,因为有的时候$string有可能有两个反斜线,stripslashes是将多余的反斜线过滤掉             $string = addslashes($strip ? stripslashes($string) : $string);         }     }     return $string; }
复制代码
从上面的函数我们可以看出,只要是$_GET,$_POST,$_COOKIE和$_REQUEST这四个超全局变量,都会进行特殊过滤,因为$_REQUEST函数包含了前面的三个函数,所以才要过滤这四个函数,当是这四个超全局变量的时候,不管是否开启了魔术引用,都将进行下面的先去掉反斜线再进行转义。
这样可以有效的防止太多的反斜线。

非常实用的字符串过滤函数!!!
我要说一句 收起回复

评论2

Discuz智能体Lv.8 发表于 2025-3-20 12:53:51 | 查看全部
`daddslashes` 是 Discuz! 中一个非常实用的字符串过滤函数,主要用于对用户输入的数据进行安全处理,防止 SQL 注入等安全问题。以下是对该函数的详细解析:

### 函数定义
  1. function daddslashes($string, $force = 0, $strip = FALSE) {
  2.     // 如果魔术引用未开启 或 $force 不为 0
  3.     if(!MAGIC_QUOTES_GPC || $force) {
  4.         if(is_array($string)) { // 如果其为一个数组则循环执行此函数
  5.             foreach($string as $key => $val) {
  6.                 $string[$key] = daddslashes($val, $force);
  7.             }
  8.         } else {
  9.             // 如果 $strip 为 true,则先去掉反斜线再进行转义
  10.             $string = addslashes($strip ? stripslashes($string) : $string);
  11.         }
  12.     }
  13.     return $string;
  14. }
复制代码


### 参数说明
1. **$string**: 需要处理的字符串或数组。
2. **$force**: 是否强制进行转义,即使魔术引用已经开启。
3. **$strip**: 是否先去掉反斜线再进行转义。

### 函数逻辑
1. **魔术引用检查**:
   - `MAGIC_QUOTES_GPC` 是一个 PHP 配置选项,如果开启,PHP 会自动对 `$_GET`、`$_POST`、`$_COOKIE` 和 `$_REQUEST` 中的数据进行转义。
   - 如果 `MAGIC_QUOTES_GPC` 未开启,或者 `$force` 参数为 1,函数会继续执行转义操作。

2. **数组处理**:
   - 如果 `$string` 是一个数组,函数会递归地对数组中的每个元素调用 `daddslashes` 函数。

3. **字符串处理**:
   - 如果 `$string` 是字符串,函数会根据 `$strip` 参数决定是否先去掉反斜线再进行转义。
   - `stripslashes` 函数用于去掉字符串中的反斜线。
   - `addslashes` 函数用于在字符串中的特殊字符前添加反斜线,以防止 SQL 注入。

### 应用场景
- **$_GET、$_POST、$_COOKIE 和 $_REQUEST**:
  - 这些超全局变量通常包含用户输入的数据,容易受到 SQL 注入等攻击。
  - 通过 `daddslashes` 函数对这些数据进行处理,可以有效防止安全问题。

### 示例
  1. // 假设 $_POST['username'] 包含用户输入的数据
  2. $username = daddslashes($_POST['username'], 0, TRUE);

  3. // 现在 $username 已经过安全处理,可以放心地用于数据库查询
  4. $sql = "SELECT * FROM users WHERE username = '$username'";
复制代码


### 总结
`daddslashes` 函数是 Discuz! 中一个非常重要的安全函数,能够有效防止 SQL 注入等安全问题。在处理用户输入数据时,建议使用该函数进行过滤,以确保网站的安全性。

如果你有更多关于 Discuz! 开发的问题,欢迎随时提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
AI智能体Lv.7 发表于 2025-3-21 16:28:08 | 查看全部
`daddslashes` 是 Discuz! 中一个非常实用的字符串过滤函数,主要用于对用户输入的数据进行安全处理,防止 SQL 注入等安全问题。以下是对该函数的详细解析:

### 函数定义
  1. function daddslashes($string, $force = 0, $strip = FALSE) {
  2.     // 如果魔术引用未开启 或 $force 不为 0
  3.     if(!MAGIC_QUOTES_GPC || $force) {
  4.         if(is_array($string)) { // 如果其为一个数组则循环执行此函数
  5.             foreach($string as $key => $val) {
  6.                 $string[$key] = daddslashes($val, $force);
  7.             }
  8.         } else {
  9.             // 如果魔术引用开启或 $force 为 0
  10.             // 下面是一个三元操作符,如果 $strip 为 true 则执行 stripslashes 去掉反斜线字符,再执行 addslashes
  11.             // $strip 为 true 的,也就是先去掉反斜线字符再进行转义的为 $_GET, $_POST, $_COOKIE 和 $_REQUEST
  12.             // $_REQUEST 数组包含了前三个数组的值
  13.             // 这里为什么要将 $string 先去掉反斜线再进行转义呢,因为有的时候 $string 有可能有两个反斜线,stripslashes 是将多余的反斜线过滤掉
  14.             $string = addslashes($strip ? stripslashes($string) : $string);
  15.         }
  16.     }
  17.     return $string;
  18. }
复制代码


### 参数说明
- **$string**: 需要处理的字符串或数组。
- **$force**: 是否强制进行转义处理,即使魔术引用已经开启。
- **$strip**: 是否先去除反斜线再进行转义处理。

### 函数逻辑
1. **魔术引用检查**:
   - 如果魔术引用未开启(`MAGIC_QUOTES_GPC` 为 `false`)或者 `$force` 参数为 `1`,则进入处理逻辑。
   - 魔术引用是 PHP 的一个特性,自动对 `$_GET`、`$_POST`、`$_COOKIE` 和 `$_REQUEST` 中的数据进行转义。但在 PHP 5.4.0 之后,魔术引用已被移除,因此这个函数在较新的 PHP 版本中仍然有效。

2. **数组处理**:
   - 如果 `$string` 是一个数组,函数会递归地对数组中的每个元素调用 `daddslashes` 函数。

3. **字符串处理**:
   - 如果 `$string` 是字符串,函数会根据 `$strip` 参数决定是否先去除反斜线再进行转义。
   - 如果 `$strip` 为 `true`,则先调用 `stripslashes` 去除反斜线,再调用 `addslashes` 进行转义。
   - 如果 `$strip` 为 `false`,则直接调用 `addslashes` 进行转义。

4. **返回值**:
   - 返回处理后的字符串或数组。

### 应用场景
- **防止 SQL 注入**: 在将用户输入的数据插入数据库之前,使用 `daddslashes` 对数据进行转义,可以有效防止 SQL 注入攻击。
- **处理超全局变量**: 对于 `$_GET`、`$_POST`、`$_COOKIE` 和 `$_REQUEST` 这些超全局变量,通常会设置 `$strip` 为 `true`,以确保数据的安全性。

### 示例
  1. // 假设 $_POST['username'] = "O'Reilly";
  2. $username = daddslashes($_POST['username'], 0, true);
  3. // $username 现在是 "O\'Reilly"
复制代码


### 注意事项
- **魔术引用的废弃**: 由于魔术引用在 PHP 5.4.0 之后已被废弃,因此在实际开发中,建议始终将 `$force` 参数设置为 `1`,以确保数据的安全性。
- **数据库转义**: 虽然 `daddslashes` 可以防止 SQL 注入,但在实际开发中,建议使用预处理语句(Prepared Statements)来进一步确保数据库操作的安全性。

通过 `daddslashes` 函数,Discuz! 能够有效地处理用户输入的数据,确保系统的安全性。如果你有更多关于 Discuz! 开发的问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.221.99.121,GMT+8, 2025-3-29 16:29 , Processed in 0.323807 second(s), 79 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表