4

ユーザーが簡単な調査へのリンクを共有できるアプリケーションを開発しています。このために、調査ごとに一意の URL を生成したいので、URL は次のようになります。

http://myapp.com/aBcDe1F

URL の英数字の識別子の部分は、疑似ランダムで、やや短い (6 ~ 8 文字) にする必要があります。これを生成するのは簡単ですが、一意でありながら疑似ランダムであることを確認するにはどうすればよいでしょうか? それを生成し、データベースへのクエリでチェックして、以前に生成されていないことを確認し、そうでない場合は、別の文字列を再生成して同じプロセスを再試行する必要がありますか?

このように URL を難読化してもセキュリティが確保されないことは承知していますが、このアプリケーションではパスワード ベースの認証が除外されているため、疑似ランダム文字列を使用しようとしています。

4

4 に答える 4

3

はい-あなたが説明したようにそれをしなければならないと思います。しかし、完全に衒学的であるために(うーん、私は「安全」を意味します)、これをしないでください:

do
{
    generate a value
    check the database
}
while (the value did not exist)

insert a new row into the db

2 人の異なるユーザーに対して同時に同じ値を生成できる可能性は (非常に) わずかです。

むしろ、値をデータベース内の主キーとして使用し、これを行います

do
{
    generate a value
    insert a new row into the db
}
while (there was a PK violation)
于 2011-05-04T15:46:07.390 に答える
0

言語は指定されていませんが、多くの言語が GUID の作成をサポートしています。それらのいずれかを使用しないのはなぜですか?

于 2011-05-04T15:37:13.137 に答える
0

それにはさまざまな方法がありますが、一般的な方法の 1 つは、現在の時刻を使用して md5() を実行することです。その後、データベースが以前に使用されているかどうかを確認できます。通常、同じ文字列を生成する 2 つの md5() が近接する可能性は非常に低いです。

他の方法には、ユーザーの ip + タイムスタンプを文字列として使用し、それを md5() することが含まれます。

それが役に立てば幸い (:

于 2011-05-04T15:38:42.703 に答える