क्या एक कॉलोनर `:` मैत्रीपूर्ण-URL उपयोग के लिए सुरक्षित है?


109

हम एक URL सिस्टम डिज़ाइन कर रहे हैं जो स्लैश द्वारा अलग किए गए शब्दों के रूप में एप्लिकेशन अनुभागों को निर्दिष्ट करेगा। विशेष रूप से, यह GWT में है, इसलिए URL के संबंधित भाग हैश में होंगे (जिसकी व्याख्या क्लाइंट-साइड पर एक कंट्रोलर लेयर द्वारा की जाएगी):

http://site/gwturl#section1/section2

कुछ अनुभागों को अतिरिक्त विशेषताओं की आवश्यकता हो सकती है, जिन्हें हम इसके साथ निर्दिष्ट करना चाहते हैं :, ताकि URL के अनुभाग भाग असंदिग्ध हों। इस तरह कोड पहले अलग हो जाएगा /, फिर :इस तरह:

http://site/gwturl#user:45/comments

बेशक, हम url-मित्रता के लिए ऐसा कर रहे हैं, इसलिए हम यह सुनिश्चित करना चाहेंगे कि इनमें से कोई भी वर्ण जो विशेष अर्थ धारण करेगा, वह ब्राउज़र, या किसी अन्य प्रणाली द्वारा url-encoded होगा, और एक url के साथ समाप्त होगा यह:

http://site/gwturl#user%3A45/comments <--- BAD

क्या इस तरह से कॉलोन का उपयोग करना सुरक्षित है (जिसके द्वारा मेरा मतलब है कि ब्राउज़र, बुकमार्क सिस्टम, यहां तक ​​कि जावास्क्रिप्ट या जावा कोड के लिए स्वचालित रूप से एनकोड नहीं किया जाएगा)?


शायद यह निर्दिष्ट करने के लिए एक अच्छा विचार है (अधिक स्पष्ट रूप से) कि आप केवल क्लाइंट-साइड पर URL का उपयोग करते हैं? चूंकि बहुत सारे उत्तर (जैसा कि मेरा था) लगता है कि आप HTTP का उपयोग करके सर्वर को URL भेजने जा रहे हैं।
वीर

स्पष्टीकरण जोड़ने के लिए संपादित किया गया है कि टुकड़े का उपयोग क्लाइंट-साइड पर हो रहा है।
निकोल

मैं उत्सुक हूं: 10 महीनों के बाद, क्या इस यूआरएल योजना ने आपके लिए काम किया है? मैं उसी योजना का उपयोग करने पर विचार कर रहा हूं।
जोनाथन स्विनी

1
@ जोनाथन स्विनी, दुर्भाग्य से मैं इस परियोजना (और कंपनी) से आगे बढ़ा हूं, हालांकि यहां के जवाबों ने मुझे संतुष्ट किया कि यह जाने का रास्ता है। यदि मैं एक नई परियोजना शुरू करने के लिए था, तो मैं इस योजना का उपयोग करूंगा, लेकिन मैं यह सुनिश्चित करने के लिए भी उपयोग करूंगा #!कि पृष्ठ स्टेटफुल हैं - googlewebmastercentral.blogspot.com/2009/10/… देखें (यह प्रस्ताव स्थगित कर दिया गया है फेसबुक जैसे भारी AJAX उपयोगकर्ताओं द्वारा)
निकोल

मुझे अभी पता चला है कि व्हाट्सएप पहले कॉलोन पर एक यूआरएल को काट देगा, इसलिए उदाहरण के लिए इसने गूगल मैप्स यूआरएल को बेकार कर दिया। तो हाँ, इससे बचना ज़रूरी है।
पेट्रूजा

जवाबों:


84

मैंने हाल ही में एक URL एनकोडर लिखा है, इसलिए यह मेरे दिमाग में बहुत ताज़ा है।

http://site/gwturl#user:45/comments

अंश भाग ( user:45/comments) में सभी वर्ण RFC 3986 URI के लिए पूरी तरह से कानूनी हैं ।

ABNF के प्रासंगिक भाग :

fragment      = *( pchar / "/" / "?" )
pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded   = "%" HEXDIG HEXDIG
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
                 / "*" / "+" / "," / ";" / "="

इन प्रतिबंधों के अलावा, आपके द्वारा दिए गए आवेदन के अलावा टुकड़े वाले हिस्से की कोई परिभाषित संरचना नहीं है। योजना, http, केवल यह कहता है कि आप इस हिस्से को सर्वर पर नहीं भेजते हैं।


