प्रौद्योगिकी साझेदारी

अग्र-अन्त-साक्षात्कार-प्रश्नः ५० (CSRF-आक्रमणं निवारयितुं के सामान्याः अग्रभाग-सुरक्षा-उपायाः कर्तुं शक्नुवन्ति?)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु
Cross-Site Request Forgery (CSRF) आक्रमणं निवारयितुं अग्रे-अन्त-विकासे निम्नलिखित-सामान्य-सुरक्षा-उपायाः कर्तुं शक्यन्ते ।

1. CSRF Token इत्यस्य उपयोगं कुर्वन्तु

एतत् सर्वाधिकं प्रयुक्तेषु रक्षातन्त्रेषु अन्यतमम् अस्ति ।

  • टोकन उत्पन्न करें: उपयोक्तुः प्रवेशानन्तरं सर्वरः एकं यादृच्छिकं, अप्रत्याशितम् CSRF Token जनयति तथा च सर्वरपक्षे संगृह्णाति तस्मिन् एव काले, तत् Set-Cookie शीर्षकद्वारा क्लायन्ट् प्रति प्रेष्यते, उपयोक्तुः कुकीयां च संगृह्यते

  • प्रपत्रं एम्बेडेड् टोकन: प्रत्येकस्मिन् HTML रूपे यस्य रक्षणस्य आवश्यकता भवति, तस्मिन् गुप्तक्षेत्रं योजयन्तु (<input type="hidden">), तस्य मूल्यं कुकीतः पठितं CSRF Token इति सेट् भवति ।

  • VerifyToken इति : यदा प्रपत्रं प्रस्तूयते तदा पृष्ठभागः कुकीयां प्रपत्रदत्तांशं टोकनं च प्राप्स्यति (समानमूलनीतेः कारणात् ब्राउजर् स्वयमेव कुकीं प्रेषयिष्यति)। सर्वर पक्षः सत्यापयति यत् प्रपत्रे Token सर्वरपक्षे संगृहीतेन Token इत्यनेन सह सङ्गतम् अस्ति वा Session इत्यत्र वा । यदि ते असङ्गताः सन्ति तर्हि अनुरोधः निरस्तः भवति।

2. HTTP Referer तथा Origin Header सत्यापयन्तु

यद्यपि सन्दर्भकस्य उत्पत्तिः च छेदनं वा गम्यते वा इति कारणेन सम्पूर्णतया विश्वसनीयं नास्ति तथापि केषुचित् परिदृश्येषु सहायकसाधनरूपेण तस्य उपयोगः कर्तुं शक्यते

  • सन्दर्भकं पश्यन्तु : HTTP अनुरोधशीर्षके Referer क्षेत्रं सत्यापयन्तु यत् अनुरोधः अपेक्षितडोमेननामतः आरब्धः इति सुनिश्चितं कुर्वन्तु । परन्तु एतत् ज्ञातव्यं यत् अस्याः पद्धत्याः सीमाः सन्ति यथा, HTTPS तः HTTP यावत् अवनति-अनुरोधे, Referer न प्रेषितः भविष्यति ।

  • उत्पत्ति शीर्षकं पश्यन्तु: Referer इत्यस्य सदृशं, Origin शीर्षकं अनुरोधस्य स्रोतस्य विषये सूचनां प्रदाति, परन्तु केवलं XMLHttpRequest अथवा Fetch API इत्यस्य उपयोगं कुर्वन् प्रेष्यते ।

3. SameSite Cookie विशेषतायाः उपयोगं कुर्वन्तु

येषां कुकीजानां कृते क्रॉस्-साइट्-प्रवेशस्य आवश्यकता नास्ति, तेषां कृते सुरक्षावर्धनार्थं SameSite विशेषता सेट् कर्तुं शक्यते ।

  • SameSite=शिथिलः: कुकी केवलं समान-स्थल-अनुरोधयोः प्रेष्यते, CSRF-विरुद्धं आंशिकरूपेण रक्षणं करोति ।
  • SameSite=कठोर: कुकीजः केवलं एकस्मिन् साइट्-अन्तर्गतं समानपृष्ठ-सञ्चार-अन्तर्गतं च प्रेष्यन्ते, येन सशक्ततरं रक्षणं प्राप्यते, परन्तु केचन अपेक्षिताः पार-उपडोमेन-कार्यं प्रभावितं कर्तुं शक्नुवन्ति ।
  • SameSite=कोऽपि नास्ति: आधुनिकब्राउजर्-आवश्यकतानां अनुकूलतायै क्रॉस्-साइट्-रूपेण भवितुं आवश्यकाः कुकीजानां कृते Secure विशेषतायाः सह उपयोगः आवश्यकः ।

4. कस्टम् अनुरोधशीर्षकसत्यापनम्

AJAX अनुरोधाय इष्टं HTTP शीर्षकं योजयन्तु (यथाX-Requested-With: XMLHttpRequest ), ततः सर्वरपक्षे अस्य शीर्षकस्य अस्तित्वं मूल्यं च सत्यापयन्तु । यतः जावास्क्रिप्ट् XMLHttpRequest इत्यस्य शीर्षकं स्वतन्त्रतया सेट् कर्तुं शक्नोति, परन्तु साधारणं प्रपत्रं प्रस्तुतीकरणं कर्तुं न शक्नोति, एतेन स्क्रिप्ट् द्वारा आरब्धानां अनुरोधानाम् भेदः कर्तुं शक्यते ।

नमूनासङ्केतः (CSRF Token कार्यान्वयनम्):

सर्वर पक्ष (छद्मकोड) २.:

// 生成并设置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');
    }
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

अग्र-अन्त एचटीएमएल:

<form action="/submitForm" method="POST">
    <!-- 其他表单字段... -->
    <input type="hidden" name="csrfToken" value="{{csrfToken}}">
    <button type="submit">Submit</button>
</form>
  • 1
  • 2
  • 3
  • 4
  • 5

कृपया ज्ञातव्यं यत् उपर्युक्तः कोडः केवलं उदाहरणम् एव अस्ति, तथा च वास्तविकं अनुप्रयोगं पृष्ठभागरूपरेखायाः, प्रयुक्तभाषायाः च अनुसारं समायोजितुं आवश्यकम् अस्ति ।