原文链接

nginx 抵御 cc 类攻击的一些小技巧

最简易

通过 cookie 识别访问者身份结合 302 来抵御 CC 攻击,在 location 段加入以下代码:

if ($cookie_say != "isuike"){
    add_header Set-Cookie "say=isuike";
    rewrite .* "$scheme://$host$uri" redirect;
}

简易增强

如果 cc 带了 cookie,那么可以加上用户 ip 的识别并写入到 cookie 验证中,结合 302,在 location 段加入以下代码:

if ($cookie_say != "isuike$remote_addr"){
    add_header Set-Cookie "say=isuike$remote_addr";
    rewrite .* "$scheme://$host$uri" redirect;
}

理论上的完美版

用 salt 加散列,这里需要 nginx_lua 模块,同样,加入以下代码:

rewrite_by_lua '
    local say = ngx.md5("isuike" .. ngx.var.remote_addr)
    if (ngx.var.cookie_say ~= say) then
        ngx.header["Set-Cookie"] = "say=" .. say
        return ngx.redirect(ngx.var.scheme .. "://" .. ngx.var.host .. ngx.var.uri)
    end
';

 

这些方法可以解决过 CDN,无法识别 ip 访问频率等因素导致的攻击识别困难的 CC 类攻击防御

点击数:79


(´,,•ω•,,‘)