質問

ASP .Net MVCアプリケーションを開発しています。私のアクションの1つには、パラメーターとして id が必要です。例:

public actionresult Detail(Guid id){
    return View();
}

ご覧のとおり、 Int ではなく Guid を使用しています。この問題は表面的なものです。 URLは localhost / Detail / 0c157b42-379d-41d5-b9ba-83e9df9985b2 のように非常に長くすることができます。

localhost / Detail / 0c157b42 のような Guid の一部のみを取得しても安全ですか?

役に立ちましたか?

解決

GUIDは、一意になるように設計されていますが、その一部はそうではありません。詳細については、このブログ投稿をご覧ください。 GUIDを短くする必要がある場合は、SHA-1や(セキュリティ上の問題がない場合)MD5などの適切なハッシュを取得します。

他のヒント

いいえ、安全ではありません。

ただし、SHA-2ハッシュを計算して、その最初の数文字を取得できます。

いいえ、サブセットが一意でない可能性があるため、GUID全体が必要です。

例:

  

0c157b42-379d-41d5-b9ba-83e9df9985b2

     

0c157b42-379d-41d5-b9ba-83e9df9985b3

注意、最後の数字のみが異なります。始まりは両方とも同じです。 GUIDの作成時に変更される部分を予測する方法がないため、GUIDの末尾を使用することもできません。

考慮すべきその他のオプション- * 0c157b42で始まるGUIDの詳細が複数ある場合は、URL localhost / Detail / 0c157b42に適用可能な詳細オブジェクトのリストを表示します。 * URLエイリアシング-「フレンドリURL」を許可Detailsオブジェクトのフィールド。

-sのGUIDを消去し、HEXをBase32(A-Z、0-5)に変換すると、16文字に短縮されます。

少し遅い応答ですが、誰かがこれを読んだ場合のために...

用途に応じて、短縮GUID値を指定できます。

たとえば、ID値が生成され、認証トークンの種類の値としてユーザーに提供される場合、生成中に多くの文字を取得し、使用中の他の値と比較できます。一致するものがある場合は、新しいものを生成し、一意になるまで再比較します。

この手法は、GUIDのハッシュ値もトリムする場合にもお勧めします。実際、IDとして使用する値をランダムに生成する場合は常に、「既に使用中」ではないことを確認する必要があります

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top