短信现在似乎发不了包含网址的内容

回复列表(43|隐藏机器人聊天)
  • @Ta / 2024-12-26 / /

    @上善若水,我是被刷了9.53TB,它限制再高也不会有这么高吧。如果真这么高,那些跑PCDN刷下载流量的不如自己开个轻量服务器挂下载。

  • @Ta / 2024-12-26 / /

    @上善若水,它还真写的是不限流量……

    image.png(43.63 KB)

  • @Ta / 2024-12-26 / /

    @上善若水,我现在已经买了一个,等我把 file.winegame.net 的流量导过去,到时候再被刷看看阿里云作何反应

    20GB的系统盘用来做CDN缓存应该够用了。

    image.png(87.38 KB)

  • @Ta / 2024-12-27 / /

    @老虎会游泳

    只要连续点击5次 file.winegame.net 上的任意链接就会触发CDN超速。

    试了下,连下 10 次,都没触发限速?

    这个限速是服务器端实现的吗?没超速再跳转到实际链接(这个实际链接还是会被刷呀)?还是?

  • @Ta / 2024-12-27 / /

    @无名啊,cdn边缘节点会验证一个有效期30秒的key,如果key不正确就会跳转到acl.php进行获取。acl.php会输出加密js跳转到带key的下载地址,所以只有真正的浏览器能跳转到下载地址。还有,限速是10秒内5次,如果低于这个频率也不会触发。所以我说的是(10秒内)连续点击5次,而不是连续下载5次。

  • @Ta / 2024-12-27 / /

    @无名啊,我确实应该再添加一个下载次数限制。比如一小时内同一个文件下载次数不能超过5次之类的。不过判断方法得仔细想一想,要防止没下完重试的时候也被拒绝

    可能最好的方法是添加一个流量配额,如果某个IP消耗了多少流量,就不让它继续下载。

    对了,我还可以接入验证码,第二次下载同一个文件的时候直接要求输入验证码

  • @Ta / 2024-12-27 / /

    @老虎会游泳,阿里云的这个轻量云速度还挺快,不利用起来吗
    一加ace2Pro(灰|24+1024)

  • @Ta / 2024-12-27 / /

    @上善若水,我得写一个做cdn的nginx配置,把文件滚动缓存到本地,快满了就删掉老的。你有类似的配置文件吗?

  • @Ta / 2024-12-27 / /

    @老虎会游泳,让ai写一个。
    一加ace2Pro(灰|24+1024)

  • @Ta / 2024-12-27 / /

    @上善若水,嗯我在尝试

  • @Ta / 2024-12-27 / /

    @上善若水,我发现了一个好方法,我先用ossfs把阿里云对象存储挂载为本地路径,然后就可以直接把它设为nginx wwwroot了。
    https://github.com/aliyun/ossfs/blob/master/README-CN.md

  • @Ta / 2024-12-27 / /

    @老虎会游泳

    1. CDN 节点,能自定义验证手段吗?(相当于一个性能弱的服务器了?)还是只能由厂家提供?(如限速等)

    2. 拿到带 key 的地址后,30 秒内就能无限刷了?甚至交给多台设备去刷?

      acl.php会输出加密js跳转到带key的下载地址

    3. 好像小网盘做得挺好,地址用一次就失效,下载时限速,同 IP 也不能(同时)下两个。。

  • @Ta / 2024-12-27 / /

    @老虎会游泳,宝塔面板好像有插件可以直接挂载oss为本地文件。
    一加ace2Pro(灰|24+1024)

  • @Ta / 2024-12-27 / /

    @无名啊,阿里云CDN可以配EdgeScript自定义策略,我就是用它写了个签名验证规则:

    image.png(411.4 KB)

  • @Ta / 2024-12-30 / /

    nginx的话,宝塔选装 tengine 就可以在配置文件里编写lua代码实现相同的功能:

        location / {
          rewrite_by_lua_block {
    ---------------------------------------------------------------------------------
    local LUTRIS_ACL_KEY = '一个key'
    local ALLOW_UA_LIST = {'一个User-Agent正则表达式列表'}
    
    local function is_valid_key(key, url, ua)
        local t = ngx.time()
        local tMod = t - (t % 30)
    
        local signData = url .. LUTRIS_ACL_KEY .. tostring(tMod) .. ua
        local sign = ngx.md5(signData)
    
        return key == sign
    end
    
    local function is_allow_ua(ua)
        for _, allowUA in ipairs(ALLOW_UA_LIST) do
            if ngx.re.match(ua, allowUA) then
                return true
            end
        end
        return false
    end
    
    local ua = ngx.var.http_user_agent
    local key = ngx.var.arg_k
    local uri = ngx.var.uri
    
    if not is_allow_ua(ua) then
        if not is_valid_key(key, uri, ua) then
            local newUrl = 'https://hu60.cn/q.php/lutris.acl.html?u=' .. ngx.escape_uri(uri)
            return ngx.redirect(newUrl)
        end
    end
    ---------------------------------------------------------------------------------
          }
        }
    

    备注:这个 lua 规则是 Github Copilot 帮我从阿里云 EdgeScript 翻译过来的,它一次就写对了,真是方便。不过阿里云 EdgeScript 的语法就很怪了,AI没办法帮我生成(它虽然能看懂并能转换为其他语言,但不能正确生成 EdgeScript 代码),我当初写这个规则用了几个小时,因为总是有奇怪的小问题导致代码没办法继续运行(比如 $arg_k 这种写法在URL中不包含?k=xxx时会导致代码无法继续运行,必须用req_uri_arg('k')才能避免这种情况):

    LUTRIS_ACL_KEY = '一个key'
    ALLOW_UA_LIST = ['一个User-Agent正则表达式列表']
    
    def is_valid_key(key, url, ua) {
        t = now()
        tMod = sub(t, mod(t, 30))
    
        signData = concat(url, LUTRIS_ACL_KEY, tostring(tMod), ua)
        sign = md5(signData)
    
        return eq(key, sign)
    }
    
    def is_allow_ua(ua) {
        for _, allowUA in ALLOW_UA_LIST {
            if match_re(ua, allowUA) {
                return true
            }
        }
        return false
    }
    
    if not(is_allow_ua($http_user_agent)) {
        if not(is_valid_key(req_uri_arg('k'), $uri, $http_user_agent)) {
            newUrl = concat('https://hu60.cn/q.php/lutris.acl.html?u=', url_escape($uri))
            rewrite(newUrl, 'enhance_redirect')
        }
    }
    
  • @Ta / 2024-12-28 / /

    拿到带 key 的地址后,30 秒内就能无限刷了

    刷流量的人还没有那么饥渴,JS跳转就已经可以拦住他们了,key只是为了再增加一点难度让他们放弃我转投其他目标。

    还有,我有一些客户端必须能够直接下载到文件,所以我在代码里刻意排除了这些User-Agent。如果这个列表暴露了,其他人也可以伪造此类请求来绕过验证。所以我也没必要把key做的特别安全的样子……

  • @Ta / 2024-12-28 / /

    @老虎会游泳,能自定义验证方法,确实灵活很多。

    但简单瞄了下,只能验证单个请求,没法记录状态?(比如下载后该链接失效,记录下载用户累计流量等)

    狠一点儿,URL 里加上身份信息,有身份的宽松点,没身份的 100 KB/s。。再加上 IP 验证,防止多处机器同时刷。。

    另外,要是 00:29:59 请求 URL,00:30:00 再去下载,是不是就失效了?(tMod 变了)

  • @Ta / 2024-12-28 / /

    @无名啊要是 00:29:59 请求 URL,00:30:00 再去下载,是不是就失效了
    对,不过失效了会再跳转到 acl 页面请求一次key。
    至于进一步的身份验证和key使用数量限制,我准备以后再做,如果事态变得更严重我再做。

  • @Ta / 2024-12-28 / /

    @上善若水,我已经把 file.winegame.net 切到轻量云了,欢迎来测速:

    https://file.winegame.net/runners/wine/lutris-ge/wine-lutris-GE-Proton7-32-x86_64.tar.xz

  • @Ta / 2024-12-28 / /

    @老虎会游泳,达到一定量好像,会被限速到20Mbps。
    一加ace2Pro(灰|24+1024)

添加新回复
回复需要登录