문제

HTTPS를 사용하는 보안 웹 기반 API를 만들고 있습니다.그러나 사용자가 쿼리 문자열을 사용하여 구성(비밀번호 전송 포함)하도록 허용하면 이것도 안전합니까, 아니면 POST를 통해 수행하도록 강제해야 합니까?

도움이 되었습니까?

해결책

예, 그것은입니다. 그러나 민감한 데이터를 위해 Get을 사용하는 것은 나쁜 생각입니다. 몇 가지 이유로 :

  • 대부분의 HTTP 참조기 누출 (대상 페이지의 외부 이미지가 비밀번호 누출 [1]).
  • 비밀번호는 서버 로그에 저장됩니다 (분명히 나쁘다)
  • 브라우저의 역사 캐시

따라서 QueryString이 확보 되더라도 QueryString을 통해 민감한 데이터를 전송하는 것이 좋습니다.

1] RFC는 브라우저가 HTTPS에서 HTTP로 추천자를 보내지 않아야한다고 언급해야한다는 점에 유의해야합니다. 그러나 이것이 잘못된 제 3 자 브라우저 도구 모음이나 HTTPS 사이트의 외부 이미지/플래시가 누출되지 않는다는 의미는 아닙니다.

다른 팁

브라우저가 먼저 보안 연결을 설정 한 다음 GET 매개 변수가 포함 된 요청을 보내므로 "네트워크 패킷 스니핑"관점에서 GET 요청이 안전합니다. 그러나 Get URL은 사용자 브라우저 기록 / 자동 완성에 저장 될 것입니다. 이는 예를 들어 비밀번호 데이터를 저장하기에 좋지 않습니다. 물론 이것은 브라우저에서 서비스에 액세스 할 수있는 더 넓은 "웹 서비스"정의를 취하는 경우에만 적용됩니다. 사용자 정의 응용 프로그램에서만 액세스하는 경우 문제가되지 않아야합니다.

따라서 최소한 비밀번호에 Post를 사용하는 것이 선호되어야합니다. 또한 LittleGeek이 게시 된 링크에서 지적한 바와 같이 Get URL은 서버 로그에 기록 될 가능성이 높습니다.

, 쿼리 문자열이 암호화됩니다.

그 이유는 쿼리 문자열이 애플리케이션 계층 프로토콜인 HTTP 프로토콜의 일부인 반면 보안(SSL/TLS) 부분은 전송 계층에서 나오기 때문입니다.SSL 연결이 먼저 설정된 다음 쿼리 매개변수(HTTP 프로토콜에 속함)가 서버로 전송됩니다.

SSL 연결을 설정할 때 클라이언트는 다음 단계를 순서대로 수행합니다.다음과 같은 사이트에 로그인을 시도한다고 가정해 보겠습니다. example.com 쿼리 매개변수를 사용하여 자격 증명을 보내려고 합니다.전체 URL은 다음과 같습니다.

https://example.com/login?username=alice&password=12345)
  1. 클라이언트(예: 브라우저/모바일 앱)가 먼저 도메인 이름을 확인합니다. example.com IP 주소로 (124.21.12.31) DNS 요청을 사용합니다.해당 정보를 쿼리할 때 도메인별 정보만 사용됩니다. example.com 사용하게 될 것이다.
  2. 이제 클라이언트는 IP 주소를 사용하여 서버에 연결을 시도합니다. 124.21.12.31 포트 443(기본 HTTP 포트 80이 아닌 SSL 서비스 포트)에 연결을 시도합니다.
  3. 이제 서버는 example.com 클라이언트에게 인증서를 보냅니다.
  4. 클라이언트는 인증서를 확인하고 세션에 대한 공유 비밀 키 교환을 시작합니다.
  5. 보안 연결이 성공적으로 설정된 후에만 쿼리 매개변수가 보안 연결을 통해 전송됩니다.

따라서 민감한 데이터가 노출되지 않습니다.그러나 이 방법을 사용하여 HTTPS 세션을 통해 자격 증명을 보내는 것은 최선의 방법이 아닙니다.다른 접근 방식을 취해야 합니다.

예. HTTPS 세션의 전체 텍스트는 SSL에 의해 보호됩니다. 여기에는 쿼리와 헤더가 포함됩니다. 그런 점에서 게시물과 Get은 정확히 동일합니다.

방법의 보안에 관해서는 적절한 검사 없이는 말할 수있는 실제 방법이 없습니다.

SSL은 먼저 호스트에 연결되므로 호스트 이름과 포트 번호는 명확한 텍스트로 전송됩니다. 호스트가 응답하고 도전이 성공하면 클라이언트는 실제 URL과 함께 HTTP 요청을 암호화하여 서버로 보냅니다.

이 보안을 위반하는 방법에는 여러 가지가 있습니다.

"중간에있는 사람"역할을하도록 프록시를 구성 할 수 있습니다. 기본적으로 브라우저는 요청을 실제 서버에 프록시에 연결하도록 보냅니다. 프록시 가이 방식으로 구성되면 SSL을 통해 실제 서버에 연결되지만 브라우저는 여전히 프록시와 대화합니다. 따라서 공격자가 프록시에 액세스 할 수 있다면 명확한 텍스트로 흐르는 모든 데이터를 볼 수 있습니다.

귀하의 요청은 브라우저 기록에서도 볼 수 있습니다. 사용자는 사이트를 북마크하려고 유혹 할 수 있습니다. 일부 사용자는 북마크 동기화 도구가 설치되어 있으므로 암호가 deli.ci.us 또는 다른 장소에서 끝날 수 있습니다.

마지막으로, 누군가가 컴퓨터를 해킹하고 키보드 로거 또는 스크린 스크레이퍼 (및 많은 트로이 목마 유형 바이러스)를 설치했을 수도 있습니다. 비밀번호는 화면에서 직접 표시되므로 (암호 대화 상자에서 "*"와 반대로) 다른 보안 구멍입니다.

결론 : 보안과 관련하여 항상 구타 경로에 의존하십시오. 당신이 모르는 것이 너무 많고, 생각하지 않으며, 목이 부러 질 것입니다.

나는에 대한 진술에 동의하지 않습니다 ...] http 참조기 누출 (대상 페이지의 외부 이미지가 비밀번호가 누출 될 수 있음) 안에 Slough의 응답.

HTTP 1.1 RFC 명시 적으로 상태:

참조 페이지가 보안 프로토콜로 전송 된 경우 클라이언트는 (비 보안) HTTP 요청에 참조 헤더 필드를 포함해서는 안됩니다.

어쨌든 서버 로그와 브라우저 기록은 쿼리 문자열에 민감한 데이터를 넣지 않는 충분한 이유 이상입니다.

예, 아무도 모니터에서 어깨 너머로보고 있지 않는 한.

예, 순간부터 HTTPS 연결을 설정합니다. 게시물이 SSL을 통해 전송되는 쿼리 문자열 (get).

일부 소금이 추가 된 MD5 HASH PARAM으로 비밀번호를 보낼 수 있습니다. Auth의 서버 측에서 비교하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top