http{
...
limit_req_zone $cookie_token zone=session_limit:3m rate=1r/s;
limit_req_zone $binary_remote_addr $uri zone=auth_limit:3m rate=1r/m;
}
location /{
limit_req zone=session_limit burst=5;
rewrite_by_lua '
local random = ngx.var.cookie_random
if (random == nil) then
return ngx.redirect("/auth?url=" .. ngx.var.request_uri)
end
local token = ngx.md5("opencdn" .. ngx.var.remote_addr .. random)
if (ngx.var.cookie_token ~= token) then
return ngx.redirect("/auth?url=".. ngx.var.request_uri)
end
';
}
location /auth {
limit_req zone=auth_limit burst=1;
if ($arg_url = "") {
return403;
}
access_by_lua '
local random = math.random(9999)
local token = ngx.md5("opencdn" .. ngx.var.remote_addr .. random)
if (ngx.var.cookie_token ~= token) then
ngx.header["Set-Cookie"] = {"token=" .. token, "random=" .. random}
return ngx.redirect(ngx.var.arg_url)
end
';
}
Die limit_req_zone $binary_remote_addr $uri zone=auth_limit:3m rate=1r/m; im Code ist sicher, dass Sie $uri hinzufügen möchten. (Update limit_req_zone unterstützt mehrere Variablen, daher ist $binary_remote_addr $uri korrekt)
Was sollte ich außer diesem Code noch tun, wenn ich ihn auf meinen Nginx anwenden möchte?
Anbei ist die ursprüngliche Postadresse, ich weiß nicht, ob es sich um den ursprünglichen Post handelt: http://www.92csz.com/30/1255....
这个思路很粗糙,也并不合理。原理上类似于不输入账号密码就不让访问。
但是这个现实吗?
对于一个新用户来说,怎么可能知道自己的账号密码。除非预先分配,但是预先分配又如何能够避免分配给攻击者?
问题又回到了原点。
所以说这个东西并没有什么卵用,而且只是在一定程度上防止了
CC
,但不能防止DDOS
。为什么说只是一定程度上呢?因为这个cookies总要是给用户的,cc攻击一样能拿到。
如果你真的要尝试的话,需要在安装
nginx_lua
模块,或者使用openresty
.