2013-07-15 4 views
1

웹 페이지에서 로그인 기능을 사용하는 경우 입력 된 데이터의 유효성을 검사하는 가장 좋은 방법은 무엇입니까?PHP 로그인 - 모범 사례

나는 큰 규모의 사용자가 아니라 하나의 관리 역할에 대해 이야기하고 있습니다. 웹 페이지는 데이터베이스를 사용하지 않으므로 단 하나의 계정에 대해 funtionallity를 포함하고 싶지 않습니다.

현재 입력 된 데이터와 하드 코드 된 암호로 If 문을 사용하기 때문에 안전하지 않다고 느끼지만 동시에 사용자는 얻을 수없는 한 PHP 코드를 볼 수 없습니다 서버에, 또는 내가 틀렸어?

if($password == 'myPassword123') 

그런데 실제로 (사용자 관점에서) 서버에서 실제 .php 파일을 다운로드 할 수있는 방법이 있습니까?

+5

가장 좋은 방법은 암호를 해시하는 것입니다. – mnagel

답변

0

암호 해시! 평문에 저장하지 마십시오.

잘못된 설정으로 인해 암호가 노출되는 것을 막으려면 암호를 웹 루트 외부에 저장하십시오. PHP가 코드를 노출 한 경우 클라이언트/공격자는 실제 해시/파일에 액세스 할 수 없습니다. 다음은 간단한 사용자 함수 내에서 crypt() 함수를 사용하여 패스를 검사하는 간단한 예제입니다.

<?php 
function check_pass($password){ 
    $chkpass = file_get_contents(dirname(__FILE__).'/../path_outside/webroot/adminpass.txt'); 
    if(crypt($password, $chkpass) == $chkpass){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

/* The file adminpass.txt contains the hash 
    $1$MH0.l.1.$aNx9btlqPfGpkAxK4Bdym. 
    which is mypassword in plaintext */ 
if (check_pass($_POST['password'])) { 
    echo "ok!"; 
}else{ 
    echo "fail!"; 
} 
?> 
5

정상적으로 서버에 오류나 잘못된 구성이 없어도 php 파일의 사본을 다운로드 할 수있는 방법은 없습니다.

말했다되고, 당신은 아마 일반 텍스트 버전 http://php.net/manual/en/faq.passwords.php

0

보다는 사용자가 PHP 코드에 액세스 할 수있는 유일한 방법은 암호 해시를 저장해야하는 경우 :

  1. 그들은 귀하의 서버에 해킹을하는데, 그 시점에서 관리자 비밀번호를 찾는 것이 당신의 걱정거리가 아닙니다.
  2. 서버 구성이 잘못되어 PHP 코드가 일반 텍스트로 덤프됩니다 (몇 년 전이 문제가 페이스 북에 발생했습니다).
0

나는 동적으로 생성 된 문자열을 만들고 내 암호로 AND 시도하고 시도 횟수 캡처와 같은 작업을 수행합니다. 세션이 만료 될 때까지 사용자를 잠급니다. : D

<?php //login.php 
$_SESSION['xrf'] = hash('sha512'); 
$myPassword = 'password'; 
?> 

<input type="hidden" name="_xrf_" /> 
<input type="password" name="password" /> 

<?php 
$password = $_POST['password']; 
if(isset($password) && $_SESSION['attempt'] != 3): 
    $xrf = $_POST['_xrf_']; 
    if($password === $myPassword && $_SESSION['xrf'] === $xrf): 
    echo 'Hell Yeah'; 
    else: 
    header("Cache-Control: private, must-revalidate, max-age=0"); 
    header("Pragma: no-cache"); 
    header("Expires: Sat, 27 Jan 1997 05:00:00 GMT"); 
    header("Location:login.php"); 
    endif; 
else: 
    $_SESSION['attempt'] += 1; 
endif; 
?> 
+0

나는 $ _SESSION – Anigel

+0

을 사용하기 전에'session_start()'를 추가하겠다는 뜻을 짐작하고있다. –