2017-04-26 6 views
1

データがプライマリキーに接続されているデータの違い(セキュリティまたはパフォーマンス、または悪い習慣)があるかどうかは疑問でした。今、私たちはユーザーにリンクポストを持って言うことができます外部キーに接続されたデータに影響を及ぼす方法の違い

ユーザー

id | username | password 

投稿

id | post | user_id 

:だから、基本的にはこのようなデータベースを持って言うことができます。たとえば、投稿を削除するページがあります。

DELETE FROM posts where id=5; 

は今、ちょうどこれは実行中の欠陥は、ユーザーとして GETidを操作することができます:あなたが削除ボタンをクリックすると、だから我々は、例えば、このようなクエリを実行します。

私がこれを防ぐ方法を学ぶのは、その投稿のユーザーIDが現在PHPと別のクエリでログインしているユーザーのIDと同じであることを別のチェックで確認することです。

しかし、私は最近、ちょうどこのようなクエリを変更することにより、別の方法を試してみました:あなたはあなただけの影響を受けた行の数を得ることができる何かを削除した場合、メッセージが知りたい場合は

DELETE FROM posts where id=5 and userid=1; 

。私の友人は、これは非常に悪い習慣であると私に言った、私は、どのような方法でこれが最初の方法よりも悪いことが分かりましたか? (どちらの場合もSQLインジェクションを防ぐことができます)。全体的な違いは何ですか?

+0

あなたはgetパラメータとしてユーザーIDを渡すと言っていますか?または、ログインしたユーザーからユーザーIDを取得すると言っていますか? –

+0

@AdamForbis Imは、AND部分のクエリでユーザIDを追加することを話しています。誰かが自分の投稿を削除しようとすると、投稿のIDを操作すると削除されません。ログインしているユーザーのuser_idも自動的にチェックされますので、ユーザーIDを取得してください。 – Loko

+0

管理者アカウントで投稿を削除できるケースを処理する必要がありますか?その後、同じユーザーIDを持つことはありません。 –

答えて

0

GUIDを使用して推測するのは簡単ではありません。より多くの情報を提供するhttps://blog.codinghorror.com/primary-keys-ids-versus-guids/を読んでください。

+0

私は本当にそれを取得しません。 OPは2つのセキュアなメカニズムの間に尋ねます。セキュリティから曖昧に切り替えることをお勧めしますか? –

+0

申し訳ありません - 低値の整数(2つの値さえも)を推測しています - 安全ではなく、GUIDを推測しようとする - 不明瞭なセキュリティ! –

+0

まず、最初に物のIDを推測するのはどうですか?さらに、何らかのパブリッシングシステムであれば、IDは公開される可能性があります。インデックスを参照する必要があります:) –

関連する問題