Skip to content

Commit 01113a8

Browse files
author
chr0nzz
committed
return JSON error on CSRF failure for fetch requests (#37)
1 parent 39ee9d0 commit 01113a8

1 file changed

Lines changed: 9 additions & 0 deletions

File tree

app.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,8 +672,17 @@ def _check_csrf():
672672
expected = session.get('csrf_token', '')
673673
if not expected or not secrets.compare_digest(str(token), str(expected)):
674674
logger.warning(f"CSRF check failed from {request.remote_addr}")
675+
if request.headers.get('X-Requested-With') == 'fetch' or request.is_json:
676+
raise _CsrfError()
675677
abort(403)
676678

679+
class _CsrfError(Exception):
680+
pass
681+
682+
@app.errorhandler(_CsrfError)
683+
def _handle_csrf_error(e):
684+
return jsonify({'ok': False, 'message': 'Session expired - please refresh the page.'}), 403
685+
677686
def csrf_protect(f):
678687
@wraps(f)
679688
def decorated(*args, **kwargs):

0 commit comments

Comments
 (0)