웹 응용 프로그램 인증 / 보안에 대한 모범 사례 (모든 플랫폼)


12

오늘 관리자로부터 질문을 받았습니다. 특히 일반적인 사용자 이름 비밀번호 로그인 필드의 "비밀번호 기억"에 대한 많은 인기있는 브라우저의 특성과 관련하여 웹 양식 애플리케이션 인증을 위해 허용 가능한 디자인으로 간주되는 사항에 대한 내 생각을 묻습니다. .

허용되는 것으로 생각되는 답변을 찾는 데 문제가 있습니다. 소니의 당황스러운 보안 결함에 비추어 볼 때 사람들에게 저장되는 데이터의 감도가 낮더라도 조심해야합니다. 우리는 주민등록번호 또는 주소를 저장하지 않지만 전화 번호, 이메일 주소 및 방문자 사진을 저장합니다.

그는 사용자가 단순히 공개 터미널에서 비밀번호를 기억하고 누군가가이 터미널에서 점프하여 승인되지 않은 방식으로 데이터를 보거나 수정하기 시작할 수 있다고 우려합니다. 그러나 적어도 Windows 워크 스테이션에서는 브라우저가 Windows 사용자 계정에서 "비밀번호를 기억하지"않을 것입니다.

이 외에도 서버 측에서 단방향 암호 암호화 (데이터베이스에 암호화 된 암호 저장, 서버에서 사용자 제공 암호 암호화, 데이터베이스의 암호화 된 문자열 비교)를 구현하고 있습니다. SSL 암호화를 즉시 통합 할 계획은 없지만 여전히 옵션입니다.

이 접근 방식의 주요 보안 결함이 있습니까? 더 나은 제안이 있습니까?


단방향 암호화 (예 : 해시) 비밀번호를 저장하는 경우 강력한 해시 (예 : MD5 아님)를 사용하거나 비밀번호에 소금을 바르거나 ( stackoverflow.com/questions/420843/… 참조 ) 두 가지 모두를 확인하십시오 .
Jordan Reiter

OWASP 웹 사이트 ( owasp.org )를 확인하십시오 . 다양한 프로토콜에 대한 "치트 시트"를 포함하여 매우 유용한 보안 정보가 많이 있습니다.
랄프

여기에는 양식 기반 웹 사이트 인증에 대한 지침이 있습니다. stackoverflow.com/a/477578/463478
Only

답변:


13

몇 가지 고급 팁 :

  1. 필요한 데이터 만 저장
  2. 민감한 데이터 (SSN, 비밀번호, 신용 카드 번호 등)를 저장할 때 항상 암호화
  3. 중요한 데이터를 송수신 할 때 항상 SSL을 사용하여 트래픽을 암호화
  4. 정보의 민감도가 의심스러운 경우 암호화하십시오
  5. 사용자 입력을 신뢰하지 마십시오 (누군가 잘못된 것을 입력하려고 시도 함)
  6. 데이터를 신뢰하지 마십시오 (예 : 누군가 데이터베이스에서 데이터를 변경할 수 있음-예를 들어 악성 스크립트 삽입)
  7. 자신의 암호화를 굴리지 마십시오
  8. 응용 프로그램 / 데이터베이스를 호스팅하는 서버 보안
  9. 보안을 위해 최종 사용자의 부담 증가 (암호 제한, 비밀번호 노출, 이메일로 URL 전송 안 함, 세션 시간 단축 등)

웹 응용 프로그램 보안에 대한 책을 얻는 것이 좋습니다. 단일 답변 / 블로그 / 기사에 전달할 정보가 너무 많습니다. 암호화 만 다루는 주제는 상당합니다.


자체 암호화를 롤링하는 대신 SSL을 사용하는 이유는 무엇입니까? WS-Security와 같은 방식으로 자체 암호화를 사용하고 싶습니까? SSL 설정이 어려울 수 있습니다.
Mr. Jefferson

이것은 좋은 점검표입니다. 더 많은 투표를하지 않는 것이 놀랍습니다.
Kristofer Hoch

