V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
fqzz
V2EX  ›  问与答

网站日志有很多奇怪的请求,看起来没啥规律,禁用都不好禁

  •  
  •   fqzz · 341 天前 · 1353 次点击
    这是一个创建于 341 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请求里面包含随机字符串,没啥规律。也不像是在爆破。感觉像是纯粹在刷流量。

    [18/Dec/2023:07:49:54 +0800] 171.15.10.189 - 4 "http://mydomain.com/?0lhqk=bekbna.jsp" "GET http://mydomain.com/sm7y51c9.txt" 301 566 571 - "Mozilla/5.0 (Linux; Android 9; MI 9 Build/PKQ1.181121.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/84.0.2896.50 MQQBrowser/6.2 TBS/044704 Mobile Safari/537.36 V1_AND_SQ_8.0.8_1218_YYB_D QQ/8.0.8.4115 NetType/WIFI WebP/0.3.0 Pixel/1080 StatusBarHeight/110" "text/html"
    [18/Dec/2023:07:41:35 +0800] 10.179.80.163 - 292 "http://mydomain.com/?phmx1fz.txt" "GET http://mydomain.com/gye6cqh.xls" 301 571 574 - "Mozilla/5.0 (Linux; Android 7.0;) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36 (compatible; PetalBot;+https://webmaster.petalsearch.com/site/petalbot)" "text/html"
    [18/Dec/2023:07:01:37 +0800] 223.72.15.8 - 0 "http://mydomain.com/?id8s6jy/dx2k4p.jsp" "GET http://mydomain.com/xef9kfe.asp" 301 527 572 - "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/606.2.35 (KHTML, like Gecko) Mobile/15E148 QQ/8.0.8.458 V1_IPH_SQ_8.0.8_1_APP_A Pixel/1242 Core/WKWebView Device/Apple(iPhone XS) NetType/WIFI QBWebViewType/1 WKType/1" "text/html"
    [18/Dec/2023:07:25:31 +0800] 120.245.61.24 - 0 "http://mydomain.com/?92pqf=te9cad.tacc" "GET http://mydomain.com/scate18766.xml" 403 432 737 - "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/607.2.16 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1" "text/html; charset=utf-8"
    

    还有这中 UA 一致的,但是全都不一样。

    [18/Dec/2023:07:56:05 +0800] 223.72.66.120 - 0 "-" "GET http://mydomain.com/" 403 259 742 - "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36)" "text/html; charset=utf-8"
    

    有大佬知道这是干嘛吗?我的网站有没有被攻击的风险?

    13 条回复    2023-12-23 18:22:02 +08:00
    iyiluo
        1
    iyiluo  
       341 天前
    很多流量都是机器人刷的,只要端口开放就会有机器人来刷
    opengps
        2
    opengps  
       341 天前
    /sm7y51c9.txt /xef9kfe.asp 这种往往是验证自动渗透是否成功的,你要是担心可以去查查有没有多出来这种文件
    fqzz
        3
    fqzz  
    OP
       341 天前
    @iyiluo 嗯,应该就是机器刷的,我们用的是阿里云 CDN ,每天都会刷好多 G 的流量。想了几个方法封禁但是没啥效果。
    NewYear
        4
    NewYear  
       341 天前
    程序可以改代码的话可以自己设计一个机制,去分析这些垃圾请求,屏蔽 IP 。

    我的 Wordpress 用 php 就写了一些规则应对垃圾请求,流量大幅降低了(日志文件显著缩小),纯 PHP 实现分析和拦截,自动管理被封禁的 IP ,如果接入到 HTTP 服务器/面板,效果就更加显著了。

    要么你就开 5 秒盾吧,要不就做验证,方法很多,就看你的能力能实现哪部分。

    其实个人觉得,CDN 的防火墙应该是能拦截掉这些显著有问题的 IP ,但是人家不拦截,就耐人寻味了。
    tool2d
        5
    tool2d  
       341 天前
    特征那么明显的,果断写个程序,批量禁 IP 啊。
    googlefans
        6
    googlefans  
       341 天前
    @NewYear 解决方案能贴出来吗
    maxthon
        7
    maxthon  
       340 天前
    fail2ban 部署一个,超过一小时 N 个 4XX 就封 IP 一小时,封两次永封
    owen800q
        8
    owen800q  
       340 天前 via iPhone
    Jsp….
    raycheung
        9
    raycheung  
       340 天前 via iPhone
    会不会是需要配个 WAF 了
    NewYear
        10
    NewYear  
       340 天前
    @googlefans

    我写的是简单的,首先判断用户 IP 是否在 ip.txt ,如果在,直接报 404 ,输出 404

    然后判断一些用户的信息,比如 UA (空的,或者工具型的,比如 curl ,python ,java ),比如 URL (我是 php 程序,访问 asp 、jsp 的直接封),比如 POST (我用 Wordpress 嘛,后台登录页面只要给我 POST 的直接封),觉得可疑的就加入 ip.txt ,并设定一个期限。

    ip.txt 的格式是一个二维数组反序列化的文本,数组的一维是 IP ,二维是从列表中清理掉的时间,不修改列表的时候不序列化,要更改的时候再序列化。

    代码就不献丑了,不具备通用性,在几个位置做了修改……
    性能方面,每个动态页面请求会增加 0.3 毫秒,虽然性能是下降了,但也因此它是实时的,经常都是一堆请求发过来,但是第一个请求就被捕获了,所以反而节约了性能。
    googlefans
        11
    googlefans  
       336 天前
    @NewYear

    <?php
    // 加载 ip.txt 文件
    $ip_list = unserialize(file_get_contents('ip.txt'));

    // 获取用户 IP
    $user_ip = $_SERVER['REMOTE_ADDR'];

    // 判断用户 IP 是否在 ip.txt 中
    if (in_array($user_ip, $ip_list)) {
    // 如果在,直接报 404
    header("HTTP/1.0 404 Not Found");
    exit;
    }

    // 获取用户 UA
    $user_agent = $_SERVER['HTTP_USER_AGENT'];

    // 判断用户 UA 是否可疑
    if (empty($user_agent) || stristr($user_agent, 'curl') || stristr($user_agent, 'python') || stristr($user_agent, 'java')) {
    // 如果可疑,加入 ip.txt 并设定一个期限
    $ip_list[] = array($user_ip, time() + 3600);
    file_put_contents('ip.txt', serialize($ip_list));
    }

    // 获取用户 URL
    $request_uri = $_SERVER['REQUEST_URI'];

    // 判断用户 URL 是否可疑
    if (stristr($request_uri, '.asp') || stristr($request_uri, '.jsp')) {
    // 如果可疑,加入 ip.txt 并设定一个期限
    $ip_list[] = array($user_ip, time() + 3600);
    file_put_contents('ip.txt', serialize($ip_list));
    }

    // 判断用户是否正在 POST 请求
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // 如果正在 POST 请求,加入 ip.txt 并设定一个期限
    $ip_list[] = array($user_ip, time() + 3600);
    file_put_contents('ip.txt', serialize($ip_list));
    }

    这个怎么样?
    NewYear
        12
    NewYear  
       336 天前
    @googlefans 可以的,这个是 GPT 生成的吧,可以按想法自己调整。果然还是 GPT 时代好啊,写东西省心很多了,哈哈哈。
    googlefans
        13
    googlefans  
       335 天前
    @NewYear 一眼就被你看出来了...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2757 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:39 · PVG 17:39 · LAX 01:39 · JFK 04:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.