2

私のデータベースには約100のテーブルがあり、テーブルごとに1,000〜20,000行あります。各テーブルにはidと呼ばれる主キーがあります。テーブル内の行を参照するときは、たとえばidを使用しているだけです。www.domain.com/viewuser.php?id=3

コード内に行IDへのハードコードされた参照はないと確信しています。これらはすべて、ユーザーがログインしたときに設定されたPOST値またはセッションIDのいずれかを参照します。

大規模な再コーディングや既存のクエリの変更などを行わずに、既存のすべてのテーブルのIDを自動インクリメント整数から一意の英数字IDに遡及的に変更するのは簡単ですか?もしそうなら、私はそれについてどうしますか?

私の2つの考えは、すべてのテーブルを手動で更新することでしたが、これにはすべての挿入も変更する必要がありますか?すべてのクエリの更新が必要になる可能性があると思いますが、間にあるunique_idテーブルで何かを行うことはできますか?これを行う簡単な方法があることを願っています...

4

2 に答える 2

2

データベース内のid値をランダム化する(auto_increment整数から英数字に変更する)ことは、根本的な問題に実際には対処しません。

id値をランダム化して難読化した場合でも、ユーザーはURL操作を通じて他のユーザーのデータにアクセスできます。達成しようとしているのは、特定のURL操作の試みが禁止されたデータを返すことに成功する可能性を「低く」することです。

アプリが一部のユーザーにデータが表示されないようにする必要がある場合、アプリはそれを行うための実際のメカニズムを提供する必要があります。

ID値をわかりにくくすることは非常に多くの作業になり、最終的には、実際に行う必要のあることを達成できません。

(Sabeen Malik、drew010、Justin Swartselからのコメントを参照してください、、、それらはすべて「正しい」です。)


アプリケーションが禁止データへのアクセスを防止するメカニズムをすでに実装している場合、ID値の難読化は必要ありません。

これらのID値を実際に難読化する必要があるのは、URL(またはPOST)だけであり、既存のデータベースを変更せずに実現できます。(Sabeen Malikのコメントを参照してください。ブラウザとの間で送受信されるID値を暗号化/復号化することが可能です...ブラウザで実行されているJavaScriptがあり、ID値が「注文可能」であることに依存している場合に大きな問題があります。 。)


これは、元の質問で探していた答えではない可能性があることを理解しています。id INT AUTO_INCREMENTしかし、私は正当な理由のない値からに変更する努力をしません。

于 2012-07-16T19:38:25.050 に答える
1

アプリケーションに関する深い知識がなければ、これに正確に答えることは事実上不可能です。私があなたに言うことができるのは、すべてができるということですが、それはあなたのコード構造に依存します。優れたMVCレイアウトまたは安価なブランケットスタイルコードを使用していますか?

モデルがすべていくつかのファイルに集中しているMVCのようなシステムがあることを心から願っています。そうしないと、アプリケーションのすべてのスポットを正常に維持して確認するのが大変になります。

于 2012-07-16T19:32:47.753 に答える