2
@ Mr.Jefferson "자신의 암호화를 롤백"하고 싶지 않은 시간의 99.999999 %라고 말하고 싶습니다.
Zach Leighton


1

나는 당신이 괜찮을 것이라고 말하고 싶습니다.

대부분의 사용자는 암호를 공용 터미널에 저장하지 않을 정도로 밝아지고 암호는 프로필별로 저장됩니다. 스티커 메모에 쉽게 쓰거나 약한 암호를 사용할 수 있습니다.

로그인 페이지가 SSL을 통해 암호화되지 않은 경우 공격자가 네트워크를 통해 이동할 때 해당 비밀번호를 스니핑하기가 어렵지 않습니다. 데이터베이스의 비밀번호를 잘 해킹하면 잠재적 인 공격자가 모든 사람의 비밀번호 (이메일 주소와 함께 사용하여 사용자가있는 다른 사이트에 로그인을 시도 할 수 있음)를 볼 수 없게됩니다.

여전히 원한다면 Chad가 지적한 것처럼 브라우저의 동작을 비활성화하는 방법이 있습니다. 은행 웹 사이트와 Microsoft의 라이브 시스템에서만이 내용을 확인했습니다.


훌륭한 게시물, 나는 사용자 이름이 전자 메일 주소가 아니라는 것을 추가하는 것을 잊었지만 사용자는 시스템에 전자 메일 주소가 저장되어 있습니다. 페이스 북과 같은 인기있는 사이트조차도 이메일 애들과 암호를위한 패킷 스니핑에 취약하기 때문에 이것을 언급하는 것이 재미있다.
maple_shaft

또한 Facebook의 보안 결함을 내 응용 프로그램의 보안 모델이 열악한 "변명"으로 지적하지 않는다고 덧붙이고 싶습니다. Joey의 엄마가 R 등급의 영화를 제대로 시청하지 못하기 때문에 :)
maple_shaft

1

특정 시점에서 사용자를 자신으로부터 보호 할 수 없으며 법적으로 요구되지도 않습니다. "암호 기억"기능은 위험 할 수 있지만 사용자가 생각하는 위험입니다. 마찬가지로 사용자가 여러 서비스에 암호를 재사용하기로 결정한 경우 해당 위험도 가정합니다. 또한 사용자가 자주 암호를 입력하더라도 스티커 메모에 암호를 적어 모니터에 붙이지 않도록 경고 할 필요는 없습니다.

즉, 누군가가 성공적으로 소송을 제기하고 규칙을 변경할 때까지입니다. "경고 : 내용물이 뜨거울 수 있습니다"를 참조하십시오.


0

브라우저가 암호를 기억하는지 여부를 확실하게 제어 할 수 있다고 생각하지 않습니다. 브라우저의 작동 여부에 관계없이 간단하게 사용할 수 있습니다. 도 반드시위한 거대한 보안 위험이 그 것이다 당신 . 유효한 로그인으로 공격을 할 수 있다고 항상 가정해야합니다. 누군가 유효하지 않은 로그인 사용자 / 패스를 가지고 있다고 가정하지 마십시오. 결국 암호가 잘못된 손에 들어갈 수있는 방법은 여러 가지가 있습니다.

당신이 할 수있는 일은 매번 로그인 양식에서 필드 이름을 무작위로 만드는 것입니다. 대신 <input name="username"다음과 같은 것을 사용하십시오 <input name="user658667587". 캐시 된 사용자 이름이 상당히 쓸모 없게됩니다. 그러나 오버 헤드가 가치가 있는지는 모르겠습니다. 퍼블릭 머신에 익숙 하지 않은 불편한 사용자 는 말할 것도 없습니다 .

보안에 매우 민감한 상황 (뱅킹, 투자)에있는 경우 로그온하는 동안 사람들에게 공개 시스템인지 물어볼 수 있습니다. 또한 사람들이 로그인 할 때 알려진 IP 주소를 캐시 할 수 있으며 다른 위치에서 로그인 할 경우 일반 사용자 / 패스 외에 입력 할 수없는 핀 번호 (예 : 이미지 클릭)가 필요합니다. 우리 은행은 이와 비슷한 일을합니다.

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