2009-08-31 4 views
16

작은 웹 응용 프로그램을 작성하기 시작했으며 로그인 보안에 대해 생각하기 시작했습니다 (관리에만 사용됨).SSL없이 보안 인증

내가 할 수만 있다면 CACert 또는 자체 서명 된 SSL 인증서를 설치 하겠지만 지금은 로그인하는 유일한 사용자가 될 것이지만 내 호스트는 너무 수용적이지 않습니다.

SSL없이 사이트를 보호하기위한 합리적인 옵션이 있습니까? 인증 옵션에 대해 생각해 봤습니다.

  1. JavaScript로 소금기가있는 해시를 구현합니다. 로그인 페이지가로드되면 솔트 서버 측을 생성하십시오. 이를 클라이 언트에 클라이언트로 보내고 세션 변수에 저장하십시오.

  2. 다이제스트 인증. 방금이 아이디어를 찾은 것을 알았고 아마도 내 자신의 권한을 굴리는 것보다 훨씬 합리적 일 것입니다.

  3. OpenID. 오픈 표준이므로 암호가 필요하지 않습니다. (로그인 프로세스에 보안을 추가하기 위해 OpenID 제공 업체의 SSL을 도용 할 수는 있지만) OpenID가 작동하는 방식이나 안전성에 대해서는 잘 모릅니다. (연구를 필요 예를 들어, 오픈 ID 인증을 재생할 수 있습니다.?)

이 모두의 문제가 있습니다 :

  • 세션이
  • 만 로그인을 납치 할 수
      가 안전, 모든 그 밖의 것이 확실하다

    내가 로그인 한 후 앱 보안을 유지하기 위해 생각할 수있는 유일한 옵션은 역겨운 자바 스크립트와 PHP로 암호화 된 ASCII 블록을 앞뒤로 보내는 것이다. 나는 이것을하고 싶지 않다.

    내 호스트의 축복 또는 개입없이 서버 측 스크립팅 언어로 구현할 수있는 암호화 (pageloads 및 POST 용)가 있습니까? 브라우저에서 지원할 수 있습니까? SSL없이 세션을 도용 당할 수 있습니까?

    이런 상황에서 당신은 무엇을 할 것입니까?

  • 답변

    9

    도청에 대한 보호 기능을 구현하지 않고도 안전하게 인증 할 수 있습니다. 예를 들어 요청 내용을 읽을 수는 있지만 다른 사람이 요청을 보내지 못하게 할 수 있습니다. 도청으로부터 보호해야하는 경우 SSL을 사용할 수있는 곳으로 가보는 것이 좋습니다.

    실제 보안없이 단순 인증 만하면되는 경우 공급자가 HTTP 기본을 지원할 것입니다. 이것은 (성능을 제한하는 좋은 디자인 및 백업과 함께) 합리적인 임시 솔루션이지만 다른 문제에 대해 걱정할 필요가 없습니다.

    신원을 인증하기 위해 OpenID를 재생할 수 없습니다. 각 인증 순서가 서명됩니다. 그러나 OpenID 자체만으로 서버와의 신원을 확인할 수 있습니다. 그것은 당신이 서명하거나 요청을 인증하도록 허용하지 않습니다. OAuth는 그렇지만 프로토콜의 일부에 대해 전송 암호화가 필요합니다.

    각 요청에 공유 암호를 사용하여 서명 할 수 있습니다. 이렇게하면 공격자가 요청을 제출하거나 재생하지 못하지만 요청 자체는 여전히 도청자가 읽을 수 있습니다. Amazon AWS 인증 (클라이언트 라이브러리 포함) 또는 flickr 인증에 대한 설명서를 참조하십시오. 기본 프로토콜은 다음과 같습니다, 등, 모든 요청 URI, 호스트, 동사와

  • 합칠 매개 변수 연결하여 정렬

    • 타임 스탬프를 필요로 (그리고 아마도 넌스) 요청으로는
    • 정상화 매개 변수
    • 서버가 동일한을 수행하고 비교 서명 요청 헤더에 비밀 키
    • 전송 해시 해시
  • +0

    어떻게 이런 말을 구현할 수 있습니까? –

    1

    세션에 원격 IP 주소를 등록하면 해당 주소를 도용 할 수 없습니다. 다른 IP 주소로 세션을 사용하려는 사람을 쉽게 감지 할 수 있습니다. PHP 세션은 기본적으로 그것을 사용합니다 (그리고 그것은 선택 가능하지 않습니다). 간단하고 효율적인 솔루션.

    +0

    큰 이점이지만 세션을 단일 IP로 제한한다고해서 동일한 네트워크의 공격자 (세션이 도용 당할 가능성이 높은 경우)로부터 보호 할 수는 없습니다. – s4y

    +2

    또한 여러 가지 프록시 상황 (BlackBerry 포함)이 손상됩니다. –

    +1

    또한 모바일 네트워크에서 [세션 중에 IP가 변경 될 수 있습니다] (http://stackoverflow.com/questions/7550798/can-ip-change-during-session). – TMS

    3

    다른 인증 및 암호화 방법을 사용하여 재미있는 방법으로이 방법을 사용하고 있지만 가장 비용이 적게 들고 가장 간단한 방법은 SSL 인증서를 설치할 수있는 호스트를 얻는 것입니다.

    +1

    지금 당장 공격자는 내 앱을 깨서 거의 얻을 수 없으므로 확실히 실험입니다. – s4y