3

私のサイトにログインしたユーザーは、Google ドキュメントとほぼ同じようにドキュメントを作成できます。ドキュメントは、ユーザーによって公開することも、非公開 (デフォルト) にすることもできます。ドキュメントは、次のようにデータベース テーブルに格納されます。

| id | title | content | public | owner |
| 1  | asd   | asd     | 1      |  1    |
| 2  | asd   | asd     | 0      |  1    |
| 3  | asd   | asd     | 0      |  2    |

public が 1 の場合、それはすべてのユーザーからのリンクで表示できる公開ドキュメントです: site.com/documents/id

問題は、ドキュメントを公開することはできますが、ユーザーがすべての公開ドキュメントにアクセスするために、常に URL ID を 1 ずつインクリメントできるようにしたくないということです。

  • site.com/documents/1
  • site.com/documents/2
  • site.com/documents/3

等々...

それで、IDなどをハッシュする必要がありますか?そのようです:

<?php echo 'site.com/documents/'.md5($id); ?>

問題は、ハッシュされているため、サーバー側にあるIDを特定できないことです...

私の問題について何ができますか?

4

4 に答える 4

5

セキュリティ要件によっては、ドキュメント ID が実際にはランダムであり、推測できないことを確認する必要があります。自動インクリメント ID を単純にハッシュすると、結果のハッシュはランダムに見えるかもしれませんが、増加する数値を単純にハッシュしている (そしてハッシュ アルゴリズムを正しく推測している) ことに誰かが気付くと、可能なドキュメント ID を推測するのは簡単です。

これを実現するには、単純に乱数をハッシュするか (データベースにハッシュの衝突がないことを確認してください)、UUID を使用します (生成方法の例については、この質問を参照してください)。

ハッシュされた識別子を既存のドキュメントにマップするには、ハッシュをドキュメントと一緒にデータベースに保存するだけです (ハッシュを主キーとして使用するのが最適です)。

于 2013-02-17T15:56:42.643 に答える
0

MD5は数値のハッシュには問題があり、誰でも数値のmd5を逆にすることができます。SHAのようなもう少し強いものをお勧めします。(URL全体を暗号化して、簡単に解読できないため、セキュリティを強化することもできます。ハッシュされるデータの量に関係なく、すべてのハッシュが同じサイズであるため、余分なスペースを占有しません)

ハッシュをデータベースに保存し、パブリックファイル用にのみ保存する必要があります。したがって、次のURL構造を持つすべてのURL:

"site.com/documents/65hd83jd8h..."

ハッシュは一意になるため、データベースで検索できます。

于 2013-02-18T12:45:46.140 に答える
0

必ずハッシュ化する必要があります。現在、md5 は十分に安全ではないことに注意してください。そのため、Sha または Blowfish を検討することをお勧めします (後者はやり過ぎのように見えますが)。

次に、ドキュメント プロパティを含むデータベース テーブルにハッシュを格納するだけです。

それ以外の場合は、自分でランダム ハッシュを作成してドキュメントを識別し、それを ID の代わりに使用することができます (明らかに、マーフィーが作成していないため、同じハッシュを持つ 2 つのドキュメントがあることを確認してください)。

于 2013-02-17T15:50:14.390 に答える