fix: login u Web GUI izbacivao van panela + nginx rate limit prenizak
1) Nakon uspjesnog logina redirect je isao na sirovi 'next' parametar. 'next' dolazi iz request.path, dakle bez SCRIPT_NAME prefiksa, pa je /guacadmin/login?next=/ nakon prijave vodio na / -> /guacamole/. Korisnik bi se prijavio i zavrsio na Guacamole login ekranu umjesto na dashboardu. Sad se dodaje request.script_root, uz provjeru da je next relativna putanja (open-redirect). 2) limit_req_zone je bio rate=10r/m - deset zahtjeva po MINUTI. Guacamole je Angular SPA i na jedno otvaranje ispali desetke zahtjeva, pa je nginx redom vracao 503 na app.js, app.css, api/tokens i translations. Podignuto na 10r/s, burst 50. Brute-force i dalje pokrivaju basic auth + fail2ban. Provjereno: /guacadmin/ -> login -> /guacadmin/dashboard (200), svih osam GUI stranica 200, 40 paralelnih zahtjeva na Guacamole API sve 200. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+7
-1
@@ -169,7 +169,13 @@ def login():
|
||||
request.form.get('password') == cfg['password']):
|
||||
session.permanent = True
|
||||
session['logged_in'] = True
|
||||
return redirect(request.args.get('next') or url_for('dashboard'))
|
||||
# 'next' je PATH_INFO bez prefiksa; bez script_roota redirect
|
||||
# izlazi izvan GUI_PATH-a i korisnik zavrsi na Guacamole loginu.
|
||||
target = request.args.get('next') or ''
|
||||
if not target.startswith('/') or target.startswith('//'):
|
||||
target = ''
|
||||
return redirect(request.script_root + target if target
|
||||
else url_for('dashboard'))
|
||||
flash('Pogrešno korisničko ime ili lozinka', 'danger')
|
||||
return render_template('login.html')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user