संपादित करें:

डी 'ओह!

यूआरआई कल्पना के बारे में मेरे दावे के बावजूद, irreputable सही जवाब जब प्रदान करता है वह बताते हैं कि एचटीएमएल 4 कल्पना सम्बन्धी सीमाओं तत्व नाम / पहचानकर्ता

ध्यान दें कि HTML 5 में पहचानकर्ता नियम बदल रहे हैं । यूआरआई प्रतिबंध अभी भी लागू होगा (लेखन के समय, एचटीएमएल 5 के यूआरआई के उपयोग के आसपास कुछ अनसुलझे मुद्दे हैं)।


मुझे लगता है कि आप किसी चीज़ पर हैं, क्या आप इसे थोड़ा और समझा सकते हैं? सर्वर पर इसे नहीं भेजना कोई समस्या नहीं है, क्योंकि हम GWT का उपयोग कर रहे हैं। मुझे यकीन नहीं है कि आपके द्वारा उद्धृत अनुभाग द्वारा निर्दिष्ट सिंटैक्स पर मैं स्पष्ट हूं।
निकोल

लेकिन :एक जीन-डेलिम है, न कि सब-डेलिम।
बोबिन्स

1
सेमी-कोलन, तो चाहे वह उप परिसीमक या जनरल-परिसीमक में है एक मुद्दा एक pchar के लिए कानूनी है नहीं
Veger

@bobince - :में है pchar, जो अंदर है fragment, इसलिए :अनुमति है। @ रीनेसिस - विकिपीडिया में ABNF पर एक लेख है en.wikipedia.org/wiki/ABNF आप मूल रूप से अनुमत वर्णों की सूची देख रहे हैं, जहाँ OR का/ अर्थ है । मैंने कोई GWT प्रोग्रामिंग नहीं की है, इसलिए मुझे नहीं पता कि यह URI के टुकड़े वाले हिस्से का उपयोग कैसे करता है।
मैकडॉवेल

एक अंतिम प्रश्न - क्या आपके पास इस विनिर्देश के वास्तविक-विश्व अनुप्रयोग में कोई अंतर्दृष्टि है? इसका मतलब यह है कि ब्राउज़रों को :टुकड़े टुकड़े में अनदेखा / छोड़ देना चाहिए ?
निकोल

59

URI मानक पर मैकडॉवेल के विश्लेषण के अलावा, यह भी याद रखें कि टुकड़ा मान्य HTML एंकर नाम होना चाहिए। Http://www.w3.org/TR/html4/types.html#type-name के अनुसार

आईडी और NAME टोकन को एक अक्षर ([A-Za-z]) से शुरू होना चाहिए और किसी भी संख्या में अक्षरों, अंकों ([0-9]), हाइफ़न ("-"), अंडरस्कोर ("_") के बाद होना चाहिए। , कॉलन (":"), और अवधियों ("।")।

इसलिए आप भाग्य में हैं। ":" स्पष्ट रूप से अनुमति है। और किसी को भी "%" नहीं होना चाहिए - इसे बचाना चाहिए, न केवल इसलिए कि "%" वहां अवैध चार है, बल्कि इसलिए भी कि टुकड़े को लंगर नाम चार-चार से मेल खाना चाहिए, इसलिए किसी भी एजेंट को किसी भी तरह से उनके साथ छेड़छाड़ करने की कोशिश नहीं करनी चाहिए।

हालाँकि आपको इसका परीक्षण करना होगा। वेब मानकों का कड़ाई से पालन नहीं किया जाता है, कभी-कभी मानक परस्पर विरोधी होते हैं। उदाहरण के लिए HTTP / 1.1 RFC 2616 अनुरोध URL में क्वेरी स्ट्रिंग की अनुमति नहीं देता है, जबकि HTML एक विधि के साथ एक फॉर्म सबमिट करते समय निर्माण करता है। जो भी वास्तविक दुनिया में लागू होता है वह दिन के अंत में जीतता है।


58

मीडियाविकि और अन्य विकि इंजन अपने URL में नामस्थानों को निर्दिष्ट करने के लिए कॉलोन का उपयोग करते हैं, जाहिर तौर पर कोई बड़ी समस्या नहीं है।

जैसे http://en.wikipedia.org/wiki/Template:Welcome


