2016-07-09 5 views
-1

다음은 로그인 페이지에 대한 나의 PHP 코드입니다.PHP와 MySQL의 SQL 삽입 방지 로그인 페이지

if(!$_POST["username"] || !$_POST["password"]) 
{ 
    echo "Username and Password fields are mandatory."; 
} 
else 
{ 
    $query="select user_id from users where user_name='".$_POST["username"]."' and password='".md5($_POST["password"])."' "; 
    ..... 
    ..... 
} 

나는 이것이 SQL 주입에 취약한 코드라고 생각합니다. MYSQL 데이터베이스에 SQL 주입을 방지하려면이 코드에서 무엇을 수정해야합니까?

function connect_database() 
{ 
    $con = mysqli_connect("servername", "username", "", "dbname"); 
    if (!$con) 
    { 
     $con = ""; 
     echo("Database connection failed: " . mysqli_connect_error()); 
    } 
    return $con; 
} 

내가 mysqli_prepare을 사용하려고하지만, 점점 오류 :

Warning: mysqli_prepare() expects exactly 2 parameters, 1 given 

Fatal error: Call to a member function bindParam() on null 
:

$unsafe_username = $_POST["username"]; 
$unsafe_password = md5($_POST["password"]); 
$query=mysqli_prepare("select user_id from users where user_name= ? and password= ? "); 
$query->bindParam("ss", $unsafe_username, $unsafe_password); 
$query->execute(); 

내가 오류 다음있어 내 MySQL 데이터베이스에 연결하기 위해 다음과 같은 코드를 사용하고

답변

0

쿼리에 입력 할 수있는 문자열을 이스케이프 처리하려고합니다. 당신이 mysqli 드라이버를 사용하고 고려 당신은이 작업을 수행 할 수 있습니다

$username = mysqli_real_escape_string($con, $_POST["username"]); 
$password = mysqli_real_escape_string($con, $_POST["password"]); 

$query="select user_id from users where u.user_name='".$username."' and u.password='".md5($password)."' "; 

공식 문서는 here를 찾을 수 있습니다. prepared statements을 사용할 수도 있습니다.

+0

내가 대신 mysqli_escape_string의 mysql_real_escape_string를 사용하지 말아야? –

+0

mysql이면 mysqli를 사용해야한다. 내 게시물을 편집했습니다. – XanT

4

사용 준비된 문장,

http://php.net/manual/en/pdo.prepared-statements.php

$stmt = mysqli->prepare("select user_id from users where user_name= ? and password= ?"); 
$stmt->bindParam("ss",$username,$pass); 
$stmt->execute(); 
+0

솔루션과 함께 경고 메시지가 나타납니다 : 경고 : mysqli_prepare()는 정확히 2 개의 매개 변수를 필요로합니다. 1은 –

+0

입니다. 코드를 표시 할 수 있습니까? – Dave

+0

내 질문을 업데이트했습니다. 또한 mysqli-> prepare는 mysqli_prepare가 작동하는 동안 구문 오류를 제공한다. –