
Security News
Deno 2.2 Improves Dependency Management and Expands Node.js Compatibility
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
Simple Anti-CSRF Token implementation for Express applications.
This package only uses Node.js native crypto module and no other dependency. I did my best to follow OWASP CSRF token best practices. Now it's your responsibilty to follow best practices for session management. I do recommend you read this article before anything else.
Disclaimer: This package is still under development, I do NOT recommend using it for production yet.
npm:
npm install csrf-guard
yarn:
yarn add csrf-guard
GitHub:
git clone https://github.com/venomaze/csrf-guard.git
First register the middleware:
const express = require('express');
const session = require('session');
const CSRFGuard = require('csrf-guard');
const app = express();
// DO NOT USE SESSION LIKE THIS!
app.use(
session({
secret: 'secret_key',
})
);
app.use(
new CSRFGuard({
secret: 'secret_key', // Secret key is required
})
);
Then you have access to two getToken
and isTokenValid
methods from request object.
app.get('/', async (req, res) => {
const token = await req.getToken();
const form = `
<form action="/test" method="POST">
<input type="hidden" name="csrf_token" value="${token}" />
<input type="text" name="username" />
<input type="submit" />
</form>
`;
res.send(form);
});
app.post('/test', (req, res) => {
const isTokenValid = req.isTokenValid();
const message = isTokenValid ? 'The token is valid.' : 'Token is NOT valid.';
res.send(message);
});
We have to options, the first one is Synchronizer Token Pattern and the second one is HMAC Based Token Pattern. You can read more about them here.
To be able to use this method, you have to set synchronizer
to true
in options object. With this method you have access to forced
mode which generates a new token even if there is one already. This is the default method.
Setting up:
app.use(
new CSRFGuard({
secret: 'secret_key',
synchronizer: true,
})
);
Generating token:
const token = await req.getToken(true); // Forced is set to true. This way you'll get a new token per request. (Default to false)
To be able to use this method, you have to set synchronizer
to false
in options object. With this method you have access to expiryTime
option which gives you this possibility to expire tokens even if the session id isn't changed. By default, tokens won't be expired until the session is regenerated.
Setting up:
app.use(
new CSRFGuard({
secret: 'secret_key',
synchronizer: false,
expiryTime: 5000, // Tokens will be expired after 5 seconds
})
);
Generating token:
const token = req.getToken();
FAQs
Simple Anti-CSRF Token implementation for Express applications.
The npm package csrf-guard receives a total of 14 weekly downloads. As such, csrf-guard popularity was classified as not popular.
We found that csrf-guard demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
Security News
React's CRA deprecation announcement sparked community criticism over framework recommendations, leading to quick updates acknowledging build tools like Vite as valid alternatives.
Security News
Ransomware payment rates hit an all-time low in 2024 as law enforcement crackdowns, stronger defenses, and shifting policies make attacks riskier and less profitable.