Cross Site Request Forgery
This feature set is provided by the cbcsrf module.
Since version 2.4.x we have added the cbcsrf
module as a dependency of cbSecurity. Below is how you can use it:
Settings
Below are the settings you can use for this module. Remember you must create the cbcsrf
struct in your ColdBox.cfc
under the moduleSettings
structure:
Mixins
This module will add the following UDF mixins to handlers, interceptors, layouts and views:
csrfToken()
: To generate a token, using thedefault
or a custom keycsrfVerify()
: Verify a valid token or notcsrf()
: To generate a hidden field (csrf
) with the tokencsrfField()
: Generate a random token in a hidden form element and javascript that will refresh the page automatically when the token expirescsrfRotate()
: To wipe and rotate the tokens for the user
Here are the method signatures:
Mappings
The module also registers the following mapping in WireBox: @cbcsrf
so you can call our service model directly.
Automatic Token Expiration
By default, the module is configured to rotate all user csrf tokens every 30 minutes. This means that every token that gets created has a maximum life-span of {rotationTimeout}
minutes. If you do NOT want the tokens to EVER expire during the user's logged in session, then use the value of 0
zero.
It is recommended to rotate your keys often, in case your token get's compromised.
Token Rotation
We have provided several methods to rotate or clear out all of a user's tokens. If you are using cbAuth
as your module of choice for authentication, then we will listen to logins and logouts and rotate the keys for you if you have enabled the enableAuthTokenRotator
setting.
If you are NOT using cbAuth
then we recommend you leverage the csrfRotate()
mixin or the cbsrf.rotate()
method on the @cbsrf
model and do the manual rotation yourself.
Simple Example
Below is a simple example of manually verifying tokens in your handlers:
Automatic Token Verifier
We have included an interceptor that if loaded will verify all incoming requests to make sure the token has been passed or it will throw an exception.
The settings for this feature are:
You can also register an array of regular expressions that will be tested against the incoming event and if matched, it will allow the request through with no verification.
The verification process is as follows:
If we are doing an integration test, then skip verification
If the incoming HTTP Method is a
get,options or head
skip verificationIf the incoming event matches any of the
verifyExcludes
setting, then skip verificationIf the action is marked with a
skipCsrf
annotation, then skip verificationIf no
rc.csrf
exists and nox-csrf-token
header exists, throw aTokenNotFoundException
exceptionIf the token is invalid then throw a
TokenMismatchException
exception
Please note that this verifier will check the following locations for the token:
The request collection (
rc
) via thecbcsrf
keyThe request HTTP header (
x-csrf-token
) key
skipCsrf
Annotation
skipCsrf
AnnotationYou can also annotate your event handler actions with a skipCsrf
annotation and the verifier will also skip the verification process for those actions.
/cbcsrf/generate
Endpoint
/cbcsrf/generate
EndpointThis module also allows you to turn on the generation HTTP endpoint via the enableEndpoint
boolean setting. When turned on the module will register the following route: GET /cbcsrf/generate/:key?
. You can use this endpoint to generate tokens for your users via AJAX or UI only applications. Please note that you can pass an optional /:key
URL parameter that will generate the token for that specific key.
This endpoint should be secured, so we have annotated it with a secured
annotation so if you are using cbSecurity
or cbGuard
this endpoint will only be available to logged in users.
Last updated