私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
クロスサイト リクエスト フォージェリ (CSRF) 攻撃を防ぐために、フロントエンド開発では次の一般的なセキュリティ対策を講じることができます。
これは、最も一般的に使用される防御メカニズムの 1 つです。
トークンの生成: ユーザーがログインすると、サーバーはランダムで予測不可能な CSRF トークンを生成し、サーバー側に保存します。同時に、それは Set-Cookie ヘッダーを通じてクライアントに送信され、ユーザーの Cookie に保存されます。
フォーム埋め込みトークン: 保護が必要な各 HTML フォームに、隠しフィールド (<input type="hidden">
)、その値は Cookie から読み取られた CSRF トークンに設定されます。
トークンの検証 : フォームが送信されると、バックエンドはフォーム データと Cookie 内のトークンを受信します (同一生成元ポリシーにより、ブラウザーは自動的に Cookie を送信します)。サーバー側は、フォーム内のトークンがサーバー側またはセッションに保存されているトークンと一致しているかどうかを検証します。それらが矛盾している場合、リクエストは拒否されます。
Referer と Origin が改ざんされているか欠落している可能性があるため、完全に信頼できるわけではありませんが、シナリオによっては補助手段として使用できます。
リファラーをチェックする処置: HTTP リクエストヘッダーの Referer フィールドを確認して、リクエストが予想されるドメイン名から開始されていることを確認してください。ただし、この方法には制限があることに注意してください。たとえば、HTTPS から HTTP へのダウングレード リクエストではリファラーが送信されません。
オリジンヘッダーのチェック: Referer と同様に、Origin ヘッダーはリクエストのソースに関する情報を提供しますが、XMLHttpRequest または Fetch API を使用する場合にのみ送信されます。
クロスサイト アクセスを必要としない Cookie については、SameSite 属性を設定してセキュリティを強化できます。
カスタム HTTP ヘッダーを AJAX リクエストに追加します (例:X-Requested-With: XMLHttpRequest
)、サーバー側でこのヘッダーの存在と値を確認します。 JavaScript は XMLHttpRequest のヘッダーを自由に設定できますが、通常のフォーム送信では設定できないため、これによりスクリプトによって開始されたリクエストを区別できます。
サーバー側 (擬似コード):
// 生成并设置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:
<form action="/submitForm" method="POST">
<!-- 其他表单字段... -->
<input type="hidden" name="csrfToken" value="{{csrfToken}}">
<button type="submit">Submit</button>
</form>
上記のコードは単なる例であり、実際のアプリケーションは使用するバックエンド フレームワークと言語に応じて調整する必要があることに注意してください。