2011-12-04 3 views
1

이 기술은 충분히 안전합니까? 이런 세션에 나는 신뢰할 수 있을까요? 또는 뭔가 추가해야합니까?이 인증/로그인 절차는 안전한가요?

인증 -module

class Auth { 

    public function login($user, $pass, $random_unique_salt) 
    { 
     if ($this->_bcrypt($pass, $random_unique_salt) === 'correct password hash') // etc. 
     { 
      // Success... 
      $session = Session::instance(); 
      $session->set('login', TRUE); 
      $session->regenerate(); 
     } 
    } 
} 

• 컨트롤러 자료

class Controller_Base extends Controller { 

    protected $_login = FALSE; 

    public function before() 
    { 
     $this->_login = Session::instance()->get('login', FALSE); 
    } 
} 

회원 전용 • 컨트롤러

class Controller_Membersonly extends Controller_Base { 

    public function action_index() 
    { 
     if ($this->_login === TRUE) 
     { 
      // Success... 
      echo 'Show (safely?) some secrets.'; 
     } 
    } 
} 
+0

약간의 OT이지만 암호 해시 스키마에서 소금을 사용하지 않는 것처럼 보입니다. 그리고 해시는 무엇입니까? 일부 일반 md5/sha-x 또는 bcrypt와 같은 암호 해시를 위해 설계된 함수? – CodesInChaos

+1

그건 그냥 임의의 예입니다, 그래서 거기에 의견이/등 Bcrypt 갈 방법입니다. – kaulusp

+0

좋습니다 :) Btw "php"태그를 사용하여 태그 중 하나를 삭제하는 것이 좋습니다. 이것에 대답 할 수있는 사람들 중 일부는 "php"를 좋아하는 태그로 가질 수 있지만 여러분의 태그는 아닙니다. – CodesInChaos

답변

0

이 기술은 충분히 안전합니다. 나는이 같은 세션을 신뢰할 수 있습니다.

1

내가 볼 수있는 유일한 취약점은 CWE-706 - Use of one way has with a predictable salt입니다. 각 암호는 고유 한 소금이 있어야합니다. bcrypt는 GPU 또는 FPGA에서 효율적으로 구현할 수 없으므로 잘못된 암호 해시 방법이 아닙니다.

코드 스타일은 다소 편집 적이지만 나쁜 것은 아닙니다. 비교 연산자가 약간 과소합니다. 나중에 실수하지 않도록 fuzzy typing in php에서 확인하십시오.

+0

입력 해 주셔서 감사합니다! 이 코드 예제는 완전하지 않습니다. $ random_unique_salt는 예측할 수없는 소금을 나타냅니다. – kaulusp

+0

@stacknoob 예.하지만 각 암호마다 고유해야하며 로그인 기능에 대한 매개 변수 여야합니다. – rook

+0

login -method에서도 각 암호마다 고유 한 소금을 생성 할 수 있지만이 예제에서는 염수 생성기가 구현되어 있지 않으므로 매개 변수에 __ $ random_unique_salt__을 추가하는 것이 좋습니다. – kaulusp

관련 문제