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


153

나는 이것이 불가능하다고 생각하지만, 내가 아는 사람은 그것이 효과가 있다고 주장했다. 나는 어떤 매개 변수를 시도 해야할지조차 모르며이 문서를 어디에도 찾지 못했습니다.

http://myserver.com/~user=username&password=mypassword를 시도 했지만 작동하지 않습니다.

실제로 HTTP 매개 변수 (GET 또는 POST)를 통해 사용자 / 패스를 전달할 수 없다는 것을 확인할 수 있습니까?



@ 샘-무엇? 완전한 URL은 어떻게 생겼습니까?
ripper234

4
모든 사양 ietf.org/rfc/rfc1738.txt (3.1)
Smudge

@sam-죄송합니다. 어떤 이유로 댓글을 구문 분석하지 못했습니다.
ripper234

답변:


199

표준 HTTP 인증의 쿼리 매개 변수를 통해 사용자 이름과 비밀번호를 전달할 수는 없습니다. 대신 다음과 같은 특수 URL 형식을 사용합니다 http://username:password@example.com/.-표준 HTTP "Authorization"헤더로 자격 증명을 보냅니다.

말한 사람이 쿼리 매개 변수를보고 자격 증명을 확인한 사용자 지정 모듈이나 코드를 생각했을 수 있습니다. 이것은 표준 HTTP 인증은 아니지만 응용 프로그램별로 다릅니다.


1
고마워, 이것은 내가 찾던 것입니다 ... GET 매개 변수가 중요하지 않으며 URL로 만들 수 있습니다.
ripper234

42
참고로,이 http://username:password@example.com형식은 더 이상 IE 또는 Chrome 에서 지원되지 않습니다 .
TJ Crowder 2016 년

11
실제로 Chrome에서는 제대로 작동합니다. 오직 IE만이 버릇없는 놈입니다.
Damien Overeem ツ

1
어떤 크롬 버전을 사용하고 계십니까? 나는 맥 OS X 37에 있고 그것은 나를 위해 작동하지 않는 것 같습니다
크리스 DaMour

11
그 후 Chrome에서 한동안 비활성화했음을 알게되었지만 나중에이 기능을 다시 활성화했습니다. 또한 Safari에서 이러한 유형의 링크를 실행할 때 피싱 오류가 발생한다는 사실을 알게되었습니다. 기본적으로 URL 기반 http 인증 시간이 끝났습니다.
Damien Overeem ツ

18

URL의 기본 인증 매개 변수 전달은 권장되지 않습니다.

이를 위해 Authorization 헤더 필드가 있습니다. http 헤더 목록

사용 방법은 다음과 같습니다. 기본 액세스 인증

또한 일부 브라우저에서 여전히 지원하지만 URL에 기본 인증 자격 증명을 추가하는 권장 솔루션은 권장되지 않습니다.

또한 읽기 RFC 2617에 장 4.1 - HTTP 인증을 기본 인증을 사용하지 않는 이유에 대한 자세한 내용은.


쿼리 문자열에서 인증 매개 변수 전달

OAuth 또는 기타 인증 서비스를 사용하는 경우 인증 헤더 대신 쿼리 문자열로 액세스 토큰을 보낼 수도 있습니다.

GET https://www.example.com/api/v1/users/1?access_token=1234567890abcdefghijklmnopqrstuvwxyzABCD

인증 헤더를 URL로 인코딩하는 방법은 무엇입니까?
womble

2
신고하신 양식이 더 이상 사용되지 않습니까?
womble

2
"이 목적을 위해 Authorization 헤더 필드가 있습니다"라는 질문에 인증 매개 변수 를 URL에 넣는 방법을 묻는 것이 었습니다 . HTTP 헤더 필드를 URL로 인코딩 할 수없는 경우 (답변 할 수없는) 답변은 안전하지 않습니다.
womble

URI 표준에서 URI의 기본 인증 매개 변수 전달이 더 이상 사용되지 않는다고 말하는 부분을 언급 할 수 있습니까? RFC 2396은 일반 텍스트의 인증 세부 정보가 여러 상황에서 좋은 아이디어가 아니며 (동의하지는 않음) RFC 7235에 대해서는 언급하지 않기 때문에 "권장하지 않음"이라고 말합니다. 내가 검색 할 수있는 사양에서는 더 이상 사용되지 않는다고 말합니다.
Lie Ryan

1
@Wilt : 사과해야합니다. 정말 맞습니다. 사양이 "변경되었다"는 귀하의 힌트는 추가 조사를 요구했습니다 (RFC는 일단 게시 / 번호를 매기면 수정되지 않습니다). 방금 RFC 2396이 RFC 3986 으로 대체되었으며 이전에는 찾을 수 없었습니다. RFC 3986은 username : password 구문의 사용 중단에 대해 언급하고 있습니다.Use of the format "user:password" in the userinfo field is deprecated.
Lie Ryan

17

http : // username : password@example.com 은 FireFox, Chrome, Safari에서는 작동하지만 IE에서는 작동하지 않습니다.

Microsoft 기술 자료


2
이 기능은 Chrome 19 이상에서 제거되었습니다. 참조 code.google.com/p/chromium/issues/detail?id=123150
모세 카츠에게

4
해당 버그 보고서를 읽음으로써 Chrome 20에 다시 추가되었습니다. 확실히 그렇지 않은 경우 계속해서 불만을 제기 할 것으로 예상됩니다.
womble

이제 Internet Explorer ( connect.microsoft.com/IE/feedback/details/873575/…)에 요청했습니다 . 약간 다른 사용 사례이지만 동일한 문제를 해결합니다.)
SimonSimCity

@Diago 암호에 '@'이 있으면 작동하지 않습니다. 치명적인 오류가 발생합니다. 누구나 사용자 이름과 비밀번호를 한 번에 제공 할 수있는 방법을 알려주시겠습니까
Ashish Jain

@AshishJain-로 @암호를 이스케이프 처리하려고 합니다 %40. (하지만 이것이 작동하는지 모르겠으며 서버 또는 브라우저 / 서버 조합에 따라 달라질 수 있습니다.)
David Moles

0

GET 매개 변수로 문자열을 보낼 수는 있지만, 특히 AJAX 요청에없는 경우에는 로그인 및 비밀번호를 표시하는 것이 좋습니다.

그러나 로그인 및 비밀번호를 추출하기 위해 서버 페이지를 코딩 한 후 필요한 방식으로 유효성을 검사하고 사용해야합니다.

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