31
सबसे अधिक प्रासंगिक जवाब। हम सभी जानते हैं कि वेब विकास में वास्तविकता के साथ चश्मा का क्या संबंध है। आप "सुरक्षा" की बहुत बेहतर गारंटी नहीं लेने जा रहे हैं, "दुनिया की शीर्ष 10 वेबसाइटों में से एक यह करता है"।
स्टीवन कॉलिन्स

1
@StevenCollins 3 साल से पहले दिए गए उत्तर से अधिक प्रासंगिक नहीं है जो एक ही बात बताता है :)
मार्टिन जेम्स

7

मैं इस पर भरोसा नहीं करता। यह संभव है %3Aकि कई उपयोगकर्ता-एजेंटों द्वारा url को इनकोड किया गया हो।


1
@ शब्द: हाँ। कुछ कम आज्ञाकारी उपयोगकर्ता-एजेंट गैर-अनुपालन वाले यूआरएल को अनियंत्रित छोड़ देंगे।
असफ

4

से URLEncoderजावाडोक:

HTML फॉर्म एन्कोडिंग के बारे में अधिक जानकारी के लिए, HTML विनिर्देशन से परामर्श करें ।

स्ट्रिंग को एन्कोडिंग करते समय, निम्नलिखित नियम लागू होते हैं:

  • अल्फ़ान्यूमेरिक वर्ण "ए" के माध्यम से "जेड", "ए" के माध्यम से "जेड" और "0" के माध्यम से "9" समान रहते हैं।
  • विशेष वर्ण "।", "-", "*", और "_" समान रहते हैं।
  • अंतरिक्ष वर्ण "" को धन चिह्न "+" में बदल दिया जाता है।
  • अन्य सभी वर्ण असुरक्षित हैं और पहले कुछ एन्कोडिंग योजना का उपयोग करके एक या एक से अधिक बाइट में परिवर्तित हो जाते हैं। फिर प्रत्येक बाइट को 3-वर्ण स्ट्रिंग "% xy" द्वारा दर्शाया जाता है, जहां xy बाइट का दो-अंकीय हेक्साडेसिमल प्रतिनिधित्व है। उपयोग करने के लिए अनुशंसित एन्कोडिंग योजना UTF-8 है। हालाँकि, संगतता कारणों के लिए, यदि एन्कोडिंग निर्दिष्ट नहीं है, तो प्लेटफ़ॉर्म की डिफ़ॉल्ट एन्कोडिंग का उपयोग किया जाता है।

यानी :सुरक्षित नहीं है।


3

मुझे फ़ायरफ़ॉक्स या IE8 में विकिपीडिया के कुछ URL को एन्कोडिंग नहीं दिख रहा है जिसमें चरित्र शामिल है।


1
ओपेरा अर्ध-बृहदान्त्र भी रखता है, लेकिन इस तरह के व्यवहार पर भरोसा करना अच्छी बात नहीं है
वीर

1
नवीनीकरण URL खंड के बारे में बात कर रहा है न कि URL पथ।
गंबूबो

यह प्रश्न लिखते समय विकिपीडिया मेरे विचारों में से एक था। क्या इसके बाद कॉलोन का उपयोग तकनीकी रूप से अमान्य / असुरक्षित है? मैं आमतौर पर विकिपीडिया के URL में देखता हूं (और) एन्कोडेड, लेकिन कभी भी कोलन नहीं, जिसने मुझे थोड़ा भ्रमित कर दिया।
निकोल

3
वेकबैक मशीन में एक: इसके कई लिंक हैं - जैसे web.archive.org/web/20080822150704/http://stackoverflow.com
barrowc

2

यदि किसी प्रोटोकॉल को प्रमाणीकरण की आवश्यकता होती है, तो उपयोगकर्ता नाम और पासवर्ड के बीच विभाजन के रूप में कॉलोन का उपयोग किया जाता है।


0

कोलोन सुरक्षित नहीं है। यहाँ देखें


वह पृष्ठ प्रेरित नहीं करता कि वे सुरक्षित क्यों नहीं हैं। संदर्भित RFC2396 यह नहीं कहता है कि इसे या तो बच जाना चाहिए। इसके अलावा, प्रदान की गई स्क्रिप्ट स्क्रिप्ट इसे एनकोड नहीं करती है (वैसे भी क्रोम 9 में)।
एडम लिंडबर्ग

एडम तुम गलत हो। यह सीधे तौर पर बताता है कि क्या और क्यों।
ktamlyn

-5

यह एक सुरक्षित चरित्र नहीं है और इसका उपयोग यह भेद करने के लिए किया जाता है कि आप अपने डोमेन नाम के बाद किस पोर्ट से कनेक्ट होते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.