2015-02-04 1 views
-2

내 웹 사이트의 해킹을 막기 위해 로그인 스크립트를 안전하게 만들려고합니다. 나는 내 스크립트에서 mysql_real_escape_string을 사용하려고 노력하고있다. 여기 안전한 로그인 스크립트 작성 방법

는 더 이상 사용되지 않기 때문에, * 기능을 MySQL을 사용 mysqli_ * 기능이나 을 사용하지 마십시오

PDO 내 코드

<?php 
session_start(); 
include("lib/conn.php"); 

?> 
<?php 
$email=$_POST['user']; 
$password=$_POST['password']; 

if ($email && $password){ 

$query = "SELECT * FROM register WHERE email = '$email' AND password= '$password' and status = '1'"; 

mysql_real_escape_string($email); 
mysql_real_escape_string($password); 

$result = mysql_query($query) or die ("didn't query"); 
$num = mysql_num_rows($result); 
if ($num == 1){ 

$_SESSION['ocer']=$email; 




header("Location: admin.php"); 


    } 
    else { 







header("Location: index.php?l=1"); 


} 
} 

?> 
+0

어떻게 위치를 정확히 당신이 오류를 받고? 전체 오류 메시지입니까? 코드의 특정 줄을 가리 킵니까? – deceze

+0

내가 소식을 올리면이 오류가 발생합니다. –

답변

0

우선. 바인드 매개 변수와 함께 PDO를 사용하십시오. 그러면 주사에 대해 걱정할 필요가 없습니다.

mysql_real_escape_string은 이스케이프 된 문자열을 반환하므로 쿼리를 작성하기 전에 사용해야합니다. 사용 방법은 다음과 같습니다.

$password = mysql_real_escape_string($password); 

또한. 비밀번호와 이메일로 검색하지 마십시오. 전자 메일로 암호를 검색하고 동일한 암호가 유효한지 확인하십시오.

는 여기

을 도와주는 예입니다 희망 :

session_start(); 
include("lib/conn.php"); 

//using isset to avoid warnings. 
$email = isset($_POST['user']) ? $_POST['user'] : null; 
$password = isset($_POST['password']) ? $_POST['password'] : null; 

//check if values are not null 
if ($email !== null && $password !== null){ 

    //escape email 
    $email = mysql_real_escape_string($email); 

    //retrieve password by email and limit 1 result 
    $query = "SELECT password FROM register WHERE email = '{$email}' and       status = '1' LIMIT 1"; 

    //run query 
    $result = mysql_query($query) or die ("didn't query"); 

    //validate if query run correctly 
    if (!$result) { 
     echo 'Could not run query: ' . mysql_error(); 
     exit; 
    } 

    //fetch row 
    $row = mysql_fetch_row($result); 

    //validate result 
    if ($row['password'] == $password){ 
     $_SESSION['ocer']=$email; 
     header("Location: admin.php"); 
    } else { 
     header("Location: index.php?l=1"); 
    } 
} 
2

1 .-이다 2 .- 당신은해야 준비 문을 사용하여, 이것은 mysqli_ * 기능을 사용하는 예입니다 :

<?php 
$email=$_POST['user']; 
$password=$_POST['password']; 

if ($email && $password){ 

$query = "SELECT email, password 
      FROM register 
      WHERE email = ? 
       AND password= ? 
       AND status = '1'"; 

$stmt = mysqli_prepare($link, $sql); 

mysqli_stmt_bind_param($stmt, 'ss', $email, $password); 

mysqli_stmt_execute($stmt); 

mysqli_stmt_bind_result($stmt, $column1, $column2); 

while (mysqli_stmt_fetch($stmt)) { 
    echo "Column1: {$column1}, Column2: {$column2}"; 
} 

?>