투고 요청 본문에 있는 Json 객체에 사용자 이름과 비밀번호를 전송해도 안전한가요?
웹 어플리케이션을 구축하고 있으며 웹 서버는 안전합니다.즉, 접속을 암호화하기 위해 프런트엔드와 함께 ssl 증명서를 사용합니다.
사용자가 로그인하면 이와 같은 JSON 개체가 생성되어 서버로 전송됩니다.
{
username:"the user's username",
password:"the user's password"
}
서버에서는 salt를 사용하는 해시 알고리즘에 의해 검증됩니다.확인되면 일정 시간 동안 유효한 api 토큰이 생성되고 요청 시 사용자를 확인하기 위해 헤더 내에서 앞뒤로 전달됩니다.유저명과 패스워드를 송신하는 것은, 이 베스트 프랙티스/시큐어입니까, 아니면 헤더로 송신하는 것이 좋습니까?
여러 가지 포인트로 나눕니다.
1) 유효한 SSL 증명서를 사용하여 사용자와 서버 간의 통신을 보호합니다(유효해야 합니다).
2) POST 요청 본문에 사용자 이름과 패스워드를 송신하는 것이 베스트 프랙티스입니다(증명서 등의 기밀 정보를 송신할 때는 GET를 사용하지 마십시오).
3) HTTP 요청 및 응답 헤더에서 api 토큰을 보내는 것이 베스트 프랙티스입니다(세션 토큰 등의 기밀 정보를 보내기 위해 GET을 사용하지 마십시오).
따라서 위의 점에 따르면 이 구현에는 위험이 없다고 생각되지만 다음 사항을 고려해야 합니다.
1) idle 사용자일 경우 API 토큰의 타임아웃은 짧아야 합니다.(5~15분은 애플리케이션의 중요도에 따른 평균)
2) API 토큰의 길이는 약 30~40자의 긴 문자열이어야 합니다.
3) API 토큰 생성은 랜덤화되어야 하며 (세션 예측 공격)으로부터 보호하기 위해 예측하기 어렵다.
도움이 되길 바랍니다.
여기서 설명하는 것은 기본적으로 HTTP 기본 인증입니다.
유저명과 패스워드를 송신하는 것은, 이 베스트 프랙티스/시큐어입니까, 아니면 헤더로 송신하는 것이 좋습니까?
보안의 관점에서는, credential을 본문에 송신할 것인지 헤더에 송신할 것인지 큰 차이를 생각할 수 없습니다.기본적으로 클리어 텍스트메시지를 읽을 수 있는 사용자는 두 컴포넌트의 credential을 볼 수 있습니다.기본 인증을 사용하는 일반적인 방법은 HTTP 헤더를 사용하는 것입니다.단, 다음과 같습니다.
Authorization: Basic VGVzdFVzZXI6UGFzc3dvcmQxMjM0
서 ''는VGVzdFVzZXI6UGFzc3dvcmQxMjM0
syslog, base64 "credential" 입니다.은 다음과 같습니다.TestUser:Password1234
이 경우 전송 중인 credential에 대한 보호는 TLS뿐이므로 통신 채널에서 클리어 메시지가 노출될 가능성이 있는 모든 노드를 식별해야 합니다.예를 들어 TLS를 종료하는 프록시를 사용하는 경우 이러한 프록시는 MITM 공격의 잠재적 벡터입니다.
전송중의 credential의 시큐러티를 강화하는 경우는, 클라이언트측의 인증 끝난 공개 키를 사용해 credential을 암호화하기 위해서, 비대칭 엔드 투 엔드 암호화를 실장하는 방법이 있습니다(예를 들면, 다음과 같습니다).신뢰할 수 있는 CA에 의해 서명된 증명서)를 사용하여 대상 서버에서만 알려진 개인 키를 사용하여 복호화합니다.이 경우 전송 중인 메시지에 대해 크게 걱정할 필요가 없습니다.
언급URL : https://stackoverflow.com/questions/45345146/is-it-secure-to-send-username-and-password-in-a-json-object-in-the-body-of-a-pos
'programing' 카테고리의 다른 글
UI-Router - 페이지 재렌더/재로드 없이 $state 변경 (0) | 2023.04.06 |
---|---|
제목 없는 Wordpress 동적 사이드바 (0) | 2023.04.06 |
스프링 부트 클래스 패스 (0) | 2023.04.06 |
React.js 노드 마운트 해제 중 (0) | 2023.04.06 |
문자열을 작은 따옴표로 JSON으로 구문 분석하시겠습니까? (0) | 2023.04.06 |