2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Ad impediendam Cross-Site Request Forgery (CSRF) impetus, commune securitatis mensurae sequentes ante finem evolutionis sumi possunt:
Haec una ex communibus machinationibus defensionis adhibitis.
Generale Thochen: Post usoris tigna in, server temere, inaestimabile CSRF Thochen gignit et in parte servo reponit. Eodem tempore ad clientem per Set-Cookie caput mittitur et in usoris Cookie reponitur.
Forma embedded ThochenIn unaquaque HTML forma, quae praesidio indiget, agrum occultum adde (<input type="hidden">
) , valorem suum CSRF ad Thochen legitur e crustulum positum.
VerifyToken : Cum forma proposita sit, tergum forma notitiarum et Thochen in crustulum accipiet (ob eandem originem consilium, navigatrum crustulum automatice mittet). Servus latus certificat num Thochen in forma consentaneum sit cum Thochen repositum in parte servo vel in Sessione. Si repugnent, petitio reiicitur.
Etsi non omnino certum est quod Relator et Originem sollicitari possunt vel deesse, tamen uti mediis auxiliis in aliquibus missionibus potest.
Reprehendo Referer : Cognoscere Relator campum in HTTP petendi caput est ut petitio ab expectato nomine incipiatur. Attamen notandum est hanc methodum limitationes habere. Exempli gratia, in declivi rogatu ab HTTPS ad HTTP, Relator non mittendus est.
Reprehendo Origin Header: Similis cum Referer, Origin header informationes praebet de fonte rogationis, sed tantum missus est cum XMLHttpRequest vel Da API utens.
Illae crustulae quae accessum crucis non requirunt, attributum SameSite constitui possunt ad securitatem augendam.
Addere consuetudinem HTTP header ad AJAX petitionem (utX-Requested-With: XMLHttpRequest
) et tunc comprobandum esse et valorem huius capitis in calculonis servi. Quia JavaScript gratis caput XMLHttpRequest constituere potest, forma autem ordinaria submissionis non potest, hoc petitiones scriptorum initiatas discernere potest.
Servo latus (pseudocode):
// 生成并设置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');
}
});
Ante-finem HTML:
<form action="/submitForm" method="POST">
<!-- 其他表单字段... -->
<input type="hidden" name="csrfToken" value="{{csrfToken}}">
<button type="submit">Submit</button>
</form>
Quaeso nota quod superius codicem tantum exemplum est, et applicatio actualis necessario aptanda est secundum compaginem et linguarum usum.