%EB%A5%BC%20%EC%A0%84%EB%8B%AC%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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에서 사용자 이름과 비밀번호에 대한 지원을 중단했습니다.몇 년 전인데 다시 돌아올 것 같지 않습니다.