mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-08-30 14:52:51 +08:00
httpd/login: complete CSP + password autocomplete hint
Two hygiene fixes for the web UI, prompted by a login that appeared to fail under privacy shields (Brave Shields / NoScript-family extensions): - httpd: replace the partial "style-src 'self' 'unsafe-inline'" CSP with a complete, first-party policy (default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; form-action 'self'). Everything the UI needs is same-origin; the explicit policy stops shields injecting their own restrictive report-only probes (the noisy script-src-elem 'none' console spam) and passes a strict-CSP audit. Verified: no CSP violations in-browser. - login.html: add autocomplete="current-password" so password managers recognise the field (they showed "unknown password" without it). NOTE: these do NOT bypass a browser's LAN-device protection (NoScript "lan" / Brave Shields), which strips the POST body of requests to a LAN address and is why the login can fail in-browser while the same credentials work over curl. That is a deliberate browser security feature; the user must allow the site in their shields to log in. The backend password (default 1234) is unchanged and correct.
This commit is contained in:
+8
-1
@@ -699,7 +699,14 @@ void httpd_appcall(void)
|
||||
|
||||
slen = strtox(outbuf, "HTTP/1.1 200 OK\r\nContent-Type: ");
|
||||
slen += strtox(outbuf + slen, mime_strings[f_data[entry].mime]);
|
||||
slen += strtox(outbuf + slen, "; charset=UTF-8\r\nCache-Control: max-age=60, must-revalidate\r\nAccess-Control-Allow-Origin: *\r\nContent-Security-Policy: style-src 'self' 'unsafe-inline'\r\n\r\n");
|
||||
/* Complete, first-party CSP: everything the UI needs is same-origin
|
||||
* (scripts, styles, the SVG port icons, the /*.json fetches and the
|
||||
* login/cmd form POSTs). 'unsafe-inline' for script covers the inline
|
||||
* onclick handlers and the small inline <script> on login.html. An
|
||||
* explicit, complete policy stops privacy shields (Brave/NoScript)
|
||||
* from injecting their own restrictive report-only probes that made
|
||||
* the console noisy and could break the JS-driven pages. */
|
||||
slen += strtox(outbuf + slen, "; charset=UTF-8\r\nCache-Control: max-age=60, must-revalidate\r\nAccess-Control-Allow-Origin: *\r\nContent-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; form-action 'self'\r\n\r\n");
|
||||
|
||||
len_left = f_data[entry].len;
|
||||
if (len_left > (TCP_OUTBUF_SIZE - slen)) {
|
||||
|
||||
Reference in New Issue
Block a user