2012-04-15 8 views
0

JSONオブジェクトのクライアントに送信される情報ツリーがあります。そのオブジェクトでは、データベースから生IDを取得する必要はありません。私はidとオブジェクトのフィールド(タイトルなど)や塩のハッシュを作成することを考えましたが、これは処理オーバーヘッドに深刻な影響を与える可能性があることを心配しています。クライアント側の処理のためのデータベースキーの保護

SELECT * FROM `things` where md5(concat(id,'some salt')) = md5('1some salt'); 

このような状況でIDを隠す標準的な方法はありますか?

+0

データベースのデータを書き込んでいるスクリプトは信頼できません。 – ChrisK

+0

Webサーバーとdbサーバーの間のブリッジを信頼しない場合は、提案された方法を使用して情報を確認するためにブリッジ経由でソルトを送信します。ブリッジを介してソルトを送信すると、プレーンテキストを使用してIDで検索できます。 – ChrisK

+0

[シーケンシャルなハッシュライクな関数を設計する方法]の複製が可能です(http://stackoverflow.com/questions/9804100/how-to-design-a-sequential-hash-like-function) – Quentin

答えて

1

私はあなたのための2つのオプションを考えることができます。

1)あなたは事前にハッシュすべてのidと、データベース内の生のIDでそれを保存します。これは、あなたのdbのサイズとサイズの制約によっては良い考えであるかもしれません。

2)簡単なハッシュ関数を自分で作成してください!アイデアがなければ、簡単なことをお勧めします。単純だからといって、それがうまくいかないというわけではありません。私は関数がクライアント側でデハッシュされていないと仮定しています。個人的には、可能な限り最小限の遅延でデータを返すためにMySQLを可能な限り自由に保つのが好きなので、データベース側ではなくサーバー側のコード端で処理される処理関数(ハッシュ関数など)が好きです。

0

md5(concat(id,'some salt'))の値を持つ新しい列を作成し、それを計算してから、選択文を実行して計算オーバーヘッドを節約することができます。

1

オプションは、ハッシュID#sを使用して、クライアントに送信されたid#のリストを保存するためにphpセッションデータを使用することです。

これは、次回の読み込み時に毎回送信されるユニークなハッシュが毎回送信されることを意味します。

ハッシュIDは設定できますが(この場合はmd5とsaltが動作しますが、単純なことは何でもできます)、セッションの配列に格納してください。

可能であれば、データベースでこれを避けるようにしてください。

関連する問題