この記事では、例を使用して PHP で SQL インジェクションを防ぐ簡単な方法を紹介します。学習が必要な方は、この記事を参照してください。
方法 1: パスワードの比較
アイデア: まず、ユーザーが入力したユーザー名を使用してデータベースをクエリし、データベース内のユーザー名に対応するパスワードを取得して、データベースからクエリしたパスワードとユーザーが送信したパスワードを比較します。
コード:
コードは次のとおりです | コードをコピー |
$sql="username='$name' のユーザーからパスワードを選択"; $res=mysql_query($sql,$conn); if ($arr=mysql_fetch_assoc($res)){//ユーザー名が存在する場合 if ($arr['password']==$pwd) {//パスワードの比較 nearsニーズの必要性が見つかります}その他{ 「入力されたパスワードは正しくありません」をエコーします。 } }else { echo "このユーザー名は存在しません" }
|
方法 2: PDO の PDO::prepare() 前処理操作を使用して SQL インジェクション攻撃を防止します
アイデア: PDO オブジェクトを作成し、PDO の前処理操作を使用して SQL インジェクション攻撃を防止します
コード:
コードをコピー | |
$name=$_GET['ユーザー名']; $pwd=$_GET['パスワード']; $sql="ユーザー名=? およびパスワード=? のユーザーから * を選択";//1. PDO オブジェクトを作成します $pdo=new PDO("mysql:host=localhost;port=3306;dbname=injection","root",""); //2. エンコードを設定します $pdo->exec("set names 'utf8'"); //3. $sql ステートメントの前処理 $pdoStatement=$pdo->prepare($sql); //4. 受け取ったユーザー名とパスワードを入力します $pdoStatement->execute(array($name,$pwd)); //5. 結果を取得します。 $res=$pdoStatement->fetch(); if(empty($res)){ echo "入力されたユーザー名またはパスワードが正しくありません"; }その他{ with with echo 「ログイン成功」; }
|