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