UNPKG

@ordojs/security

Version:

Security package for OrdoJS with XSS, CSRF, and injection protection

127 lines 4.93 kB
/** * CSRF Protection Usage Example * Demonstrates how to use the CSRF protection system */ import { CSRFManager } from './csrf-manager'; // Example configuration const config = { secret: 'your-secret-key-here-should-be-random-and-secure', tokenExpiry: 60 * 60 * 1000, // 1 hour cookieName: '__csrf-token', headerName: 'X-CSRF-Token', fieldName: '_csrf', secureCookie: true, httpOnlyCookie: true, sameSite: 'strict' }; // Initialize CSRF manager const csrfManager = new CSRFManager(config); // Example 1: Session-based CSRF protection function sessionBasedExample() { console.log('=== Session-based CSRF Protection ==='); const sessionId = 'user-session-12345'; // Generate a token for the session const token = csrfManager.generateToken(sessionId); console.log('Generated token:', token.value); // Generate HTML form field const formField = csrfManager.generateFormField(sessionId); console.log('Form field HTML:', formField); // Validate the token const validationResult = csrfManager.validateToken(token.value, sessionId); console.log('Token validation:', validationResult); // Simulate a request with the token const request = { headers: { 'X-CSRF-Token': token.value }, sessionId }; const requestValidation = csrfManager.validateRequest(request); console.log('Request validation:', requestValidation); } // Example 2: Double-submit cookie pattern function doubleSubmitExample() { console.log('\n=== Double-Submit Cookie Pattern ==='); const sessionId = 'user-session-67890'; // Set up double-submit protection const response = csrfManager.setupDoubleSubmitProtection(sessionId); console.log('Response headers:', response.headers); console.log('Response cookies:', response.cookies); // Simulate a request with matching tokens const request = { headers: { 'X-CSRF-Token': response.headers['X-CSRF-Token'] || '' }, cookies: { '__csrf-token': response.cookies[0]?.value || '' } }; const validationResult = csrfManager.validateRequest(request); console.log('Double-submit validation:', validationResult); } // Example 3: Client-side integration function clientSideExample() { console.log('\n=== Client-side Integration ==='); // Generate client-side script const clientScript = csrfManager.generateClientScript('user-session-12345'); console.log('Client script length:', clientScript.length, 'characters'); console.log('Script includes form injection:', clientScript.includes('injectFormTokens')); console.log('Script includes AJAX interceptor:', clientScript.includes('setupAjaxInterceptor')); } // Example 4: Express.js middleware example function expressMiddlewareExample() { console.log('\n=== Express.js Middleware Example ==='); // This would be used in an Express.js application const csrfMiddleware = (req, res, next) => { // Skip CSRF protection for GET requests if (req.method === 'GET') { return next(); } // Extract session ID (from session middleware) const sessionId = req.session?.id || req.sessionID; if (!sessionId) { return res.status(403).json({ error: 'Session required' }); } // Create request object const csrfRequest = { headers: req.headers, body: req.body, cookies: req.cookies, sessionId }; // Validate CSRF protection const validation = csrfManager.validateRequest(csrfRequest); if (!validation.valid) { return res.status(403).json({ error: 'CSRF validation failed', message: validation.error }); } next(); }; console.log('Express middleware created'); console.log('Usage: app.use(csrfMiddleware)'); } // Example 5: Statistics and monitoring function statisticsExample() { console.log('\n=== Statistics and Monitoring ==='); // Generate some tokens for different sessions csrfManager.generateToken('session-1'); csrfManager.generateToken('session-1'); csrfManager.generateToken('session-2'); const stats = csrfManager.getStats(); console.log('CSRF Statistics:', stats); const config = csrfManager.getConfig(); console.log('CSRF Configuration:', { tokenExpiry: config.tokenExpiry, cookieName: config.cookieName, headerName: config.headerName, fieldName: config.fieldName }); } // Run examples if (require.main === module) { sessionBasedExample(); doubleSubmitExample(); clientSideExample(); expressMiddlewareExample(); statisticsExample(); // Clean up csrfManager.destroy(); } export { clientSideExample, doubleSubmitExample, expressMiddlewareExample, sessionBasedExample, statisticsExample }; //# sourceMappingURL=example.js.map