考虑到近期针对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;
- }
- }
复制代码
|