2012-04-02 2 views
0

암호를 변경할 수있는 페이지를 갖고 싶습니다. 나는 그것에 접근 할 수있는 유일한 사람이어야한다. 그래서 내 생각은 내 IP 주소를 저장하고 그것을 db에 저장하기 전에 암호화하는 것이 었습니다. 내 첫 번째 시도는 IP를 손으로 입력하는 것이 었습니다. 그때는 내가 의해 ip.php라는 두 번째 파일에 무엇을 가지고 내 IP 주소를 얻을뿐만 아니라 훨씬 쉽고 안전 할 것이라고 생각 :if 문이 crypt 동안 작동하지 않습니다

$http_client_ip = $_SERVER['HTTP_CLIENT_IP']; 
    $http_x_forwarded_for = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    $remote_addr = $_SERVER['REMOTE_ADDR']; 

    if (!empty($http_client_ip)){ 
     $ip_address = $http_client_ip; 
    } 
     else if (!empty($http_x_forwarded_for)){ 
      $ip_address = $http_x_forwarded_for; 
    }else{ 
     $ip_address = $remote_addr; 
    } 

지금이 내가에 추가했습니다 것입니다 내 스크립트, 그 모양은 다음과 같습니다 :

if(isset($_POST['submit'])){ 
    include_once "db_connect.php"; 
    include_once "ip.php"; 

    $IP = $ip_address; 

    $masterkey = $_POST['masterkey']; 
    $masterkey2 = $_POST['masterkey2']; 


    if(empty($masterkey)||empty($masterkey2)){ 
     if(empty($masterkey)){ 
      $errors[]="there is no key1"; 
     } 
     if(empty($masterkey2)){ 
      $errors[]="there is no key2"; 
     } 

    }else{ 

     $masterkey = strip_tags($masterkey); 
     $masterkey = stripslashes($masterkey); 
     $masterkey = trim($masterkey); 
     $masterkey = $db->real_escape_string($masterkey); 

     $masterkey2 = strip_tags($masterkey2); 
     $masterkey2 = stripslashes($masterkey2); 
     $masterkey2 = trim($masterkey2); 
     $masterkey2 = $db->real_escape_string($masterkey2); 

     $IP = strip_tags($IP); 
     $IP = stripslashes($IP); 
     $IP = trim($IP); 
     $IP = $db->real_escape_string($IP); 

     $db_IP = crypt($ip_address, '$2a$12$password'); 
       ...start queries 

이제 내 문제는 그 else 문이 작동하지 않습니다. 이유는 내가 왜 작동하지 않는지 모르겠다. 나는 또한 메시지를 errorreport를 사용하여 얻을 수 있었다 : 나는 또한 위해서 var_dump를 시도했지만 찾았 오류가 없었다

Notice: Undefined variable: db_IP in ... 

. 하지만 내가 반향 할 때

$IP and $ip_address 

올바른 방법으로 IP를 표시합니다. 그래서 나는 왜 이것이 효과가 없는지 이해하지 못한다. 감사.

UPDATE

좋아, 오류보고는 표시 E_ALL 설정된 경우

변수가

정의 하겠지만

<?php echo $db_IP;?> 

에 관한

Notice: Undefined variable: db_IP in /var/www/web775/html/scripts/masterchange.php on line 179 

$db_IP = crypt($IP, '$2a$12$password'); 
$ip_address 

$IP = $ip_address; 

좋아

UPDATE2, 난 문제를 해결 ip.php에서 온다. 실패는 if-else 조건이 있다는 것입니다. 방금 else 문을 보았고 else 문을 먼저 얻으려면 if 문에서 조건을 잊어 버렸습니다. 나는 if-statement의 조건없이 결과를 얻으려고했다. 그래서 첫 번째 구절이 발생하지 않았을 때 결과물을 출력 할 수 없었습니다. 저기 왜 var_dump 비어 있었고 아무런 오류가 없었기 때문에 아무런 오류를 보여주지 않았다 :) 나를 도와 줘서 고마워요. 정말 고맙습니다.

+0

당신이 사용하는 모든 POST 변수를 맹목적으로 왜'strip_tags()','stripslashes()'및'trim()'합니까? –

+0

누군가가 한 번 페이지를 찾을 경우를 대비하여 sqlinjections을 방지하십시오! – bonny

+0

오, 나는 당신이'real_escape_string()'을 사용하고 있다고 생각했을 것입니다. 그런 다음'strtolower()'도 잊지 마라. 그러면 해커가 내 페이지에서 고함을 피할 수 있습니다. -P –

답변

0
Notice: Undefined variable: db_IP in ... 
            ^^^ 

이 점에는 원본 메시지의 파일 이름과 줄이 포함되어있을 수 있습니다. 가장 즉각적인 오류가 있습니다 : 좋아하는 편집기 끝에서 열면 해당 줄에 변수 사용법이 있습니다. 필자가 생각한 바에 따르면 인수로 인수를받지 않은 함수에서 해당 변수를 사용하고있는 것입니다.

또 다른 쉬운 지점 오류 :

$masterkey = $_POST[$IP]; 
$masterkey = $_POST['masterkey']; 

당신은 $_POST[$IP]을 읽고 다음 줄에 폐기.

편집 : 그래서 오류는 이전에 언급하지 않은 코드의 일부입니다. 그것이 오류 메시지를 읽어야하는 이유입니다. 오류 메시지는 도움을 주거나 성가 시게하지 않아도됩니다. 이제 어떤 도움이 필요합니까? 먼저 작성하지 않으면 $db_IP을 읽을 수 없습니다.

+0

원본 질문을 편집하여 세부 사항을 추가 할 수 있습니다. 주석의 코드를 읽을 수 없습니다. –

+0

그게 무슨 뜻입니까? 미안하지만 이해가 안가는 것 같아. 나는 제출을 누른 후에 그것이 쓰여질 것이라고 생각했다. 또한 crypt() 함수는 먼저 약간의 입력으로 피드를 가져야한다는 것을 알고 있습니다. 코드를 생성하기 위해 제출을 누른 후에 해당 입력을 사용할 수 있습니까? – bonny

관련 문제