URL 매개변수에서 HTTP 기본 인증을 위한 비밀번호에 물음표(?)를 전달하는 방법은 무엇입니까?

URL 매개변수에서 HTTP 기본 인증을 위한 비밀번호에 물음표(?)를 전달하는 방법은 무엇입니까?

HTTP 기본 인증이 필요한 웹사이트를 자동화하고 있습니다.

이 링크에 제공된 제안은 대부분의 경우 매력적으로 작동합니다.

URL 매개변수에서 HTTP 기본 인증을 위한 사용자/패스를 전달할 수 있습니까?

?그러나 일부 사용자의 경우 비밀번호에 물음표( )가 표시되어 있습니다 . 물음표를 피하는 방법에 대해 조언 부탁드립니다.

PS 나는 @사용자 이름에서 %40.

답변1

나는 당신이사용자 정보"URL 매개변수"가 아닌 사용자 자격 증명이 전달되는 URL의 일부(쿼리 문자열):

https://<userinfo>@example.com/foo?<query-string>

URL의 한 부분에서 허용되지 않는 문자(특별한 의미를 가질 수 있기 때문에)와 마찬가지로 URL로 인코딩되어야 합니다(퍼센트 인코딩 된) %다음에 해당 문자에 대한 두 자리 16진수 코드가 표시됩니다.

그래서 @%40이고 ?입니다 %3F.

하지만 URL 인코딩이 필요한 문자는 이 두 문자 뿐만이 아닙니다. URL의 해당 부분을 올바르게 URL 인코딩하려면 스크립트의 URL 인코딩 함수를 통해 값을 전달해야 합니다.

RFC 3986에서 허용되는(인코딩되지 않은) 문자를 정의합니다.사용자 정보URL의 일부:

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

:따라서 및를 포함한 다른 모든 항목은 백분율로 인코딩되어야 합니다 %.사용자또는비밀번호부분(특별한 의미를 무효화하기 위해).

같은 문서에는 다음과 같이 명시되어 있습니다.

userinfo 필드에 "user:password" 형식을 사용하는 것은 더 이상 사용되지 않습니다.

결과적으로 브라우저 지원은 패치가 되어 버전이 계속 바뀌었습니다(보안이 주요 관심사). 최신 버전의 Chrome(테스트 v79)과 Firefox는 URL에서 사용자 자격 증명을 지원한다고 생각합니다. 최신 Safari(?)에서도 작동한다는 의견을 본 적이 있습니다. 비록 오랫동안 작동하지 않았고 현재 저에게도 작동하지 않지만(iOS 12.4.1에서 최신 버전을 실행하고 있지는 않지만) ). 그리고IE는 URL에서 사용자 이름과 비밀번호에 대한 지원을 중단했습니다.몇 년 전인데 다시 돌아올 것 같지 않습니다.

관련 정보