admin 发表于 2020-7-8 10:15:42

discuz新增 UCenter添加OnlyRemoteAddr属性

考虑到近期针对UCenter的密码穷举攻击增多,而UCenter默认接受代理IP的设置又让UCenter的密码错误次数超限锁定的安全策略无法正常生效。
本PR借鉴Discuz!X程序做法,为UCenter、UC_Client添加了OnlyRemoteAddr属性,在开启的情况下仅接受来自于TCP/IP协议栈的远程地址,保证密码错误次数超限锁定的安全策略正常生效。
由于此选项属于新功能(不破坏UC兼容性),因此是否合并还需综合考虑。
使用方法:按PR修改相关程序代码后,在UCenter配置文件(uc_server/data/config.inc.php)及uc_client/uc_client.php中添加以下代码即可开启。
define(<font color="rgb(221, 17, 68)">'UC_ONLYREMOTEADDR'</font>, true);
打开 uc_client/model/base.php 和 uc_server/model/base.php
找到
if($cip && strcasecmp($cip, 'unknown')) {       $this->onlineip = $cip;} elseif($xip && strcasecmp($xip, 'unknown')) {       $this->onlineip = $xip;} elseif($rip && strcasecmp($rip, 'unknown')) {       $this->onlineip = $rip;} elseif($srip && strcasecmp($srip, 'unknown')) {       $this->onlineip = $srip;}替换为 if (defined('UC_ONLYREMOTEADDR') && constant('UC_ONLYREMOTEADDR')==true) {      $this->onlineip = $srip;} else {      if($cip && strcasecmp($cip, 'unknown')) {         $this->onlineip = $cip;      } elseif($xip && strcasecmp($xip, 'unknown')) {         $this->onlineip = $xip;      } elseif($rip && strcasecmp($rip, 'unknown')) {         $this->onlineip = $rip;      } elseif($srip && strcasecmp($srip, 'unknown')) {         $this->onlineip = $srip;      }}

Discuz智能体 发表于 2025-3-17 01:55:05

为了增强UCenter的安全性,防止密码穷举攻击,您可以通过添加`OnlyRemoteAddr`属性来限制UCenter仅接受来自TCP/IP协议栈的远程地址。这样可以确保密码错误次数超限锁定的安全策略能够正常生效。以下是具体的实现步骤:

### 1. 修改UCenter配置文件
在UCenter的配置文件`uc_server/data/config.inc.php`中添加以下代码:

define('UC_ONLYREMOTEADDR', true);

### 2. 修改UC_Client配置文件
在`uc_client/uc_client.php`中添加以下代码:

define('UC_ONLYREMOTEADDR', true);

### 3. 修改`uc_client/model/base.php`文件
打开`uc_client/model/base.php`文件,找到以下代码:

if($cip && strcasecmp($cip, 'unknown')) {
    $this->onlineip = $cip;
} elseif($xip && strcasecmp($xip, 'unknown')) {
    $this->onlineip = $xip;
} elseif($rip && strcasecmp($rip, 'unknown')) {
    $this->onlineip = $rip;
} elseif($srip && strcasecmp($srip, 'unknown')) {
    $this->onlineip = $srip;
}

将其替换为:

if (defined('UC_ONLYREMOTEADDR') && constant('UC_ONLYREMOTEADDR') == true) {
    $this->onlineip = $srip;
} else {
    if($cip && strcasecmp($cip, 'unknown')) {
      $this->onlineip = $cip;
    } elseif($xip && strcasecmp($xip, 'unknown')) {
      $this->onlineip = $xip;
    } elseif($rip && strcasecmp($rip, 'unknown')) {
      $this->onlineip = $rip;
    } elseif($srip && strcasecmp($srip, 'unknown')) {
      $this->onlineip = $srip;
    }
}

### 4. 修改`uc_server/model/base.php`文件
打开`uc_server/model/base.php`文件,找到以下代码:

if($cip && strcasecmp($cip, 'unknown')) {
    $this->onlineip = $cip;
} elseif($xip && strcasecmp($xip, 'unknown')) {
    $this->onlineip = $xip;
} elseif($rip && strcasecmp($rip, 'unknown')) {
    $this->onlineip = $rip;
} elseif($srip && strcasecmp($srip, 'unknown')) {
    $this->onlineip = $srip;
}

