암호를 변경할 수있는 페이지를 갖고 싶습니다. 나는 그것에 접근 할 수있는 유일한 사람이어야한다. 그래서 내 생각은 내 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 비어 있었고 아무런 오류가 없었기 때문에 아무런 오류를 보여주지 않았다 :) 나를 도와 줘서 고마워요. 정말 고맙습니다.
당신이 사용하는 모든 POST 변수를 맹목적으로 왜'strip_tags()','stripslashes()'및'trim()'합니까? –
누군가가 한 번 페이지를 찾을 경우를 대비하여 sqlinjections을 방지하십시오! – bonny
오, 나는 당신이'real_escape_string()'을 사용하고 있다고 생각했을 것입니다. 그런 다음'strtolower()'도 잊지 마라. 그러면 해커가 내 페이지에서 고함을 피할 수 있습니다. -P –