HTTP를 통해 웹 양식 인증 데이터를 보내는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/715348

  •  23-08-2019
  •  | 
  •  

문제

내가 아는 회사는 모든 웹 애플리케이션 제품에서 비밀번호 보안 정책을 확고히하기 위해 논의하고 있습니다.

지금 당장 그들은 HTTP를 통해 포스트 양식으로 사용자 이름 / 비밀번호 인증을 보내고 있으므로 일반 텍스트로 전송되고 있습니다.

문제에 대한 가장 간단한 해결책은 단순히 모든 응용 프로그램에서 로그온을 위해 HTTP를 요구하는 것입니다.

글쎄, 대신 암호의 암호 (암호 + 소금 등)의 암호화를하는 대신 내부 논의가 있습니다.

허용 된 HTTP 전용 솔루션이 있습니까?

의견은 ... 모든 사람이 의견을 가지고 있기 때문에 귀하의 추천을 뒷받침 할 수있는 신뢰할 수있는 보안 문헌을 찾고 있습니다. Google만으로도 블로그 게시물로 보내지 마십시오 ... 이미 그 일을 해냈습니다.

OWASP의 권장 사항을 찾았습니다.http://www.owasp.org/index.php/top_10_2007-a7#protection

Microsoft뿐만 아니라 :http://msdn.microsoft.com/en-us/library/aa302420.aspx

편집하다: SSL 사용에 대한 권장 사항을 제공하는 것만으로는 충분하지 않습니다. 지원 문서가 필요합니다. 나는 우리 자신의 클라이언트 측면 암호화를 굴리는 것이 나쁘다는 것을 알고 있습니다. 동료와 경영진에게 신뢰할 수있는 판매를 할 수 있어야합니다.

또한 HTTP 다이제스트가 언급되었습니다. 멋지게 보이지만 Digest는 HTTP 인증을위한 것이며 게시물을 통해 전송되는 데이터는 아닙니다.

도움이 되었습니까?

해결책

+1 to 메르다드의 대답. 집에서 재배 한 암호화를 계속하는 것은 위험합니다.

집에서 재배 한 고객 측 암호화 솔루션에서 취약점을 본 후 여기에서 경험에서 말하면. 대부분의 취약점은 동일한 이유 때문입니다. 데이터 전송은 비밀 키로 암호화로 보호되었지만 키 자체는 안전하지 않은 방식으로 교환되었습니다.

TLS/SSL은 안전한 키 교환뿐만 아니라 안전한 데이터 전송 문제를 해결합니다.

TLS/SSL은 TLS/SSL 세션이 설정되면 Assymmetric Key Cryptography를 사용하여 정보를 뒤로 암호화하는 데 사용되는 대칭 키를 교환하여 민감한 정보를 보호합니다. 대칭 키는 런타임에 생성되며 클라이언트와 서버 간의 공유 비밀입니다. 세션이 데이터를 전송할 준비가되면 다른 모든 트래픽을 암호화하는 데 사용되는이 키입니다.

서버의 공개 및 개인 키는이 공유 비밀을 교환하는 데만 사용됩니다. 공유 키를 손상시키는 유일한 알려진 방법은 서버의 개인 키를 손상시키는 것입니다 (비밀 키가 해독 될 수 있음). 실제로 서버 관리자의 일부에 태만이나 악의가 필요합니다.

자신의 암호화 솔루션을 굴리면 대칭 키를 안전한 방식으로 교환해야합니다. 가장 쉬운 방법은 TLS/SSL을 사용하는 것입니다. 더 어려운 방법은 자신의 암컷 키 교환 암호화 솔루션을 구현하는 것입니다.

다른 팁

나는 매우 추천합니다 자신의 솔루션을 사용하여 (보안 민감한 환경에서) SSL과 함께 가십시오. 입증 된 기술이며 구현하기 쉽습니다.

자체 보안 솔루션을 롤링하는 것은 정말 위험 할 수 있으며 제대로 구현하더라도 (0.000001% 확률로) ~ 할 것이다 비싸다.

데이터 자체가 너무 민감하지 않지만 암호는 사용하는 것이 좋습니다. HTTP 다이제스트 인증 (HTTP 기본 인증과는 상당히 다른 짐승). 직선 HTTP보다 매우 안전하며 서버에서 구현하기가 어렵지 않습니다. 암호가 무엇인지 드러날 수있는 와이어 위에 전송되는 것은 없습니다. 클라이언트가 서버에 올바른 암호를 가지고 있음을 보여줄 수있는 정보 만 있습니다.

응용 프로그램에서 HTTP 다이제스트 인증을 구현하는 방법에 대한 괜찮은 설명을 원한다면 폴 제임스는 훌륭한 기사를 가지고 있습니다.

HTTP 인증의 유일한 실제 문제는 브라우저 자체에 있습니다. UI는 끔찍하지만 JavaScript로 극복하십시오.

A1 해시를 저장하여 암호를 안전하게 저장할 수 있습니다.

업데이트: 다른 답변에서 언급했듯이 서버는 기본 인증을 수락하지 않음으로써 MITM 공격을 피할 수 있지만 클라이언트는 여전히 취약합니다.

