2011-02-08 10 views
5

के साथ मैंने पढ़ा है कि AJAX अनुरोध के एक्स-अनुरोधित हेडर के साथ जांच करना यह सुनिश्चित करने का एक अच्छा तरीका है कि अनुरोध बाहर से नहीं आ रहा है। सर्वर की तरफ, मैं इस हेडर को कैसे देखूं? और इस हेडर की प्रतिक्रिया करने का सही तरीका क्या गुम या गलत है (रीडायरेक्ट, अपवाद फेंक दें, अन्य)?कैसे सर्वर साइट से नहीं AJAX अनुरोधों की जांच कर सकता है, एक्स-अनुरोधित-

+4

आप http://stackoverflow.com/questions/623299/can-the-x-requested-with-http-header-be-spoofed को देखने के लिए चाहते हो सकता है; यह दिखाता है कि 'एक्स-अनुरोधित-साथ' को धोखा दिया जा सकता है। –

+0

आप यह भी देखना चाहते हैं http://www.yiiframework.com/forum/index.php?/topic/4945-yiiapp-request-isajaxrequest/ –

उत्तर

8

आप इस तरह यह जांच कर सकते हैं ...

$isAjax = isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND 
      strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest'; 

आप एक्सएचआर के माध्यम से केवल उम्मीद पहुँच रहे हैं, तो सिर्फ exit अगर यह शीर्ष लेख मौजूद नहीं है।

नोट: यह हेडर स्पूफ के लिए तुच्छ है। पर किसी भी चीज़ के लिए इस पर भरोसा न करें ऐसा लगता है कि यह na XHR से आया था।

+0

मैं यह सुनिश्चित करने के लिए इसका उपयोग करना चाहता हूं कि अनुरोध नहीं आ रहा है किसी ऐसे व्यक्ति से जिसने मेरे जेएस कोड को देखा, यूआरएल लिया और मेरी साइट के बाहर से इनपुट जमा कर रहा है। तो अगर इसे फिक्र किया जा सकता है, तो इससे बचाने के लिए कोई रास्ता नहीं है? – zmol

+0

@zmol मुझे खेद है, उस हेडर की उपस्थिति को देखकर कोई रास्ता नहीं है। – alex

+0

लेकिन क्या अन्य तरीके हैं? यह इस हेडर के माध्यम से नहीं होना चाहिए। अंतिम लक्ष्य यह सुनिश्चित करना है कि अनुरोध जेएस कोड पढ़ने वाले किसी व्यक्ति से नहीं आ रहा है, AJAX यूआरएल लाइन पढ़ें, और बाहर से यूआरएल खेल रहा है :) – zmol

6

यह सुनिश्चित करने के लिए एकमात्र निश्चित तरीका है कि अनुरोध आपकी साइट से आया है और किसी और का नहीं, उपयोगकर्ता को एक अद्वितीय टोकन जारी करना और इसे अपने सत्र में संग्रहीत करना है। अपने कोड में जहां आप AJAX अनुरोध करते हैं, तो आपको इस टोकन को वापस पास करने की आवश्यकता होती है और यदि यह उनके सत्र में किसी से मेल खाता है तो आप सुनिश्चित कर सकते हैं कि अनुरोध आपकी साइट से आया है।

और जानकारी: http://en.wikipedia.org/wiki/Cross-site_request_forgery

संबंधित मुद्दे