Commit Graph
13 Commits
Author SHA1 Message Date
tim c5ce7661f5 Limit failed logins.
At most 5 per username and address, 20 per address and 50 per username
in 15 minutes.
2026-09-25 21:46:38 +02:00
tim d8c05e82b1 Make the session cookie last until the browser closes.
The lifetime was a timestamp, so the cookie expired in about 56 years.
2026-09-25 21:42:56 +02:00
tim ee20dc6eda Store persistent-login keys as SHA-256 hashes.
Each device now has its own row. Editors must log in again once after
deploying.
2026-09-25 21:42:34 +02:00
tim dfa6d71198 Hash editor passwords with Argon2id and upgrade old hashes.
Old hashes are replaced at login. Widen the column before deploying:

  ALTER TABLE editors MODIFY password VARCHAR(255) NOT NULL;
2026-09-25 21:41:36 +02:00
tim 15ad07423a Match usernames and session keys with = instead of LIKE.
A username of "%" matched the first editor.
2026-09-25 21:39:25 +02:00
tim 36c7fe97c5 Give editors a new session id when they log in. 2026-09-25 21:39:06 +02:00
tim 41c46a43c6 Add CSRF protection to every form that changes data.
The logout link carries the token too, and the cookies get SameSite=Lax.
2026-09-25 21:38:22 +02:00
tim f6bdf10228 Escape request and database values in forms and links.
Add form_value() in html.lib.php.
2026-09-25 21:36:27 +02:00
tim c85f54116c Use bound parameters for every query that takes user data.
The queue image query took $id without quotes or a check, which allowed
SQL injection.
2026-09-25 21:29:09 +02:00
tim 00829a0c0d Port the code to PHP 8.5.
Replace the short open tags and the removed functions (mcrypt, mysql_error,
salt-less crypt). Decode the reCAPTCHA reply as JSON, turn off mysqli
exceptions, drop stripslashes(), and default missing input values.
Fix the misplaced continue in prune_images().
2026-09-25 21:18:58 +02:00
tim 3b8f5e6599 Fix some layout problems, and caching issues. 2015-11-22 01:43:29 +02:00
tim a00c1b4c9d Fix some issues with secure cookies being overwritten by insecure site.
Now, /publish/{edit,addeditor,login,logout} must be accessed via
https://; other pages should not be (but can be).
2014-04-24 09:56:25 +02:00
tim 7fc40728f5 Initial commit. 2013-05-17 23:38:44 +02:00