Skip to content
Snippets Groups Projects

Csrf prevention

Merged roarusko requested to merge backend-csrf into staging
8 files
+ 61
23
Compare changes
  • Side-by-side
  • Inline
Files
8
+ 35
0
from flask import session, request, Response
from uuid import uuid4
def checkCsrfToken():
"""Checks that a valid csrf token exists in requests that can alter data"""
# no csrf check needed for static requests
if request.endpoint == 'static':
return None
# check if a token exists in session
sessionToken = session.get('csrf')
# issue new one if not
if not sessionToken:
print("issuing new token")
return issueToken()
# no csrf check needed for get requests
if request.method == 'GET':
return None
# get token from request
headerToken = request.headers.get('x-csrf-token')
# check that the two tokens match
if headerToken != sessionToken:
return Response("Invalid csrf key", 403)
def issueToken():
"""Generates a new CSRF token and stores it for current session"""
# issue new if not
sessionToken = str(uuid4())
session['csrf'] = sessionToken
Loading