2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Cross-Site Request Forgery (CSRF) आक्रमणं निवारयितुं अग्रे-अन्त-विकासे निम्नलिखित-सामान्य-सुरक्षा-उपायाः कर्तुं शक्यन्ते ।
एतत् सर्वाधिकं प्रयुक्तेषु रक्षातन्त्रेषु अन्यतमम् अस्ति ।
टोकन उत्पन्न करें: उपयोक्तुः प्रवेशानन्तरं सर्वरः एकं यादृच्छिकं, अप्रत्याशितम् CSRF Token जनयति तथा च सर्वरपक्षे संगृह्णाति तस्मिन् एव काले, तत् Set-Cookie शीर्षकद्वारा क्लायन्ट् प्रति प्रेष्यते, उपयोक्तुः कुकीयां च संगृह्यते
प्रपत्रं एम्बेडेड् टोकन: प्रत्येकस्मिन् HTML रूपे यस्य रक्षणस्य आवश्यकता भवति, तस्मिन् गुप्तक्षेत्रं योजयन्तु (<input type="hidden">
), तस्य मूल्यं कुकीतः पठितं CSRF Token इति सेट् भवति ।
VerifyToken इति : यदा प्रपत्रं प्रस्तूयते तदा पृष्ठभागः कुकीयां प्रपत्रदत्तांशं टोकनं च प्राप्स्यति (समानमूलनीतेः कारणात् ब्राउजर् स्वयमेव कुकीं प्रेषयिष्यति)। सर्वर पक्षः सत्यापयति यत् प्रपत्रे Token सर्वरपक्षे संगृहीतेन Token इत्यनेन सह सङ्गतम् अस्ति वा Session इत्यत्र वा । यदि ते असङ्गताः सन्ति तर्हि अनुरोधः निरस्तः भवति।
यद्यपि सन्दर्भकस्य उत्पत्तिः च छेदनं वा गम्यते वा इति कारणेन सम्पूर्णतया विश्वसनीयं नास्ति तथापि केषुचित् परिदृश्येषु सहायकसाधनरूपेण तस्य उपयोगः कर्तुं शक्यते
सन्दर्भकं पश्यन्तु : HTTP अनुरोधशीर्षके Referer क्षेत्रं सत्यापयन्तु यत् अनुरोधः अपेक्षितडोमेननामतः आरब्धः इति सुनिश्चितं कुर्वन्तु । परन्तु एतत् ज्ञातव्यं यत् अस्याः पद्धत्याः सीमाः सन्ति यथा, HTTPS तः HTTP यावत् अवनति-अनुरोधे, Referer न प्रेषितः भविष्यति ।
उत्पत्ति शीर्षकं पश्यन्तु: Referer इत्यस्य सदृशं, Origin शीर्षकं अनुरोधस्य स्रोतस्य विषये सूचनां प्रदाति, परन्तु केवलं XMLHttpRequest अथवा Fetch API इत्यस्य उपयोगं कुर्वन् प्रेष्यते ।
येषां कुकीजानां कृते क्रॉस्-साइट्-प्रवेशस्य आवश्यकता नास्ति, तेषां कृते सुरक्षावर्धनार्थं SameSite विशेषता सेट् कर्तुं शक्यते ।
AJAX अनुरोधाय इष्टं HTTP शीर्षकं योजयन्तु (यथाX-Requested-With: XMLHttpRequest
), ततः सर्वरपक्षे अस्य शीर्षकस्य अस्तित्वं मूल्यं च सत्यापयन्तु । यतः जावास्क्रिप्ट् 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');
}
});
अग्र-अन्त एचटीएमएल:
<form action="/submitForm" method="POST">
<!-- 其他表单字段... -->
<input type="hidden" name="csrfToken" value="{{csrfToken}}">
<button type="submit">Submit</button>
</form>
कृपया ज्ञातव्यं यत् उपर्युक्तः कोडः केवलं उदाहरणम् एव अस्ति, तथा च वास्तविकं अनुप्रयोगं पृष्ठभागरूपरेखायाः, प्रयुक्तभाषायाः च अनुसारं समायोजितुं आवश्यकम् अस्ति ।