sql >> データベース >  >> RDS >> Mysql

PHP / MySQLi:INSERTでのSQLインジェクションを防ぐ方法(コードが部分的に機能している)

    新しいPHPコード スニペット、まだインジェクションに対して脆弱です。
    挿入部分でプリペアドステートメントを使用していますが、実際にはプリペアドストレングスを正しく使用していません。

    プリペアドステートメントを作成するときは、生の値の代わりにプレースホルダーを追加するクエリを作成します。

    $stmt = $conn->prepare("INSERT INTO Users (email, pw) VALUES (?, ?)");
    

    疑問符はプレースホルダーであり、後でbind_paramを使用して置き換えられます 方法:

    $stmt->bind_param('ss', $email, $pw);
    

    ss bind呼び出しの一部は、データベースに渡される2つの文字列( s )をmysqldbに通知します。 stringの場合 、 i intの場合 など)。
    パラメータをバインドしています($name )ただし、クエリにはプレースホルダーも参照の種類もありません。.?

    一方、selectステートメントはまだ安全ではなく、脆弱性があります。
    挿入部分と同様に、プリペアドステートメントを使用する可能性があります。

    ユーザーからの入力がデータベースに対して「安全」であることを常に確認する必要があります。クエリ文字列を連結してユーザー入力を追加すると、データベースは文字列をエスケープせず、実行するだけです。

    標準のqueryのみを使用してください 入力パラメータなしで、特にユーザーが渡した入力パラメータなしで、完全なクエリを自分で作成するときにメソッドが呼び出されます!



    1. 1つのphpページで2つのSQLクエリを実行する(SET + SELECT)

    2. 1000レコードを超えるMySQLWorkbenchでクエリ結果をエクスポートする

    3. OpenShiftでのMySQL/CodeIgniter設定

    4. 式に基づいてmysql列の値を入力する方法は?