cgit

commit 82856923bffaac3ac88a90a797ddb33dcee8635a

Author: Jason A. Donenfeld <Jason@zx2c4.com>

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>

 filters/simple-authentication.lua | 19 ++++++-------------


diff --git a/filters/simple-authentication.lua b/filters/simple-authentication.lua
index bf356324e2b00865d727cb3e9065b094286c0a73..77d1fd061f2df0ebbf19cf3153022a17fae1a794 100644
--- a/filters/simple-authentication.lua
+++ b/filters/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