Czy dwukropek`: 'jest bezpieczny dla friendly-URL?

Projektujemy system adresów URL, który będzie określał sekcje aplikacji jako słowa oddzielone ukośnikami. W szczególności, jest to w GWT, więc odpowiednie części adresu URL będą w hash (który będzie interpretowany przez warstwę kontrolera po stronie klienta):

http://site/gwturl#section1/section2

Niektóre sekcje mogą wymagać dodatkowych atrybutów, które chcielibyśmy określić za pomocą :, Aby części sekcji adresu URL były jednoznaczne. Kod dzieliłby się najpierw na /, potem na :, Jak to:

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

Oczywiście robimy to dla przyjazności dla url, więc chcielibyśmy się upewnić, że żaden z tych znaków, które będą miały specjalne znaczenie, nie będzie kodowany przez przeglądarki lub jakikolwiek inny system, a skończy się z adresem URL takim jak ten:

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

Czy używanie dwukropka w ten sposób jest bezpieczne (przez co mam na myśli, że nie będzie automatycznie kodowane) dla przeglądarek, systemów bookmarkingowych, nawet kodu Javascript lub Java?

Author: Stevoisiak, 2010-01-12

10 answers

Ostatnio napisałem koder URL, więc jest to całkiem świeże w moim umyśle.

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

Wszystkie znaki w części fragmentu (user:45/comments) są całkowicie legalne dla URI RFC 3986 .

Odpowiednie części ABNF:

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

Poza tymi ograniczeniami, część fragment nie ma zdefiniowanej struktury poza tą, którą nadaje jej aplikacja. schemat, http, mówi tylko, że nie wysyłasz tej części do serwer.


EDIT:

D ' Oh!

Pomimo moich twierdzeń o specyfikacji URI, nieodwracalny dostarcza poprawną odpowiedź, gdy wskazuje , że Specyfikacja HTML 4 ogranicza nazwy/identyfikatory elementów .

zauważ, że reguły identyfikatorów zmieniają się W HTML 5 . Ograniczenia URI nadal będą obowiązywać(w czasie pisania, istnieją pewne nierozwiązane problemy dotyczące korzystania z URI w HTML 5).

 85
Author: McDowell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:17

MediaWiki i inne silniki wiki używają dwukropków w swoich adresach URL do oznaczania przestrzeni nazw, bez większych problemów.

Eg http://en.wikipedia.org/wiki/Template:Welcome

 61
Author: Paul Wray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-11 00:45:24

Poza analizą standardu URI, Pamiętaj również, że fragment musi mieć poprawną nazwę kotwicy HTML. Zgodnie z http://www.w3.org/TR/html4/types.html#type-name

Tokeny ID i NAME muszą zaczynać się od litera ([a-Za-z]) i może być dowolną liczbą liter, cyfr ([0-9]), myślniki ( " - " ), podkreślenia ("_"), dwukropki ( " :") i okresy (".").

Więc masz szczęście. ": "jest wyraźnie dozwolone. I nikt nie powinien "%"- uciec, nie tylko dlatego, że " % " jest tam nielegalnym znakiem, ale także dlatego, że fragment musi pasować do nazwy kotwicy znak-po-znaku, dlatego żaden agent nie powinien próbować manipulować nimi w jakikolwiek sposób.

Jednak trzeba to przetestować. Standardy internetowe nie są ściśle przestrzegane, czasami standardy są sprzeczne. Na przykład HTTP / 1.1 RFC 2616 nie zezwala na ciąg zapytania w żądanym adresie URL, podczas gdy HTML konstruuje go podczas wysyłania formularza za pomocą metody GET. Cokolwiek zaimplementowane w realnym świecie wygrywa w koniec dnia.

 61
Author: irreputable,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-26 08:18:43

Nie liczyłbym na to. Prawdopodobnie adres URL zostanie zakodowany jako %3A przez wielu użytkowników.

 8
Author: Asaph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-12 23:06:30

From URLEncoder javadoc:

Aby uzyskać więcej informacji o formularzu HTML kodowanie, sprawdź HTML specyfikacja .

Podczas kodowania ciągu znaków, następujące zasady obowiązują:

  • znaki alfanumeryczne " a" przez "z"," A "przez" Z " i " 0" przez " 9 " pozostają takie same.
  • The znaki specjalne ".", "-", "*", oraz "_"pozostają takie same.
  • przestrzeń znak "" jest zamieniany na plus znak "+".
  • wszystkie inne znaki to niebezpieczne i są najpierw przekształcane w jeden lub więcej bajtów przy użyciu jakiegoś kodowania schemat. Wtedy każdy bajt jest reprezentowany przez 3-znakowy ciąg "%xy", gdzie xy jest dwucyfrowym szesnastkowym reprezentacja bajtu. Na zalecanym schematem kodowania jest UTF-8. Jednak dla zgodności powodów, jeśli kodowanie nie jest określone, wtedy domyślne kodowanie z platformy jest używany.

Czyli : nie jest bezpiecznie.

 4
Author: axtavt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-12 23:08:23

Nie widzę Firefoksa ani IE8 kodujących niektóre adresy URL Wikipedii zawierające znak.

 3
Author: kprobst,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-12 23:10:20

Dwukropki są używane jako podział na nazwę użytkownika i hasło, jeśli protokół wymaga uwierzytelnienia.

 2
Author: JP Silvashy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-13 00:46:39

Okrężnica nie jest Bezpieczna. zobacz tutaj

 0
Author: Bob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-12 23:09:31

Google używa również dwukropków.

W tej specyfikacji , używają dwukropków dla niestandardowych nazw metod.

 0
Author: Sabfir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-13 00:55:40

Nie jest to Bezpieczny znak i jest używany do odróżnienia portu, z którym się łączysz, gdy jest tuż po nazwie domeny

 -5
Author: RHicke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-13 00:05:24