all repos — cgit @ 82856923bffaac3ac88a90a797ddb33dcee8635a

a hyperfast web frontend for git written in c

auth-filters: use crypt() in simple-authentication

There's no use in giving a silly example to folks who will just copy it,
so instead try to do something slightly better.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Jason A. Donenfeld Jason@zx2c4.com
Sun, 15 Jul 2018 04:18:03 +0200
commit

82856923bffaac3ac88a90a797ddb33dcee8635a

parent

b73df8098f261ecbd4bc5ba689f9766a1a75f9a0

1 files changed, 6 insertions(+), 13 deletions(-)

jump to
M filters/simple-authentication.luafilters/simple-authentication.lua

@@ -23,17 +23,11 @@ glouglou = { laurent = true, jason = true },

qt = { jason = true, bob = true } } --- Please note that, in production, you'll want to replace this simple lookup --- table with either a table of salted and hashed passwords (using something --- smart like scrypt), or replace this table lookup with an external support, --- such as consulting your system's pam / shadow system, or an external --- database, or an external validating web service. For testing, or for --- extremely low-security usage, you may be able, however, to get away with --- compromising on hardcoding the passwords in cleartext, as we have done here. +-- A list of users and hashes, generated with `mkpasswd -m sha-512 -R 300000`. local users = { - jason = "secretpassword", - laurent = "s3cr3t", - bob = "ilikelua" + jason = "$6$rounds=300000$YYJct3n/o.ruYK$HhpSeuCuW1fJkpvMZOZzVizeLsBKcGA/aF2UPuV5v60JyH2MVSG6P511UMTj2F3H75.IT2HIlnvXzNb60FcZH1", + laurent = "$6$rounds=300000$dP0KNHwYb3JKigT$pN/LG7rWxQ4HniFtx5wKyJXBJUKP7R01zTNZ0qSK/aivw8ywGAOdfYiIQFqFhZFtVGvr11/7an.nesvm8iJUi.", + bob = "$6$rounds=300000$jCLCCt6LUpTz$PI1vvd1yaVYcCzqH8QAJFcJ60b6W/6sjcOsU7mAkNo7IE8FRGW1vkjF8I/T5jt/auv5ODLb1L4S2s.CAyZyUC" } -- Set this to a path this script can write to for storing a persistent

@@ -48,7 +42,7 @@ --

-- Sets HTTP cookie headers based on post and sets up redirection. function authenticate_post() - local password = users[post["username"]] + local hash = users[post["username"]] local redirect = validate_value("redirect", post["redirect"]) if redirect == nil then

@@ -58,8 +52,7 @@ end

redirect_to(redirect) - -- Lua hashes strings, so these comparisons are time invariant. - if password == nil or password ~= post["password"] then + if hash == nil or hash ~= unistd.crypt(post["password"], hash) then set_cookie("cgitauth", "") else -- One week expiration time