2016-06-01 19 views
10

क्या मैं Foregenix से सीखा:कैसे पता चलेगा कि यह वास्तव में 404 पृष्ठ है?

HTTP 404 नहीं मिला त्रुटि का अर्थ है कि वेब पेज आप पहुँचने की कोशिश कर रहे थे सर्वर पर नहीं पाया जा सका। यह एक क्लाइंट-साइड त्रुटि जिसका मतलब है कि या तो पेज हटा दिया गया है या ले जाया गया और यूआरएल तदनुसार या नहीं बदला गया था, तो आप URL गलत तरीके से

में टाइप करता है लेकिन फिर मैं भी अजगर के साथ वेब अनुप्रयोग pentests करना और मैं सोच रहा हूं कि अगर मैं केवल पृष्ठ पर स्ट्रिंग 404 की जांच करता हूं, तो यह वास्तव में 404 त्रुटि नहीं हो सकता है। ऐसा हो सकता है कि पृष्ठ मौजूद है लेकिन शीर्षक हमें 404 है बस हमें मूर्ख बनाने के लिए।

तो मैं वास्तव में कैसे पता लगा सकता हूं?

+40

HTTP स्थिति कोड, जैसे 404, को HTTP प्रतिक्रिया को देखकर अधिक विश्वसनीय तरीके से प्राप्त किया जा सकता है। उदाहरण के लिए, देखें http://www.tcpipguide.com/free/t_HTTPResponseMessageFormat.htm –

+8

@ ए। डार्विन मैं आपकी टिप्पणी को थोड़ा सा लिखूंगा और इसे उत्तर के रूप में पोस्ट करूंगा – Purefan

+0

कुछ वेबपृष्ठ उद्धृत करते समय, कृपया एक सीधा लिंक शामिल करें आपको उद्धरण मिला है। धन्यवाद! – Anders

उत्तर

55

आप HTTP स्थिति कोड देख सकते हैं, और देख सकते हैं कि यह 404 है या नहीं।

HTTP/1.1 404 Not Found 

आप HTTPlib उपयोग कर रहे हैं तो आप सिर्फ HTTPResponse वस्तु की status संपत्ति पढ़ सकते हैं: स्थिति कोड प्रतिक्रिया की पहली पंक्ति पर है।

हालांकि, यह सर्वर है जो HTTP स्थिति कोड भेजने का निर्णय लेता है। सिर्फ इसलिए कि 404 को "पृष्ठ नहीं मिला" का अर्थ परिभाषित किया गया है इसका मतलब यह नहीं है कि सर्वर आपसे झूठ नहीं बोल सकता है। इस तरह की चीजों को करना आम बात है:

  • प्रमाणीकरण की आवश्यकता वाले संसाधन को छिपाने के लिए 403 के बजाय 404 भेजें।
  • इस तथ्य को छिपाने के लिए 500 की बजाय 404 भेजें, कुछ काम नहीं कर रहा है।
  • 404 भेजें जब आपका आईपी किसी कारण से अवरुद्ध हो।

सर्वर तक पहुंच के बिना, यह जानना असंभव है कि पर्दे के पीछे वास्तव में क्या चल रहा है।

+9

कुछ साइट्स स्थिति कोड को थोड़ा सा उलझन में डालती हैं। वे 404 प्रदर्शित कर सकते हैं लेकिन एक 200 लौटा सकते हैं (जैसा कि आपने बताया है)। यदि आपको कोई साइट मिल रही है तो आपको उनसे संपर्क करना चाहिए और उन्हें बताएं, विशेष रूप से यदि आप एपीआई एंड पॉइंट का उपयोग करते हैं। – coteyr

+1

कभी-कभी ऐप्स गैर -404 स्थिति का उपयोग करते हैं ताकि AJAX कॉल अभी भी 'सफलता' हैंडलर के माध्यम से मार्ग पर जा सकें, आमतौर पर जब वे 'पकड़/आतंक' हैंडलर कोड नहीं करते हैं। – dandavis

+0

@coteyr और मुझे कई साइटें मिलीं जो 404 लेती हैं और या तो बस होम पेज लौटती हैं या यूआरएल सेगमेंट को अपनी साइट पर एक खोज के रूप में ले जाती हैं और एक खोज परिणाम पृष्ठ लौटाती हैं। (वास्तव में यदि वे वर्णनात्मक यूआरएल का उपयोग करते हैं तो कार्रवाई का एक समझदार तरीका - ऐसी खोज कभी-कभी गायब पृष्ठ का नया घर मिल जाएगी।) –

9

आप सही हैं: कोई HTML पृष्ठ में "404 पृष्ठ नहीं मिला" लिख सकता है और आपको लगता है कि पृष्ठ मौजूद नहीं है।

404 जैसे HTTP स्थिति कोड को सही ढंग से पहचानने के लिए, आपको पाइथन के साथ HTTP प्रतिक्रिया को कैप्चर करना चाहिए और इसे पार्स करना चाहिए। HTTP 1 और HTTP 2 मानकों का निर्देश है कि एक HTTP प्रतिक्रिया, जो HTTP जेनेरिक संदेश प्रारूप में लिखी गई है, में स्थिति कोड होना चाहिए। (Tutorials Point से) एक HTTP प्रतिक्रिया के

उदाहरण:

