2013-04-06 15 views
8

मैंने अपनी साइट के यूआरएल जैसे स्टैक   ओवरफ़्लो यूआरएल बनाए हैं। मेरे यूआरएल नीचे दिए गए हैं।स्टैक ओवरफ़्लो यूआरएल कैसे काम करते हैं?

http://www.example.com/1255544/this-is-the-url-text 

इस URL में, 1255544 आईडी है और this-is-the-url-text यूआरएल शीर्षक पाठ, दोनों डेटाबेस में संग्रहीत है। मैंने देखा है कि स्टैक   ओवरफ़्लो यूआरएल आईडी के आधार पर काम करता है। यहाँ मान लीजिए कि एक ढेर   ओवरफ्लो यूआरएल

http://stackoverflow.com/questions/15679171/new-way-to-prevent-xss-attacks 

इस URL में, 15679171 है पद का आईडी है। जब मैं new-way-to-prevent-xss-attacks बिना छुए 15706581 को यह आईडी बदल गया है और दबाया दर्ज करें, URL अपने आप निम्न URL से बदल दिया है:

http://stackoverflow.com/questions/15706581/simplecursoradapter-does-not-load- 
external-sqlite-database-id-error 

और जब मैं

नीचे की तरह यूआरएल शीर्षक पाठ के भाग में से कुछ को दूर करने की कोशिश की
http://stackoverflow.com/questions/15679171/new-way-to-preve 

यह स्वचालित रूप से नीचे के रूप में यूआरएल को सही:

http://stackoverflow.com/questions/15679171/new-way-to-prevent-xss-attacks 

इसका मतलब यह डेटा डेटाबेस से लिया जा रहा है आईडी 15679171 के आधार पर और प्रासंगिक URL शीर्षक टेक्स्ट, new-way-to-prevent-xss-attacks, आईडी के अनुसार संलग्न है।

मैं यह भी करना चाहता हूं। लेकिन समस्या यह है कि, मुझे यह समझने वाला नहीं है कि अगर कोई यूआरएल की आईडी बदलता है तो शीर्षक टेक्स्ट स्वचालित रूप से बदलना चाहिए। मैं यह कैसे करु?

$url_id = $_GET["id"]; 
$url_txt = $_GET["url_txt"]; 

$qry = "SELECT * FROM mytable WHERE url_id = '{$url_id}' LIMIT 1"; 
$data = mysql_query($qry); 
$data_set = mysql_fetch_array($data); 

if($url_txt== $data_set["url_txt"]) { 
    // proceed further 
} else { 
    $rebuilt_url = "http://www.example.com/" . $url_id . "/" . $data_set["url_txt"]; 
    header("Location: {$rebuilt_url}") // Redirect to this URL 
} 

यह इस क्रिया को निष्पादित करने या नहीं करने के लिए उचित और कारगर तरीका है:

मैं निम्नलिखित में सोचा है? क्या कोई समाधान है?

+1

जब पेज लोड, आईडी के आधार पर आपके डेटाबेस से यूआरएल मिलता है, यह यूआरएल के साथ पता पट्टी से तुलना करता है, तो यह एक ही नहीं है , फिर दाएं यूआरएल पर रीडायरेक्ट करें। –

+0

इसके अलावा, एसक्यूएल इंजेक्शन से सावधान रहें (एक int को $ url_id कास्टिंग करना चाहिए)। –

+0

हाय वहाँ। आपने हाल ही में "हाउ स्टैक ओवरफ्लो प्रश्न उत्तर सिस्टम वर्क्स" नामक एक प्रश्न पोस्ट किया है, और इसे मॉडरेटर द्वारा त्रुटि में एक अलग साइट पर माइग्रेट किया गया था। ओह, उनके लिए smack ':)'। मेरा सुझाव है कि आप इसे दोबारा पोस्ट करें (कॉपी और पेस्ट का उपयोग करें!) लेकिन इसे कॉल करें "मेरे स्टैक ओवरफ्लो-जैसी प्रणाली को कैसे अनुकूलित करें"। ध्यान रखें कि इसे बहुत विचलित के रूप में बंद किया जा सकता है, हालांकि आपको टिप्पणियों में कुछ सामान्य टिप्पणियां मिल सकती हैं। यदि आप दोबारा पोस्ट करते हैं, तो मुझे यहां पिंग करें (@ हेलफर) और मैं टिप्पणी करूंगा। – halfer

