2017-04-11 10 views
0

私は、成功しなくてもPHP WebアプリケーションのサンプルにSQLを挿入しようとしていました(昨日からしばらくの間)。私はどこに問題があるのか​​発見できません。私は、Apacheサーバを再起動し、上記の設定を変更した後SQLインジェクションの例PHPとMySQL

magic_quotes_gpc = Off 

:私がした
最初のものは、PHP、SQLインジェクションの保護をオフにする/etc/php/apache2/php.ini設定ファイルに次のように設定しました私が試みた

' or '1=1 

sudo service apache2 restart 

アプリケーションは、従業員IDとパスワードを要求し、I型情報であります

xxx' or '1=1 
' or ''=' 

私は上記の両方のフィールドでも、従業員IDとパスワードを試したことがあります。

私は正しい資格情報を入力するとアクセスできるため、Webアプリケーションが動作することがわかります。

私はここでいくつかの記事を見直しましたが、私は間違いを見ることができません。私は、私のテストを成功させるための手がかりを非常に高く評価します。

PHPコードは次のとおりです。

<!DOCTYPE html> 
<html> 
<body> 

<!-- link to ccs--> 
<link href="style_home.css" type="text/css" rel="stylesheet"> 

<div class=wrapperR> 
<p> 
<button onclick="location.href = 'logoff.php';" id="logoffBtn" >LOG OFF</button> 
</p> 
</div> 


<?php 
    $input_eid = $_GET['EID']; 
    $input_pwd = $_GET['Password']; 
    $input_pwd = sha1($input_pwd); 

    // check if it has exist login session 
    session_start(); 
    if($input_eid=="" and $input_pwd==sha1("") and $_SESSION['name']!="" and $_SESSION['pwd']!=""){ 
     $input_eid = $_SESSION['eid']; 
     $input_pwd = $_SESSION['pwd']; 
    } 

    $conn = getDB(); 

    /* start make change for prepared statement */ 
    $sql = "SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password 
      FROM credential 
      WHERE eid= '$input_eid' and Password='$input_pwd'"; 
    if (!$result = $conn->query($sql)) { 
     die('There was an error running the query [' . $conn->error . ']\n'); 
    } 

    /* convert the select return result into array type */ 
    $return_arr = array(); 
    while($row = $result->fetch_assoc()){ 
     array_push($return_arr,$row); 
    } 

    /* convert the array type to json format and read out*/ 
    $json_str = json_encode($return_arr); 
    $json_a = json_decode($json_str,true); 
    $id = $json_a[0]['id']; 
    $name = $json_a[0]['name']; 
    $eid = $json_a[0]['eid']; 
    $salary = $json_a[0]['salary']; 
    $birth = $json_a[0]['birth']; 
    $ssn = $json_a[0]['ssn']; 
    $phoneNumber = $json_a[0]['phoneNumber']; 
    $address = $json_a[0]['address']; 
    $email = $json_a[0]['email']; 
    $pwd = $json_a[0]['Password']; 
    $nickname = $json_a[0]['nickname']; 
    if($id!=""){ 
    drawLayout($id,$name,$eid,$salary,$birth,$ssn,$pwd,$nickname,$email,$address,$phoneNumber); 
    }else{ 
    echo "The account information your provide does not exist\n"; 
    return; 
    } 
    /* end change for prepared statement */ 

    $conn->close(); 

function getDB() { 
    $dbhost="localhost"; 
    $dbuser="root"; 
    $dbpass="seedubuntu"; 
    $dbname="Users"; 


    // Create a DB connection 
    $conn = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error . "\n"); 
    } 
return $conn; 
} 

