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?
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).
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.
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.
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.
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.
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
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.
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
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.
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
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