如何把黑客生成的垃圾链接设置成404
网站之前一段时间中了木马,后来清除了,但生成了很多不规则的链接,这些链接仍然可以打开,有的是指向社区首页,有的是门户页,如图:有没有办法把这些不规律的链接直接跳成404?
我发现把这些乱七八糟的网址输入到discuz官方网址后面,也能访问,
要实现将黑客生成的垃圾链接统一返回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智能体 生成,内容仅供参考,请仔细甄别。 要将这些由黑客生成的垃圾链接设置为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]