2013-07-19 5 views
0

나는 세션을 혼합하고 쿠키를 사용하며 두 개의 세션 이름, 사용자 이름 또는 ID 및 세션 ID가있는 많은 스크립트를 보았습니다.세션만으로 로그인하는 것이 안전합니까?

if ($this->login($username, $password)) 
    { 
     // everything works.. 
     $_SESSION['name'] = $username; 
    } 

왜 새 세션 ID를 생성해야 할이 보안?에게 있습니까? 쿠키와 왜 섞이지? 대부분의 공격을 막기 위해 최선의 방법은 무엇입니까?

+0

사용자 X 얻을 수 있기 때문에/도용/사용자 A의 세션 ID를 생성서버가 사용자를 누가 알 수있는 가장 쉬운 방법이기 때문입니다. 어떻게 든 세션/사용자를 확인하고 HTTPS를 사용하십시오. – JimL

+1

@JimL : "어떻게 든 세션/사용자를 확인하십시오."- 명확히하십시오. – zerkms

답변

0
  1. 고유 한 사용자마다 세션 ID를 생성하므로 데이터가 공유되지 않습니다!
  2. 쿠키를 사용하면 투명한 세션을 사용할 수 있습니다. 그래서 당신은 당신이 HTTPS를 사용하는 경우 특히, 당신이 session_regenerate_id()를 사용하는 경우 일반적으로 안전한 것으로 간주되는이 thread
+0

아, 세션 ID 및 쿠키에 대한 간단한 예를 보여 주실 수 있습니까? –

+0

당신은 이미 당신 자신의 예에서 그렇게했습니다. session.use_cookies가 비활성화되어 있지 않은 한. 그런 다음 각 요청과 함께 SESSID를 전달해야합니다. – tlenss

0

세션에있는 모든 URL 코멘트의 일부를 읽어

  • 에서 세션 ID를 통과 할 필요가 없습니다.

    다른 모든 보안 문제가 코드에 따라 달라집니다 (-> 방법은 데이터를 처리) :

    • 사용자 입력
    • 데이터를 저장하는 방법을
    • (PW/이메일)
    • 는 어떻게 사용자를 유지 당신이 정보
    • 를 전달하는 방법을
    • ..
  • +0

    'session_regenerate_id()를 사용하면 실제로 세션을 "안전하게"만들지 않습니다. 예를 들어 세션에서 하이재킹/고정되어 누군가를 재생성 한 경우 공격자에게 새 세션 ID를 보내 잠재적 인 사용자가 유효한 세션 ID없이 잠길 수 있습니다. ID를 재생성하는 것은 유익하지 않다고 말하지만 다른 검증과 쌍을 이루는 경우에만 해당됩니다. – Phas1c

    +0

    맞습니다.'session_regenerate_id()'는 세션을 갑자기 안전하게 만들지 않습니다. 그것은 "securer"를 그러나 만들 n 다. 다른 한편으로 그것은 실제로 내가 쓴 것이 아니며,'session_regenerate_id()'를 사용하면 세션은 일반적으로 안전한 것으로 간주된다고 썼다. 편집 : 나는이'ini_set을 추가해야 ('session.use_only_cookies는'1) ' – dabe

    +0

    그래, 나는 당신이 무슨 말을하고 있었는지 알고 생각. 나는 단지 깨닫지 못했을 수도있는 것들에 대해 명확히하고 싶었다. 주의하십시오. – Phas1c

    0

    좋아, SESS 로그인 이온 보안은 고려해야 할 사항이 많기 때문에 실제로는 복잡한 문제입니다.

    우선 세션 데이터 자체가 저장되는 방식을 고려해야합니다. 기본적으로 PHP는 세션 데이터를 웹 서버에있는 파일에 저장합니다. 전용 호스팅을 사용하는 경우 이것이 완벽하게 허용되지만 공유 호스팅 계획은 때때로 서버의 다른 호스팅 계정 사용자에게 해당 세션 데이터에 대한 액세스 권한을 부여 할 수 있습니다. 기본 세션 비헤이비어를 덮어 쓰면 데이터베이스 나 자신이 확보 한 위치에 쓸 수 있습니다. 그러나이 답변에서 자세히 설명하지는 않겠습니다.

    두 번째로 세션 도용을 고려해야합니다. 세션에서 훨씬 더 위험한 URL 기반 옵션 대신 쿠키를 사용해야합니다. 그런 다음 일반 세션 조건에서 동일하게 유지해야하는 사용자 데이터를 저장하는 두 번째 쿠키를 만듭니다. 이것은 IP 주소가 아니어야하지만 변경 될 수 있습니다. 사용자가 세션 중에 브라우저를 변경해서는 안되므로 사용자 에이전트가 잘 수행해야합니다. 이를 시스템의 개인 데이터 (사용자 ID 등)와 결합한 다음 해시하는 경우 공격자가 추측 할 수없는 추가 데이터가 있는지 확인해야합니다.

    SSL 연결을 사용하고 로그인 할 때 세션 ID를 재생성하려면 보안 시스템이 있어야합니다. 나는 몇 가지를 빠뜨린 것처럼 느껴진다. 그러나 나는 짧고 달콤하게 유지하고 연구를 계속하기 위해 거기에 남겨 둘 것이다. 이 약간의 도움이

    희망,

    라이언

    +0

    아, 이것만으로도 시스템이 안전하지 않다는 것을 기억하는 것도 중요합니다. SQL 주입 공격과 같은 상황으로부터 자신을 보호하고, 모든 사용자 입력의 유효성을 검사하고, 사용자의 데이터가 안전한 방법 (일반 텍스트 암호 없음 등)으로 저장되는지 확인하십시오. –

    관련 문제