उत्तर

3

आप Apache उपयोग करते हैं, मुझे लगता है कि आपको पता होना चाहिए के बारे में URL rewriting

यूआरएल में आप एक और अधिक अनुकूल लग रहे करने के लिए यूआरएल को फिर से लिखने को फिर से लिखने। अपाचे पर सेट किया जा करने के लिए नीचे

http://www.downloadsite.com?category=34769845698752354

और जब आप इसे पर कोई URL रीराइट करते हैं, यह इस

http://www.downloadsite.com/Nettools/Messengers 

यूआरएल जरूरतों को फिर से लिखने की तरह बन गया यूआरएल पर एक नजर डालें कॉन्फ़िगरेशन (रीराइटिंग नियम) ताकि PHP द्वारा अनुरोध की व्याख्या करने से पहले यह आपके यूआरएल को फिर से लिख सके ताकि आपको सटीक संसाधन मिल सके जो आप

प्राप्त करना चाहते हैं

ठीक है, मैं आपको यहां सबकुछ समझा नहीं सकता, लेकिन नीचे मैं आपको कुछ लिंक प्रदान करता हूं जहां आप यूआरएल पुनर्लेखन के बारे में जान सकते हैं।

यह सबसे अच्छा हैक आप दोस्ताना यूआरएल बनाने के लिए कर सकते हैं!

संसाधन:

+3

हाय महान, यह स्टैक ओवरफ़्लो पर प्रथागत है ताकि आप अपने उत्तर के शरीर में एक उदाहरण या स्पष्टीकरण प्रदान कर सकें। यह तीन चीजों को सुनिश्चित करता है: यदि लिंक टूट जाता है, तो आपका उत्तर भविष्य के आगंतुकों के लिए अभी भी मूल्यवान होगा, और यह सुनिश्चित करता है कि लोगों को केवल स्टैक ओवरफ़्लो छोड़ने की आवश्यकता हो, यदि उन्हें प्रश्न के उत्तर से अधिक गहन जानकारी की आवश्यकता हो। अंत में, आपका उदाहरण तैयार किया जा सकता है, जबकि लिंक सामान्यीकरण की संभावना है। आप जोड़ों को बनाने के लिए इस [संपादित करें] लिंक का उपयोग कर सकते हैं। उम्मीद है की यह मदद करेगा। – jmort253

+0

अच्छी तरह से यूआरएल पुनर्लेखन में बहुत सारे तरीके हैं और हर तरह से जाने का लंबा रास्ता है इसलिए मैंने वेब पर कुछ बेहतरीन लिंक डाले हैं। खैर मैं अपना जवाब संपादित करूंगा –

+3

आपको * हर * संभावना दिखाने की ज़रूरत नहीं है, लेकिन एक उदाहरण आपकी पोस्ट को संभवतः उत्तर के रूप में फ़्लैग किए जाने से रोक देगा। इसके अलावा, उदाहरण लोगों को सीखने में मदद करते हैं और आपकी पोस्ट की संभावनाओं को और अधिक बढ़ाते हैं। सौभाग्य! :) – jmort253

5

आपका कोड बहुत अच्छा दिखता है और मेरे स्टैक   ओवरफ़्लो उत्तरों में से मैंने एक ही दृष्टिकोण का सुझाव दिया था। हालांकि, मैं सिर्फ एक मामूली सुधार का सुझाव देता हूं। बजाय:

header("Location: {$rebuilt_url}"); 

आप क्या करना चाहिए:

header ('HTTP/1.1 301 Moved Permanently'); 
header("Location: {$rebuilt_url}"); 

यह आक्रामक तरीके से ब्राउज़र का कैश इन URL को बता देगा और आपको कोड और SQL प्रश्नों हर बार निष्पादित नहीं किया जाएगा।

यह भी जांच:

  1. .htaccess if URL is bad do something
  2. .htaccess rewrite friendly URLs
संबंधित मुद्दे