Ti trovi qui:
Attacco CSRF (Cross-Site Request Forgery) in B2C Commerce
Ogni storefront contiene alcune richieste protette che richiedono un elevato livello di tutela della sicurezza. Solitamente queste richieste vengono effettuate da acquirenti autenticati che cambiano account o inviano dati personali a un server per completare un'azione. L'utente si aspetta di essere il solo a effettuare tali richieste e unicamente nel momento in cui decide di avviarle.
L'attacco CSRF (Cross-Site Request Forgery) delude tale aspettativa, ingannando il browser dell'utente e inducendolo a effettuare questa richiesta protetta a sua insaputa, ma con la sua autorizzazione. Salesforce B2C Commerce dispone di una libreria software per la protezione contro gli attacchi CSRF, che consente agli sviluppatori di proteggere le richieste da questo tipo di attacco.
L'API di protezione contro gli attacchi CSRF utilizza un modello di token di sincronizzazione (Synchronizer Token Pattern) che richiede token di verifica casuali associati alla sessione corrente dell'utente. Quando l'utente invia contenuti dalla pagina, il server è configurato per cercare e convalidare tale token. Se il token non viene convalidato, la richiesta viene rifiutata.
Per le funzioni aziendali sensibili, l'inclusione di un token di sicurezza obbligatorio nelle richieste HTTP può contribuire ad attenuare gli attacchi CSRF. Infatti, affinché l'attacco vada a buon fine, l'utente malintenzionato deve conoscere il token generato casualmente per una determinata sessione.
L'API è esposta tramite dw.web.CSRFProtection, che contiene i seguenti metodi.
-
getTokenName(): Restituisce il nome parametro previsto sotto forma di stringa mappata a un token CSRF. -
generateToken(): Genera in modo sicuro una stringa di token per l'utente corrente. I token sono univoci per ogni chiamata a generateToken. -
validateRequest(): Esamina la richiesta corrente di un utente per stabilire se contiene un token CSRF valido. Un token è valido se è stato generato per la sessione dell'utente negli ultimi 60 minuti.
Di seguito è riportato un esempio di un form in ISML che utilizza il framework CSRF per inserire il nome del parametro di token e il valore corrispondente.
<form action="/submit" method="post">
...
<input name="${dw.web.CSRFProtection.getTokenName()}" value="${dw.web.CSRFProtection.generateToken()">
</form>
Quindi richiamare CSRFProtection.validateRequest() direttamente nel corpo della funzione o utilizzare un'implementazione middleware per convalidare il token CSRF.
Per CSRF nei controller JavaScript SiteGenesis, si consiglia di includere CSRFProtection.validateRequest() per la gestione di un'azione di form specifica. Si parla di specificità per azione perché non tutte le azioni inviano dati e richiedono protezione contro gli attacchi CSRF.
Di seguito è riportato un esempio di utilizzo del metodo direttamente in un controller JavaScript SiteGenesis.
formResult = cartForm.handleAction({
//Add a coupon if a coupon was entered correctly and is active.
'addCoupon': function (formgroup) {
var CSRFProtection = require('dw/web/CSRFProtection');
if (!CSRFProtection.validateRequest()) { //validate the request
app.getModel('Customer').logout(); //log the customer out
app.getView().render('csrf/csrf-failed'); //render an error template
return null;
}
var status;
var result = {
cart: cart,
EnableCheckout: true,
dontRedirect: true
};
L'architettura SFRA è dotata di una versione middleware di CSRF che esegue controlli CSRF come fase middleware, con una serie di metodi di supporto, inclusi i seguenti.
-
csrfProtection.validateAjaxRequestper convalidare il token CSRF in una richiesta AJAX -
csrfProtection.validateRequestper convalidare il token CSRF in una richiesta non AJAX -
csrfProtection.generateTokenper generare un token CSRF da utilizzare in un form e successivamente da convalidare con uno dei metodi sopracitati
Di seguito è riportato un esempio di utilizzo del middleware.
server.post(
'Login',
server.middleware.https,
csrfProtection.validateAjaxRequest,
function (req, res, next) {
var data = res.getViewData();
if (data && data.csrfError) {
res.json();
return next();
}
);
CSRF in Business Manager
Quando si creano cartridge per Business Manager, B2C Commerce aggiunge automaticamente token CSRF a ogni richiesta indipendentemente dal metodo HTTP. Di conseguenza, vengono convalidati solo il nome e il valore del token CSRF utilizzando CSRFProtection.validateRequest() direttamente nel corpo della funzione nei controller del cartridge di Business Manager.
Tutte le pagine e le richieste proprietarie di Business Manager sono protette per impostazione predefinita con i token CSRF.