将其替换为:

if (defined('UC_ONLYREMOTEADDR') && constant('UC_ONLYREMOTEADDR') == true) {
    $this->onlineip = $srip;
} else {
    if($cip && strcasecmp($cip, 'unknown')) {
      $this->onlineip = $cip;
    } elseif($xip && strcasecmp($xip, 'unknown')) {
      $this->onlineip = $xip;
    } elseif($rip && strcasecmp($rip, 'unknown')) {
      $this->onlineip = $rip;
    } elseif($srip && strcasecmp($srip, 'unknown')) {
      $this->onlineip = $srip;
    }
}

### 5. 保存并测试
完成上述修改后,保存文件并测试UCenter的功能,确保一切正常。

### 注意事项
- 该修改不会破坏UCenter的兼容性,但建议在修改前备份相关文件,以防出现问题。
- 如果您的站点使用了CDN或其他代理服务,开启`OnlyRemoteAddr`可能会导致部分功能异常,请根据实际情况进行调整。

通过以上步骤,您可以有效增强UCenter的安全性,防止密码穷举攻击。如果您有其他问题或需要进一步的帮助,请随时联系DZ插件网的技术支持团队。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。

Discuz智能体 发表于 2025-3-20 12:00:03

为了增强UCenter的安全性,防止密码穷举攻击,您可以通过添加`OnlyRemoteAddr`属性来限制UCenter仅接受来自TCP/IP协议栈的远程地址。这样可以确保密码错误次数超限锁定的安全策略能够正常生效。以下是具体的实现步骤:

### 1. 修改UCenter配置文件
在UCenter的配置文件`uc_server/data/config.inc.php`中添加以下代码:

define('UC_ONLYREMOTEADDR', true);

### 2. 修改UC_Client配置文件
在`uc_client/uc_client.php`中添加以下代码:

define('UC_ONLYREMOTEADDR', true);

### 3. 修改`uc_client/model/base.php`和`uc_server/model/base.php`
在这两个文件中找到以下代码:

if($cip && strcasecmp($cip, 'unknown')) {
    $this->onlineip = $cip;
} elseif($xip && strcasecmp($xip, 'unknown')) {
    $this->onlineip = $xip;
} elseif($rip && strcasecmp($rip, 'unknown')) {
    $this->onlineip = $rip;
} elseif($srip && strcasecmp($srip, 'unknown')) {
    $this->onlineip = $srip;
}

将其替换为:

if (defined('UC_ONLYREMOTEADDR') && constant('UC_ONLYREMOTEADDR')==true) {
    $this->onlineip = $srip;
} else {
    if($cip && strcasecmp($cip, 'unknown')) {
      $this->onlineip = $cip;
    } elseif($xip && strcasecmp($xip, 'unknown')) {
      $this->onlineip = $xip;
    } elseif($rip && strcasecmp($rip, 'unknown')) {
      $this->onlineip = $rip;
    } elseif($srip && strcasecmp($srip, 'unknown')) {
      $this->onlineip = $srip;
    }
}

### 4. 解释代码逻辑
- `UC_ONLYREMOTEADDR`:这是一个常量,用于控制是否仅接受来自TCP/IP协议栈的远程地址。
- `$srip`:这是直接从TCP/IP协议栈获取的远程地址。
- 当`UC_ONLYREMOTEADDR`为`true`时,系统将仅使用`$srip`作为用户的IP地址,忽略其他可能的代理IP地址。

### 5. 注意事项
- 该修改不会破坏UCenter的兼容性,但建议在测试环境中先进行测试,确保无误后再应用到生产环境。
- 如果您的站点使用了CDN或其他代理服务,开启此选项可能会导致IP地址获取不准确,请根据实际情况决定是否开启。

### 6. 其他安全建议
除了上述修改,您还可以考虑以下安全措施:
- 定期更新UCenter和Discuz!到最新版本。
- 使用强密码策略,并启用双因素认证(2FA)。
- 定期检查服务器日志,监控异常登录行为。

通过以上步骤,您可以有效增强UCenter的安全性,防止密码穷举攻击。如果您有其他问题或需要进一步的帮助,请随时联系DZ插件网的技术支持团队。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: discuz新增 UCenter添加OnlyRemoteAddr属性