2017-03-26 10 views
-1

が必要になります。私は、SQLインジェクションのテスト(してください)のためのクエリのヘルプが必要なMySQLでクエリとPHP

マイコード:

<?php 
$conexion = @mysql_connect("localhost", "root",""); 
mysql_select_db("sqli"); 

if (isset($_GET['id'])) { 

    $user_id = $_GET['id']; 
    $query  = "SELECT * FROM users WHERE id = $user_id LIMIT 1"; 
    $result  = mysql_query($query) or die('No!'); 
    //$result  = mysql_query($query) or die(mysql_error()); 
    $row  = mysql_fetch_array($result); 

    if ($row['rol'] == 'admininstrator') { 
     next_lvl(); 
    } 

} 

if (isset($_GET['name'])) { 
    $name= strip_tags($_GET['name']); 
    echo "<h1>Hello $name</h1>"; 
} 

      ?> 
    <body> 
</body> 
</html> 

これは、SQLインジェクションの私のコードである、しかし、私関数 "next_lvl()"にアクセスする必要があります。

私はこれ試してみてください。http://localhost/sqli/sql.php?uid=4+or+1=1をし、次のエラー印刷: お知らせ:未定義のインデックス:EにおけるROL:ライン上の\プログラム\ WAMP \ WWW \ SQLIの\ sql.php 24の

感謝を。

+1

テーブルにはrolという列がありますか? – JapanGuy

+0

エラーは、 '$ row ['rol']'がないことを示しています。 'var_dump($ row)'は​​、結果が期待していることを確認するのに役立ちます。 – Luke

+0

私はテストをしなければならないので、コードを修正する必要はありません。一方、roleというフィールドがある場合。 –

答えて

1

4 or 1 = 1は有効なクエリですが、roladmininstratorであることを保証するものではありません。あなたが望む機能をPHPが実行するために必要です。あなたが使用している場合:

id && rol = 'admininstrator' 

(ただし、URLエンコードされた)あなたはroladmininstratorであることを確認することができます。

これを防ぐには、mysqliまたはpdoにアップグレードし、パラメータ化されたクエリを使用する必要があります。 mysql_ドライバを維持する必要がある場合は、IDをintとしてキャストすることができます。

$user_id = (int)$_GET['id']; 
関連する問題