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