2016-06-18 2 views
0

여기에 몇 가지 문제가 있습니다. 웹 사이트 데이터베이스에서 데이터를 가져 오기 위해 쿼리를 만들려고하지만 쿼리가 없어도 행이 반환됩니다. vars $uslog$ushas은 각 사용자의 사용자 이름과 해시 코드이며,이 경우에는 'PixelKnight1398'및 '1398'인 테스트 사용자입니다. 쿠키는 그대로 저장됩니다. phpMyAdmin에서 MySQL 코드를 실행하려고하면 완벽하게 작동하지만이 경우에는 작동하지 않습니다. 문법 오류이거나 내가 어리석은 일이라면 무엇이 잘못 될지 잘 모르겠습니다. 어떤 도움이라도 미리 감사드립니다.PHP 코드가 제대로 실행되지 않습니까?

$uslog = cure($_COOKIE['userloggedin']); 
$ushas = cure($_COOKIE['uservalue']); 
function cure($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 
$query = "SELECT friends FROM `memberHandler` WHERE `username`='$uslog' AND `hash`='$ushas'"; 
$result = mysqli_query($connect, $query); 
if(mysqli_num_rows($result) != 1){ 
    die("Could not find user match"); 
} 
+2

SQL 주입 –

+0

시도''$ uslog =에 대해 최대 읽어 보시기 바랍니다 (PDO를 사용하지 않는 연산 이후 코드의 다른 부분의 부재에주의) "도리안 '; DROP 표'friends' -"' ' ... 그리고'echo $ query;'를 실행하는 대신에. ;-) –

+0

Btw : htmlspecialchars와 같은 서식은 HTML 출력 전에 수행되어야하며 데이터베이스에 저장하기 전에 수행해야합니다. 원시 데이터가 필요한 상황이 발생할 수 있기 때문입니다. –

답변

0

보안에 대한주의가 필요하며 PDO 기반 쿼리에서 바운드 변수를 사용해야합니다.

$query = "SELECT friends FROM `memberHandler` WHERE `username`=:uslog AND `hash`= :ushas "; 

을 한 다음과 같은 바인딩 변수를 결합하는 것입니다 : 당신이 바인딩 매개 변수를 사용하는 경우가 될 것이다

$query = "SELECT friends FROM `memberHandler` WHERE `username`=' " . $uslog . " ' AND `hash`=' " . $ushas . " ' "; 

과 :는 연결은와 따옴표 - 당신은 또한 다음과 같이 변수가 필요

$query -> bindValue(":uslog " , $uslog , PDO::PARAM_STR); 
$query -> bindValue(":ushas" , $ushas, PDO::PARAM_STR); 
+0

mysqli는 prepared statement도 제공한다. –

+0

절차 적 쿼리의 문제점은 무엇입니까? 그리고 당신이 나에게 준 첫 번째 쿼리가 작동하지 않았다고 말하고 싶지는 않지만 그것을 시도한 다음 따옴표로 어지럽히고 시도해 보았습니다. 그리고 여전히 작동하지 않았습니다. – Pixelknight1398

+0

@ Quasimodo의 클론에 감사드립니다 - havent는 mysqli를 상당히 사용했습니다 - 저는 이전 mysql 쿼리에서 PDO로 뛰어 들었을뿐입니다. 건배 :)) – gavgrif

관련 문제