データがプライマリキーに接続されているデータの違い(セキュリティまたはパフォーマンス、または悪い習慣)があるかどうかは疑問でした。今、私たちはユーザーにリンクポストを持って言うことができます外部キーに接続されたデータに影響を及ぼす方法の違い
ユーザー
id | username | password
投稿
id | post | user_id
:だから、基本的にはこのようなデータベースを持って言うことができます。たとえば、投稿を削除するページがあります。
DELETE FROM posts where id=5;
は今、ちょうどこれは実行中の欠陥は、ユーザーとして
GET
値
id
を操作することができます:あなたが削除ボタンをクリックすると、だから我々は、例えば、このようなクエリを実行します。
私がこれを防ぐ方法を学ぶのは、その投稿のユーザーIDが現在PHPと別のクエリでログインしているユーザーのIDと同じであることを別のチェックで確認することです。
しかし、私は最近、ちょうどこのようなクエリを変更することにより、別の方法を試してみました:あなたはあなただけの影響を受けた行の数を得ることができる何かを削除した場合、メッセージが知りたい場合は
DELETE FROM posts where id=5 and userid=1;
。私の友人は、これは非常に悪い習慣であると私に言った、私は、どのような方法でこれが最初の方法よりも悪いことが分かりましたか? (どちらの場合もSQLインジェクションを防ぐことができます)。全体的な違いは何ですか?
あなたはgetパラメータとしてユーザーIDを渡すと言っていますか?または、ログインしたユーザーからユーザーIDを取得すると言っていますか? –
@AdamForbis Imは、AND部分のクエリでユーザIDを追加することを話しています。誰かが自分の投稿を削除しようとすると、投稿のIDを操作すると削除されません。ログインしているユーザーのuser_idも自動的にチェックされますので、ユーザーIDを取得してください。 – Loko
管理者アカウントで投稿を削除できるケースを処理する必要がありますか?その後、同じユーザーIDを持つことはありません。 –