function drawLayout($id,$name,$eid,$salary,$birth,$ssn,$pwd,$nickname,$email,$address,$phoneNumber){ 
    if($id!=""){ 
     session_start(); 
      $_SESSION['id'] = $id; 
     $_SESSION['eid'] = $eid; 
      $_SESSION['name'] = $name; 
     $_SESSION['pwd'] = $pwd; 
    }else{ 
    echo "can not assign session"; 
    } 
    if ($name !="Admin") { 
    echo "<br><h3> $name Profile</h3>"; 
    echo "<table>"; echo "<tr>"; echo "<td>Employee ID</td>"; 
    echo "<td>$eid</td>"; 
    echo "</tr>"; 
    echo "<tr>"; 
    echo "<td>Salary</td>"; 
    echo "<td>$salary</td>"; 
    echo "</tr>"; 
    echo "<tr>"; 
    echo "<td>Birth</td>"; 
    echo "<td>$birth</td>"; 
    echo "</tr>"; 
    echo "<tr>"; 
    echo "<td>SSN</td>"; 
    echo "<td>$ssn</td>"; 
    echo "</tr>"; 
    echo "<tr>"; 
    echo "<td>NickName</td>"; 
    echo "<td>$nickname</td>"; 
    echo "</tr>"; 
    echo "<tr>"; 
    echo "<td>Email</td>"; 
    echo "<td>$email</td>"; 
    echo "</tr>"; 
    echo "<tr>"; 
    echo "<td>Address</td>"; 
    echo "<td>$address</td>"; 
    echo "</tr>"; 
    echo "<tr>"; 
    echo "<td>Phone Number</td>"; 
    echo "<td>$phoneNumber</td>"; 
    echo "</tr>"; 
    echo "</table>"; 
    } 
    else { 
     $conn = getDB(); 
    $sql = "SELECT id, name, eid, salary, birth, ssn, password, nickname, email, address, phoneNumber 
      FROM credential"; 
    if (!$result = $conn->query($sql)) { 
      die('There was an error running the query [' . $conn->error . ']\n'); 
    } 
    $return_arr = array(); 
    while($row = $result->fetch_assoc()){ 
      array_push($return_arr,$row); 
    } 
    $json_str = json_encode($return_arr); 
    $json_aa = json_decode($json_str,true); 
     $conn->close(); 
     $max = sizeof($json_aa);  
     for($i=0; $i< $max;$i++){ 
     //TODO: printout all the data for that users.   
     $i_id = $json_aa[$i]['id']; 
     $i_name= $json_aa[$i]['name']; 
     $i_eid= $json_aa[$i]['eid']; 
     $i_salary= $json_aa[$i]['salary']; 
     $i_birth= $json_aa[$i]['birth']; 
     $i_ssn= $json_aa[$i]['ssn']; 
      $i_pwd = $json_aa[$i]['Password']; 
     $i_nickname= $json_aa[$i]['nickname']; 
     $i_email= $json_aa[$i]['email']; 
     $i_address= $json_aa[$i]['address']; 
     $i_phoneNumber= $json_aa[$i]['phoneNumber']; 
     echo "<br><h4> $i_name Profile</h4>"; 
     echo "Employee ID: $i_eid  "; 
     echo "salary: $i_salary  "; 
     echo "birth: $i_birth "; 
     echo "ssn: $i_ssn "; 
     echo "nickname: $i_nickname"; 
     echo "email: $i_email"; 
     echo "address: $i_address"; 
     echo "phone number: $i_phoneNumber"; 
    } 
    } 
} 
?> 

<div class=wrapperL> 
<p> 
<button onclick="location.href = 'edit.php';" id="editBtn" >Edit Profile</button> 
</p> 
</div> 


<div id="page_footer" class="green"> 
<p> 
Copyright &copy; SEED LABs 
</p> 
</div> 
</body> 
</html> 
+1

SHA1とのパスワードハッシングは安全ではありません。代わりに、PHPの['password_hash()'](http://php.net/manual/en/function.password-hash.php)と['password_verify()'](http://php.net/manual/ en/function.password-verify.php)関数を使用します。 –

+0

試してみてください: '1 '; - 'ユーザIDには ' - 'とパスワードには何か。これであなたはeid 1のユーザとしてログインするはずです。 –

+0

ユーザ名に ''または' 1 '=' 1 'を入力すると、2番目の' 'も消費する必要があります。 – maraca

答えて

0

これはトリックをした:

' or '1' = '1'; -- 

、第二のダッシュの後にスペースがなければならないことを考慮して、これがための構文要件ですしてくださいコメント。

ありがとうございましたAlex Howansky、あなたの応答は私に解決策を案内しました。

関連する問題