업데이트: (a) 클라이언트의 JavaScript에서 암호화를 수행하거나 (b) SSL을 통해 모든 것을 수행하지 않는 한 게시물을 통해 데이터를 보호 할 수 없습니다.

~할 수 있다, 약간의 마법으로 HTTP 인증을 양식으로 사용하십시오. 위의 링크 된 기사는 결국 'HTTP Auth'라고합니다. 그러나 그것은 게시물에 이루어지지 않을 것입니다.

만약 너라면 진짜 게시물을 사용하고 SSL을 사용하고 데이터베이스에 비밀번호를 소금 할 필요가 필요합니다.

CSRF를 피하려면 사용하는 것이 좋습니다 폼 키, 아이디어는 여러 가지 다른 이름으로 진행되지만 몇 년 전 자신의 사용을 위해 슬래시 코드를 해킹하여 그 이름을 선택했습니다.

당신은 자신의 솔루션을 굴리는 데 더 많은 시간과 돈을 소비하고 그것이 안전하다는 것을 확신하지 못할 것입니다. 업계 표준 SSL은 구현하기 쉽고 자신의 솔루션을 만들 수있는 것보다 훨씬 더 안전합니다.

시간 == 돈

인증서를 구매하고 보안 로그인 양식 대신 응용 프로그램에서 작업하는 데 시간을 보내십시오.

클라이언트 측 암호화는 대부분의 MITM 공격에 대해 무력합니다. 공격자는 단순히 스크립트를 제거 할 수 있습니다.

그것은 수동 스니핑 으로부터만 보호합니다. 그것이 당신에게 충분하다면, 당신은 다음을 사용할 수 있습니다.

  • JavaScript로 구현되었습니다. 초기 로그인을위한 챌린지-응답을 구현하기는 쉽지만 공격자 세션의 경우 쿠키는 암호만큼 우수하다는 것을 잊지 마십시오 (단일 IP 로그인 및/또는 스크립트를 사용하여 일회성 쿠키를 생성해야합니다. 내가 생각하는 모든 요청은 어렵고 부서지기 쉬운 솔루션이라고 생각합니다).
  • HTTP 다이제스트 인증. 일회성 해시, 상호 인증 등을 사용할 수 있지만 표준 UI는 절대적으로 반발 적입니다.

... SSL 만 사용하십시오.

HTTP 전용 솔루션은 항상 중간의 공격에 취약합니다.

편집하다: 네트워크 트레이스는 HTTP가 안전하지 않다는 것을 쉽게 증명할 수있는 방법입니다.

자, 여기에 필요한 유일한 답변이 있습니다. 은행은 SSL을 통해 로그인/인증 만 지원합니다. 더 좋은 방법이 있다면, 그들은 그렇게 할 것입니다.

글쎄, 대신 암호의 암호 (암호 + 소금 등)의 암호화를하는 대신 내부 논의가 있습니다.

가장 먼저 해결해야 할 것은 Transit의 데이터와 휴식중인 데이터입니다. OP에서 큰 관심사는 인터넷을 통해 명확한 사용자 이름/비밀번호입니다. 따라서 운송중인 데이터에 관심이 있습니다. SSL을 통한 HTTPS는이 작업을 수행하는 테스트 방법입니다 (그리고 매우 쉬운 수정입니다!). 이제 REST에서 데이터를 위해 직접 롤링하고 싶다면 (DB, 파일 서버 등) 다른 짐승이지만 기존 데이터 암호화 방법은 자신의 롤보다 낫습니다. .

보안에 대한 클라이언트 측에 의존하는 것은 나쁘다. 기간. 기업 환경에서는 표준 설정에 다소 의존 할 수 있습니다. 그러나 궁극적으로 사용자는 멍청하고 JavaScript를 비활성화하는 사람 또는 롤아웃하는 클라이언트 기반 솔루션을 사용하여 사용자 이름/비밀번호를 일반 텍스트로 전송하게됩니다 (서버가 무엇을 해야하는지 모르더라도. 예상 형식이 아니기 때문입니다.

Roll-your-Own은 기존 솔루션이 가지고있는 조사의 대상이되지 않습니다. 코드로 인해 추가 보안 문제를 믹스에 추가 할 수 있습니다.

우리는이 작업 중 일부를 수행하기 위해 웹/모바일 앱을 배출했습니다. 데이터베이스 스토리지에 HTTPS 및 해시/AES 암호화 방법을 사용하여 로그인에 대한 임의의 URL을 만듭니다. 우리의 UI없이 그것을 사용할 간단한 JSON API가 있습니다. http://blog.primestudiosllc.com/security/send-time-limited-secure-logins-withtimebomb-it

당신은 자신의 암호화와 소금을하는 것을 언급했습니다 ... 나는 사용하는 것이 좋습니다 JavaScript MD5 (Yahoo는 SSL이 아닌 페이지에서도 사용됩니다.

그리고 당신은 암호를 두 배로 해시합니다 ... 일부는 이중 해싱으로 인해 충돌 공격이 발생하기 쉽다고 주장 할 수도 있습니다. 사람들이 지금까지 파일에서만 MD5 서명 충돌을 할 수 있었기 때문에 동의하지 않아야합니다.

대형 기업 웹 사이트라면 (그리고 침입 해야하는 이유가 있다면) SSL을 사용하지 않는 변명은 없습니다.

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