콜론`:`은 친숙한 URL 사용에 안전합니까?


109

슬래시로 구분 된 단어로 애플리케이션 섹션을 지정하는 URL 시스템을 설계하고 있습니다. 특히 이것은 GWT에 있으므로 URL의 관련 부분은 해시 (클라이언트 측의 컨트롤러 계층에서 해석 됨)에 있습니다.

http://site/gwturl#section1/section2

일부 섹션 :에는 URL의 섹션 부분이 모호하지 않도록를 사용하여 지정하려는 추가 속성이 필요할 수 있습니다 . 코드는 /다음 :과 같이 에서 먼저 분할 된 다음에서 분할됩니다 .

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

물론 우리는 URL 친 화성을 위해이 작업을 수행하고 있으므로 특별한 의미를 갖는 이러한 문자가 브라우저 나 다른 시스템에 의해 URL 인코딩되지 않고 다음과 같은 URL로 끝나는 것을 확인하고 싶습니다. 이:

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

이 방법에 콜론 사용 안전 , 시스템을 북마크도 자바 스크립트 또는 자바 코드, 브라우저 (있는 I 평균 자동으로 인코딩되지 않습니다)을?


클라이언트 측에서만 URL을 사용하도록 (더 명확하게) 지정하는 것이 좋은 생각일까요? 많은 답변 (내와 마찬가지로)은 HTTP를 사용하여 URL을 서버에 보낼 것이라고 가정하는 것 같습니다.
Veger 2010 년

조각의 사용이 클라이언트 측에서 발생한다는 설명을 추가하기 위해 편집되었습니다.
Nicole

궁금합니다. 10 개월 후이 URL 체계가 효과가 있었나요? 나는 같은 계획을 사용하는 것을 고려하고있다.
Jonathan Swinney

1
@Jonathan Swinney, 불행히도 저는이 프로젝트 (및 회사)에서 나아갔습니다.하지만 여기에있는 답변은 이것이 갈 길이라는 것을 만족 시켰습니다. 새 프로젝트를 시작하려면이 스키마를 사용하지만 #!페이지가 상태 저장임을 표시하는 데에도 사용해야 합니다. googlewebmastercentral.blogspot.com/2009/10/… 참조 (이 제안은 Facebook과 같은 AJAX 사용자가 많음)
Nicole

방금 WhatsApp이 첫 번째 콜론에서 URL을 잘라낸다는 것을 알았으므로 예를 들어 Google지도 URL을 쓸모 없게 만들었습니다. 그렇습니다. 탈출하는 것이 중요합니다.
Petruza

답변:


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는이 부분을 서버로 보내지 않는다고 만 말합니다.


편집하다:

오!

URI 사양에 대한 내 주장에도 불구하고 irreputableHTML 4 사양이 요소 이름 / 식별자를 제한 한다고 지적 할 때 정답을 제공합니다 .

식별자 규칙은 HTML 5에서 변경됩니다 . URI 제한은 계속 적용됩니다 (작성 당시 HTML 5의 URI 사용과 관련하여 해결되지 않은 문제가 있습니다).


뭔가하고있는 것 같은데 좀 더 설명해 주 시겠어요? GWT를 사용하고 있기 때문에 이것을 서버로 보내지 않는 것은 문제가되지 않습니다. 인용 한 섹션에 지정된 구문이 명확하지 않습니다.
Nicole

그러나 :하위 delim이 아니라 gen-delim입니다.
bobince

1
세미콜론은 pchar에 대해 합법적이므로 sub-delim 또는 gen-delim에 있는지 여부는 문제가되지 않습니다.
Veger

@bobince - :pchar에있는, fragment그래서 :허용됩니다. @Renesis-Wikipedia에는 ​​ABNF에 대한 기사가 있습니다. en.wikipedia.org/wiki/ABNF 기본적으로 허용되는 문자 목록을보고 있습니다. 여기서 OR을/ 의미 합니다 . GWT 프로그래밍을 한 적이 없어서 URI의 조각 부분을 사용하는 방법을 모르겠습니다.
McDowell

마지막 질문입니다.이 사양의 실제 적용에 대한 통찰력이 있습니까? 이것은 브라우저가 :프래그먼트에서를 무시 (인코딩을 건너 뛰어야 함)해야 함을 의미합니까 ?
Nicole

59

URI 표준에 대한 McDowell의 분석 외에도 조각은 유효한 HTML 앵커 이름이어야합니다. http://www.w3.org/TR/html4/types.html#type-name 에 따르면

ID 및 NAME 토큰은 문자 ([A-Za-z])로 시작해야하며 그 뒤에 문자, 숫자 ([0-9]), 하이픈 ( "-"), 밑줄 ( "_")이 올 수 있습니다. , 콜론 ( ":") 및 마침표 ( ".").

