le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Per prevenire attacchi Cross-Site Request Forgery (CSRF), è possibile adottare le seguenti misure di sicurezza comuni nello sviluppo front-end:
Questo è uno dei meccanismi di difesa più comunemente utilizzati.
Genera token: Dopo che l'utente ha effettuato l'accesso, il server genera un token CSRF casuale e imprevedibile e lo memorizza sul lato server. Allo stesso tempo, viene inviato al client tramite l'intestazione Set-Cookie e memorizzato nel Cookie dell'utente.
Token incorporato nel modulo: in ogni modulo HTML che necessita di protezione, aggiungi un campo nascosto (<input type="hidden">
), il suo valore è impostato sul token CSRF letto dal cookie.
VerificaToken : Quando il modulo viene inviato, il backend riceverà i dati del modulo e il token nel cookie (a causa della politica della stessa origine, il browser invierà automaticamente il cookie). Il lato server verifica se il token nel modulo è coerente con il token archiviato sul lato server o nella sessione. Se sono incoerenti la richiesta viene respinta.
Sebbene non sia completamente affidabile perché il Referer e l'Origine potrebbero essere manomessi o mancanti, può comunque essere utilizzato come mezzo ausiliario in alcuni scenari.
Controlla referente : verifica il campo Referer nell'intestazione della richiesta HTTP per garantire che la richiesta venga avviata dal nome di dominio previsto. Tuttavia, è opportuno notare che questo metodo presenta delle limitazioni. Ad esempio, in una richiesta di downgrade da HTTPS a HTTP, il Referer non verrà inviato.
Controlla l'intestazione dell'origine: simile a Referer, l'intestazione Origin fornisce informazioni sull'origine della richiesta, ma viene inviata solo quando si utilizza XMLHttpRequest o Fetch API.
Per i cookie che non richiedono l'accesso tra siti, è possibile impostare l'attributo SameSite per migliorare la sicurezza.
Aggiungi un'intestazione HTTP personalizzata alla richiesta AJAX (comeX-Requested-With: XMLHttpRequest
), quindi verificare l'esistenza e il valore di questa intestazione sul lato server. Poiché JavaScript può impostare liberamente l'intestazione di XMLHttpRequest, ma l'invio di moduli ordinari non può, ciò può distinguere le richieste avviate dagli script.
Lato server (pseudocodice):
// 生成并设置Token
function generateCsrfToken() {
return crypto.randomBytes(32).toString('hex');
}
app.post('/login', (req, res) => {
const token = generateCsrfToken();
res.cookie('csrfToken', token, { httpOnly: true, secure: true, sameSite: 'strict' });
// 存储token到session或其他存储机制
});
app.post('/submitForm', (req, res) => {
if (req.body.csrfToken === req.cookies.csrfToken) {
// 请求合法,处理逻辑...
} else {
// CSRF攻击检测,拒绝请求
res.status(403).send('Forbidden');
}
});
HTML front-end:
<form action="/submitForm" method="POST">
<!-- 其他表单字段... -->
<input type="hidden" name="csrfToken" value="{{csrfToken}}">
<button type="submit">Submit</button>
</form>
Tieni presente che il codice sopra riportato è solo un esempio e l'applicazione effettiva deve essere adattata in base al framework backend e al linguaggio utilizzato.