HTTP/1.1 404 Not Found 
Date: Sun, 18 Oct 2012 10:36:20 GMT 
Server: Apache/2.2.14 (Win32) 
Content-Length: 230 
Connection: Closed 
Content-Type: text/html; charset=iso-8859-1 

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html> 
<head> 
<title>404 Not Found</title> 
</head> 
<body> 
    <h1>Not Found</h1> 
    <p>The requested URL /t.html was not found on this server.</p> 
</body> 
</html> 

आप निश्चित रूप से एचटीएमएल भाग पर भरोसा नहीं करना चाहिए, जो एक 404 त्रुटि दिखा सकते हैं (या यहां तक ​​कि एक 418 I'm a teapot) जब पेज वास्तव में पाया जा सकता है ।

+2

मैं मानता हूं कि आपको HTML पर भरोसा नहीं करना चाहिए, लेकिन क्या आपको HTTP स्थिति कोड पर भरोसा करना चाहिए? – Anders

+7

@Anders यदि पृष्ठ आपको एक नकली स्थिति कोड युक्त एक HTTP प्रतिक्रिया भेजता है, तो मुझे नहीं पता कि पृष्ठ नहीं मिला है या नहीं, यह जांचने के लिए और क्या किया जा सकता है, इसे किसी अन्य आईपी पते या उपयोगकर्ता-एजेंट के साथ जांचने से कम अगर यह एक विज्ञापन-संदेश है। –

+2

@ एंडर्स: आपको स्थिति कोड पर भरोसा करना चाहिए। यदि साइट टूटी हुई है या जानबूझकर आपके साथ गेम खेल रही है, तो आप ऐसा कुछ भी नहीं कर सकते हैं। यदि साइट कहती है कि "पृष्ठ वहां नहीं है", तब तक जहां तक ​​आप चिंतित हैं, यह वहां नहीं है। – gnasher729

4

एंडर्स के उत्तर के अलावा, मुझे कुछ मामलों का पता लगाने का एक तरीका मिला जहां 404 का समय परीक्षण हमले के साथ दुरुपयोग किया गया। हालांकि, यह शायद ही विश्वसनीय है।

  • प्रमाणीकरण की आवश्यकता वाले संसाधन को छिपाने के लिए 403 के बजाय 404 भेजें।

अक्सर सर्वर, निर्धारित करने के लिए है कि "आप न इस संसाधन प्राप्त करने का अधिकार है" और अधिक समय की जरूरत है क्योंकि वे बाह्य संसाधनों को और अधिक roundtrips जरूरत डेटाबेस की तरह है, तो वे निर्धारित करने के लिए "इस वहाँ नहीं है" की जरूरत है, अक्सर यहां तक ​​कि कैश करने योग्य और जल्दी से निर्धारित करने के लिए।

आरडीबीएस के साथ एक एमवीसी अनुप्रयोग में एक सामान्य उदाहरण बैकएंड के रूप में एक सरल SELECT COUNT(id) FROM articles WHERE id=123 LIMIT 1 और अधिक जटिल SELECT access FROM accesses JOIN articles ON articles.id = accesses.foreign_id WHERE articles.id = 123 AND accesses.type='articles' AND accesses.user_id = (SELECT id FROM users WHERE token='t0k3n' LIMIT 1) के बीच का अंतर है। और इसका तात्पर्य यह है कि एप्लिकेशन इस तरह के एकल लाइन प्रश्नों को पहली जगह बना सकता है: अधिकतर अक्सर "उपयोगकर्ता को लाने, कुछ डेटा निकालने, अब एक चीज लाने के लिए, अब थिंग पूछें कि क्या उपयोगकर्ता इसे प्राधिकरण के माध्यम से एक्सेस कर सकता है- api "।

जब तक डेवलपर्स या साइट के ढांचे के इस मामले को कवर करने के ख्याल रखा, अक्सर आप समय में एक उल्लेखनीय अंतर 404.

  • की दोनों ही मामलों की सेवा के लिए 404 के बजाय 500 भेजें देखेंगे, तथ्य छिपाने के लिए कुछ काम नहीं कर रहा है।

आमतौर पर, कुछ कोड चलने के बाद ही क्रैश या अप्रत्याशित त्रुटियां होती हैं। 404-पहचान अक्सर शुरुआती होती है: आखिरकार, यह निर्धारित करना सस्ता है कि कुछ नहीं है (ऊपर देखें)। जबकि त्रुटि बाद में होगी। जिसका अर्थ है कि इस तरह के एक 500-छुपा के रूप में 404 त्रुटि, अक्सर एक बहुत लंबे समय तक ले जाएगा आप तो एक सामान्य 404.

  • तक पहुंचने के लिए 404 भेजें जब आपके आईपी किसी कारण से अवरुद्ध है।

यहां, कार्यान्वयन के आधार पर समय अक्सर दूसरी तरफ होता है। इस तरह के आईपी-अवरुद्ध को अक्सर वेब-एप (सीएमएस इत्यादि) के बाहर रखा जाएगा क्योंकि यह स्टैक में उच्चतम को संभालने के लिए बहुत आसान और निष्पादक है: वेबसर्वर, प्रॉक्सी इत्यादि हालांकि, जब एप्लिकेशन स्वयं ही ख्याल रखता है यह, वास्तविक 404 उत्पन्न करना अक्सर उचित रूप से सस्ता है, जबकि डेटाबेस में एक आईपी देखकर, मास्क लगाने और इतने पर, कुछ समय लगता है। 403 के रूप में 403 को छिपाने के समान।

+0

यह बहुत बढ़िया धन्यवाद दोस्त है –

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