그래서 당신은 운이 좋습니다. ":"은 명시 적으로 허용됩니다. 그리고 누구도 "%"를 이스케이프해서는 안됩니다. "%"가 거기에있는 잘못된 문자이기 때문일뿐만 아니라 프래그먼트가 앵커 이름 문자별로 일치해야하기 때문에 어떤 에이전트도 어떤 방식 으로든 변경하려고 시도해서는 안됩니다.

그러나 당신은 그것을 테스트해야합니다. 웹 표준을 엄격하게 따르지 않고 때로는 표준이 충돌합니다. 예를 들어 HTTP / 1.1 RFC 2616은 요청 URL에서 쿼리 문자열을 허용하지 않지만 HTML은 GET 메서드로 양식을 제출할 때 하나를 구성합니다. 현실 세계에서 구현 된 것이 결국 승리합니다.


58

미디어 위키와 다른 위키 엔진은 분명히 큰 문제없이 네임 스페이스를 지정하기 위해 URL에 콜론을 사용합니다.

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


31
가장 관련성이 높은 답변입니다. 우리 모두는 사양에있는 것이 웹 개발의 현실과 거의 관련이 없다는 것을 알고 있습니다. "세계 10 대 웹 사이트 중 하나가 그렇게하는 것"보다 "안전성"에 대해 훨씬 더 나은 보장을받을 수는 없습니다.
Steven Collins

1
이 일에 3 년 이전에 주어진 답보다 @StevenCollins 더 이상 관련이 상태를 정확히 똑같은 :
마틴 제임스

7

나는 그것에 의지하지 않을 것입니다. %3A많은 사용자 에이전트에서 URL 인코딩을받을 가능성이 높습니다 .


1
@arbales : 네. 일부 덜 준수하는 사용자 에이전트는 준수하지 않는 URL을 장식하지 않은 채로 둡니다.
Asaph

4

에서 URLEncoder의 javadoc :

HTML 양식 인코딩에 대한 자세한 내용은 HTML 사양을 참조하세요 .

문자열을 인코딩 할 때 다음 규칙이 적용됩니다.

  • 영숫자 문자 "a"- "z", "A"- "Z"및 "0"- "9"는 동일하게 유지됩니다.
  • 특수 문자 ".", "-", "*"및 "_"는 동일하게 유지됩니다.
  • 공백 문자 ""는 더하기 기호 "+"로 변환됩니다.
  • 다른 모든 문자는 안전하지 않으며 먼저 일부 인코딩 체계를 사용하여 하나 이상의 바이트로 변환됩니다. 그런 다음 각 바이트는 3 문자 문자열 "% xy"로 표시됩니다. 여기서 xy는 바이트의 두 자리 16 진수 표현입니다. 사용할 권장 인코딩 체계는 UTF-8입니다. 그러나 호환성을 위해 인코딩이 지정되지 않은 경우 플랫폼의 기본 인코딩이 사용됩니다.

즉, :안전하지 않습니다.


3

문자가 포함 된 일부 Wikipedia URL 을 인코딩하는 Firefox 또는 IE8이 표시되지 않습니다 .


1
Opera는 또한 세미콜론을 유지하지만 그러한 행동을 고려하는 것은 좋은 일이 아닙니다
Veger

1
Renesis는 URL 경로가 아니라 URL 조각에 대해 이야기하고 있습니다.
Gumbo

위키피디아는이 질문을 쓸 때 제 생각 중 하나였습니다. 콜론의 사용은 기술적으로 유효하지 않거나 안전하지 않습니까? 일반적으로 Wikipedia URL에서 인코딩 된 (및)를 볼 수 있지만 콜론은 표시되지 않아 혼란스러워졌습니다.
Nicole

3
웨이 백 머신이있다 : 그 많은 링크에서 - 예를 들어 web.archive.org/web/20080822150704/http://stackoverflow.com
barrowc

2

프로토콜에 인증이 필요한 경우 콜론은 사용자 이름과 비밀번호를 분할하는 데 사용됩니다.


0

콜론은 안전하지 않습니다. 여기를 보아라


이 페이지는 왜 그들이 안전하지 않은지에 대한 동기를 부여하지 않습니다. 참조 된 RFC2396 도 이스케이프되어야한다고 말하지 않습니다. 또한 제공된 변환기 스크립트는 인코딩하지 않습니다 (어쨌든 Chrome 9에서).
Adam Lindberg 2011 년

아담 당신은 틀 렸습니다. 그 내용과 이유를 직접 설명합니다.
ktamlyn

-5

안전한 문자가 아니며 도메인 이름 바로 뒤에 연결되는 포트를 구별하는 데 사용됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.