2012-12-09 3 views
0

내가 가진이 개 질문SQL 주입 검사와 PHP를 던져 오류

  1. 다음 코드를 (가 삽입 방법으로 확인을 작동하는 것 같다) SQL 주입에 대해

  2. 방법을 연습하는 좋은 방법입니다 것 대신에 전체 예에서이 오류 메시지가 : 여기

    if (!mysqli_query($query,$link)) 
    { 
        die('Error: ' . mysqli_error()); 
    } 
    

전체 예입니다 :

<?php 

$link = mysqli_connect("localhost","root","", "runtracker"); 
if (!$link) 
{ 
    die('Could not connect: ' . mysqli_error()); 
} 

$query="INSERT INTO userinfo (UserName) VALUES (?)"; 

if ($stmt = mysqli_prepare($link, $query)) { 

    // Lets create the variables 
    $name = $_POST['UserName']; 

    // Bind the variables and execute the query 
    mysqli_stmt_bind_param($stmt,"s", $name); 
    mysqli_stmt_execute($stmt); 

    // And now we close the statement 
    mysqli_stmt_close($stmt); 
} 

echo "1 record added"; 

mysqli_close($link); 
?> 
+0

이 경우, 정확히, 당신은 SQL 주입으로부터 자신을 보호하기 위해 어떤거야? –

+0

@JackManey, 그는 준비된 성명서를 사용하고 있습니다. – Charles

답변

1

그렇습니다. 바인드 된 매개 변수를 사용하면 SQL 쿼리의 동적 값에 대해 SQL 주입을 방지하는 좋은 방법입니다. SQL 인젝션에 대한 더 많은 정보를 원하시면 내 프리젠 테이션 SQL Injection Myths and Fallacies을 좋아할 것입니다.

API 함수를 호출 한 후 오류를 확인하는 것이 좋습니다. 대부분의 mysqli 함수는 오류가 발생하면 FALSE를 반환하지만 연결은 약간 다르게 처리됩니다.

나는 또한 읽을 수있는 로그에 Mysqli 오류를 출력하고 싶지만 사용자의 브라우저에는 출력하지 않습니다. 여기

내가 그것을 코딩 할 방법은 다음과 같습니다

<?php 

$mysqli = new mysqli("localhost","root","", "runtracker"); 
if (mysqli_connect_error()) 
{ 
    error_log("Connect error in file ".__FILE__.", line ".__LINE__.": " 
     .mysqli_connect_error()); 
    die("Could not connect to database"); 
} 

if (($stmt = $mysqli->prepare($link, $query)) === false) { 
    error_log("Error on prepare in file ".__FILE__.", line ".__LINE__.": " 
    .$mysqli->error); 
    die('Error on prepare'); 
} 

// Lets create the variables 
$name = $_POST['UserName']; 

// Bind the variables and execute the query 
if ($stmt->bind_param("s", $name) === false) { 
    error_log("Error on bind in file ".__FILE__.", line ".__LINE__.": " 
    .$stmt->error); 
    die('Error on bind'); 
} 
if ($stmt->execute() === false) { 
    error_log("Error on execute in file ".__FILE__.", line ".__LINE__.": " 
    .$stmt->error); 
    die('Error on execute'); 
} 

// And now we close the statement 
$stmt->close(); 

echo "1 record added"; 

$mysqli->close(); 
+0

친절하게 감사드립니다. –