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