webdav+ext base.auth+var=error
Илья Шипицин
chipitsine at gmail.com
Mon Mar 23 12:09:48 UTC 2015
в общем nginx.conf (пути, чтобы Lua увидела файлы модулей):
lua_package_path '/xxx/?.lua';
lua_shared_dict sha1 10M;
lua_shared_dict a 10M;
init_by_lua '
require "base64"
sha1 = require "sha1"
ngx.shared.sha1:add("user","5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8")
';
ключевым в данном случае является объект "shared dictinary", в который
можно класть ключ-значение (этот объект разделяемый между всеми
worker-ами nginx).
в данном случае завели два объекта - sha1, в котором храним хеши
паролей. и "a", в котором будем хранить кешированные входы
пользователей (чтобы не вычислять хеши при каждом обращении к
страницам)
далее в нужном сайте делаем
access_by_lua_file 'xxx.lua';
следующего содержания
if ngx.req.get_headers()['Authorization'] then
local m = ngx.re.match(ngx.req.get_headers().authorization, 'Basic\\s(.+)')
if m and table.maxn(m) == 1 then
if not ngx.shared.a:get(m[1]) then
local u = ngx.re.match( from_base64(m[1]), '(.+):(.+)' )
if u and table.maxn(u) == 2 then
local s1 = ngx.shared.sha1:get(u[1])
if not s1 then
ngx.header['WWW-Authenticate'] = 'Basic realm="xxx"'
ngx.exit(ngx.HTTP_UNAUTHORIZED)
else
if s1 == sha1.sha1(u[2]) then
ngx.shared.a:add(m[1], 1)
return
else
ngx.header['WWW-Authenticate'] =
'Basic realm="xxx"'
ngx.exit(ngx.HTTP_UNAUTHORIZED)
end
end
end
else
return
end
end
else
ngx.header['WWW-Authenticate'] = 'Basic realm="xxx"'
ngx.exit(ngx.HTTP_UNAUTHORIZED)
end
т.е. при первой аутентификации пользователя, если она успешная,
кешируем ее в "a"
есть побочные эффекты, например, при изменении списка логинов-паролей
надо делать restart, а не reload.
еще можно устроить DoS, если завалить запросами с неправильными
паролями (чтобы нагрузить арифметичвеским вычислением хешей)
как иллюстрация - вполне.
21 марта 2015 г., 19:40 пользователь itcod <nginx-forum at nginx.us> написал:
> Илья спасибо! за наводку!
> если не затруднит киньте микро-пример...
> я полный чайник в луа..
> если на перл или js синтаксис похоже то разберусь:)
>
> Posted at Nginx Forum: http://forum.nginx.org/read.php?21,257511,257518#msg-257518
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
Подробная информация о списке рассылки nginx-ru