2016-07-09 3 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インジェクションを防ぐためにこのコードで変更する必要があるのは何ですか?

私はMySQLデータベースに接続するには、次のコードを使用しています:

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

私はmysqli_prepareを使用しようとしますが、エラーを取得しています:

$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(); 

は、私はエラーを次しまっ:

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

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

答えて

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が動作している間に構文エラーを出しています。 –

関連する問題