哥斯拉 发表于 2020-12-3 14:18:45

如何把黑客生成的垃圾链接设置成404

网站之前一段时间中了木马,后来清除了,但生成了很多不规则的链接,这些链接仍然可以打开,有的是指向社区首页,有的是门户页,如图:


有没有办法把这些不规律的链接直接跳成404?
我发现把这些乱七八糟的网址输入到discuz官方网址后面,也能访问,

Discuz智能体 发表于 2025-3-14 09:21:27

要实现将黑客生成的垃圾链接统一返回404状态码,可以采取以下技术方案:

1. 服务器层面拦截方案(推荐)
=== Apache环境 ===
在.htaccess文件中添加:
<IfModule mod_rewrite.c>
RewriteEngine On
# 拦截异常参数特征
RewriteCond %{QUERY_STRING} \.php\/{10,}
RewriteCond %{QUERY_STRING} (eval|base64_encode|cmd)
RewriteRule ^(.*)$ -

# 拦截异常路径
RewriteCond %{REQUEST_URI} \/(data|images)\/{32}\.html$
RewriteRule .* -
</IfModule>

=== Nginx环境 ===
在server配置块中添加:
location ~* \.(php|html)/{16,} {
    return 404;
}

location ~* (eval|base64_encode|cmd) {
    return 404;
}

if ($query_string ~* "\.php\/{10,}") {
    return 404;
}

2. Discuz核心拦截方案
在/source/class/discuz/discuz_application.php约第188行后插入:

// 检测异常URL参数
$attack_patterns = array(
    '/\/{32}\.html/i',
    '/\/(data|images|static)\/{16,}/i',
    '/(cmd|wget|curl|uname|phpinfo)/i'
);

foreach($_GET as $key => $value){
    foreach($attack_patterns as $pattern){
      if(preg_match($pattern, $value) || preg_match($pattern, $key)){
            header('HTTP/1.1 404 Not Found');
            exit();
      }
    }
}

3. 伪静态规则增强
修改伪静态规则文件,在原有规则前增加拦截规则:

=== Apache示例 ===
# 拦截非法后缀
RewriteRule ^(forum|portal).+\.(exe|dll|sh)$ -

# 拦截异常参数结构
RewriteCond %{QUERY_STRING} ^(.{50,})$
RewriteRule ^(forum|portal)\.php$ -

4. 文件监控方案
创建/source/function/url_scan.func.php:

<?php
if(!defined('IN_DISCUZ')) exit('Access Denied');

function check_url_attack() {
    $uri = $_SERVER['REQUEST_URI'];
   
    // 检测URL长度超过200字符
    if(strlen($uri) > 200) {
      dheader('HTTP/1.1 404 Not Found');
      exit();
    }
   
    // 检测连续重复字符
    if(preg_match('/(\w)\1{8}/', $uri)) {
      dheader('HTTP/1.1 404 Not Found');
      exit();
    }
   
    // 检测非常用参数名
    $valid_params = array('mod','tid','fid','page','id');
    foreach($_GET as $key => $val){
      if(!in_array($key, $valid_params) && !preg_match('/^{1,8}$/', $key)){
            dheader('HTTP/1.1 404 Not Found');
            exit();
      }
    }
}

在全局入口文件(forum.php/portal.php等)顶部添加:
require_once './source/function/url_scan.func.php';
check_url_attack();

5. 安全加固建议
- 检查data目录权限是否为755
- 删除非必要安装文件(install/index.php)
- 更新UCenter通信密钥
- 检查第三方插件目录是否存在异常文件
- 开启Discuz内置的防火墙功能

以上方案实施后,可通过以下方式验证效果:
# 测试异常URL
curl -I "http://yoursite.com/forum.php?hjkgfdswert34567"
# 应返回HTTP/1.1 404 Not Found

# 检测长URL
curl -I "http://yoursite.com/portal.php?abcdefghijklmnopqrstuvwxyz"
# 应触发404响应

注:建议在修改前备份网站数据,并在测试环境中验证规则有效性。如遇到规则冲突,可根据实际URL结构调整正则表达式参数阈值。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。

Discuz智能体 发表于 2025-3-18 03:21:13

要将这些由黑客生成的垃圾链接设置为404错误页面,你可以通过以下几种方法来实现:

### 方法一:通过.htaccess文件设置重定向
如果你的网站运行在Apache服务器上,你可以通过修改`.htaccess`文件来实现将特定模式的URL重定向到404页面。

1. **编辑.htaccess文件**:
   打开你的网站根目录下的`.htaccess`文件(如果没有,可以创建一个)。

2. **添加重定向规则**:
   假设这些垃圾链接的URL模式是`/random-string`或`/random-string/`,你可以在`.htaccess`文件中添加以下规则:

   RewriteEngine On
   RewriteCond %{REQUEST_URI} ^/random-string/?$
   RewriteRule .* -

   这里的`random-string`是垃圾链接中的随机字符串部分。你可以根据实际情况调整正则表达式来匹配更多的垃圾链接。

3. **保存并测试**:
   保存`.htaccess`文件后,访问这些垃圾链接,应该会返回404错误。

### 方法二:通过Discuz插件或自定义代码实现
如果你不想修改服务器配置文件,可以通过Discuz插件或自定义代码来实现。

1. **使用插件**:
   你可以在DZ插件网(https://www.dz-x.net/)上寻找相关的插件,或者自己开发一个插件来拦截这些垃圾链接并返回404。

2. **自定义代码**:
   你可以在Discuz的全局文件(如`source/class/discuz/discuz_application.php`)中添加自定义代码来检测这些垃圾链接并返回404。

   例如,在`discuz_application.php`的`init()`方法中添加以下代码:

   $requestUri = $_SERVER['REQUEST_URI'];
   if (preg_match('/\/random-string\/?$/', $requestUri)) {
       header("HTTP/1.0 404 Not Found");
       exit;
   }

   这段代码会检测请求的URL是否匹配垃圾链接的模式,如果匹配则返回404错误。

### 方法三:通过Nginx配置(如果使用Nginx)
如果你的网站运行在Nginx服务器上,你可以通过修改Nginx配置文件来实现。

1. **编辑Nginx配置文件**:
   打开你的Nginx配置文件(通常位于`/etc/nginx/nginx.conf`或`/etc/nginx/sites-available/default`)。

2. **添加重定向规则**:
   在`server`块中添加以下规则:

   location ~ ^/random-string/?$ {
       return 404;
   }

   这里的`random-string`是垃圾链接中的随机字符串部分。你可以根据实际情况调整正则表达式来匹配更多的垃圾链接。

3. **重启Nginx**:
   保存配置文件后,重启Nginx服务器以使更改生效:

   sudo systemctl restart nginx

### 方法四:通过Discuz后台设置
如果你不想修改代码或服务器配置,可以通过Discuz后台的URL重写功能来实现。

1. **进入Discuz后台**:
   登录Discuz后台,进入“全局” -> “SEO设置” -> “URL 静态化”。

2. **添加自定义规则**:
   在“自定义规则”中添加一条规则,将垃圾链接重定向到404页面。例如:

   ^random-string/?$ 404

3. **保存并测试**:
   保存设置后,访问这些垃圾链接,应该会返回404错误。

### 总结
通过以上方法,你可以有效地将这些垃圾链接设置为404错误页面,从而避免它们对网站的影响。如果你对服务器配置或代码修改不熟悉,建议使用Discuz后台的URL重写功能或寻找相关插件来实现。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 如何把黑客生成的垃圾链接设置成404