2016-12-16 14 views
1

こんにちはみんな下記のPHPコードは私です、私はそれがここ SQLインジェクション

$sql = "select Email,Password  from user where Email='$emailid'"; 
$ctr=0;   
    try 
    { 
     $result = $con->query($sql); 
     foreach($result as $row) 
     {    
    $ctr++; 
    $pword = $row['Password']; 

    } 
    } 
catch(PDOException $e) 
    { 
     $errTyp = "danger"; 
    $errMSG = "Something went wrong, try again later..."; 
    } 

if($ctr == 0) 
{ 
$errTyp = "danger"; 
$errMSG = "Invalid Username | Password"; 
} 

else 
{ 
if($pword==$password) { 
      $_SESSION['Id']=$emailid; 

脆弱かではありません知っている必要がありますが、私のPHPのログインページ上記のコードはどのように脆弱性が、ちょうど確認することですSQLインジェクションのコードですか?

シンプル
+0

を使用すべきでない場合は? – Twinfriends

+0

PDO :: query()の代わりにPDO :: prepare()を使用し、クエリでプレースホルダを使用します。 – Qirel

答えて

0

$sql = "select Email,Password from user where Email='$emailid'"; 

$ EMAILIDができれば、

$emailid = 'or 1=1'; 

インジェクション、

$sql = "select Email,Password from user where Email=''or 1=1"; 

は、それはあなたのデータベースの最初のレコードを返します。

攻撃が発生します!

+0

あなたは '$ emailid = '\'または1 = 1 'を意味します; – Federkun

+0

yah、$ emailidが直接ユーザのINPUTから来た場合、それは起こる可能性があります! –

0

は私が主な問題は、あなたがクライアントから送信されたデータに信頼することはできません

$ EMAILID

Email='$emailid'" 
の起源($ _ POST、$ _ GET)することができることを参照してください。セキュリティの主な原則です。 POST変数をSanitize/FilteredしていればOKです。 `$ emailid`から来たんはどこで少なくともプリペアドステートメント

http://php.net/manual/en/pdo.prepare.php

関連する問題