1

私は crypt() を使用していますが、これは特定のケースでは 12 文字のソルトを持つ md5 ハッシュを使用します。

以下は、php.net の crypt ドキュメントから変更された crypt() が返す文字列の例です。

$1$rasmusle$rISCgZzpwk3UhDidwX/in0

これは、エンコーディングタイプも含むソルトです。

$1$rasmusle$ 

ここにエンコーディングタイプがあります。(この場合は MD5 )

$1$ 

そして最後にハッシュ値。

rISCgZzpwk3UhDidwX/in0

スラッシュはフォルダーとして解釈されるため、ファイル名にスラッシュを含めることはできません。

すべてのスラッシュを単純に削除する必要がありますか? crypt() が使用する文字セットに他の問題がありますか?

4

4 に答える 4

5

特定のユーザーの画像へのアクセスを禁止/許可したいようです。その場合、私は次のことを行います。

  1. ドキュメントルートの外に画像を保存します。これにより、画像を単純に直接リクエストできないようになります。
  2. 画像の元の名前をデータベースに保存し、sha1_file()ハッシュも同じレコードに保存します。これにより、サーバーに重複する画像がない場合に利点が追加されます。画像は小さいですが、システムが煩雑になるのを防ぎます。
  3. 誰かが「プライベート」イメージを要求すると、ユーザーがファイルにアクセスする権限を持っているかどうかを確認し、そうであれば (データベースから) ファイルを提供する PHP ファイルを介して要求します。

上記の方法を使用すると、誰が画像をリクエストできるかを最大限に制御でき、ユーザーはそのことに感謝します.

注: すべてのファイル システムには、1 つのディレクトリに保存できるファイル数に制限があるため、すべての画像を同じフォルダーに単純に保存することはできません。

画像を提供する PHP スクリプトの簡単な例は、次のようになります。

<?php

// always set the header and change it according to the type of the image
header("Content-type: image/jpeg");
echo file_get_contents('/path/to/the/image.jpg');
于 2012-11-26T21:54:08.790 に答える
1

/$1$/ - ハッシュの作成に使用されるアルゴリズムです

その追加情報なしでハッシュを作成するmd5 md5_file/関数を使用できます。sha1 sha1_file異なるアルゴリズムを同時に使用したくない場合を除きます。

于 2012-11-26T21:48:31.117 に答える
1

ハッシュに対して URLEncode メソッドを実行すると、すべての '/' が %2F に置き換えられるはずです... Apache サーバーのようなものはまだ '%2F' で Web リクエストをブロックしていると思うので、これが完全な修正ではないことはわかっています' を URL に含めます。この問題については私の 2 セントだけです

于 2012-11-26T21:48:38.340 に答える
1

ファイル名を含むユーザー提供のデータは常にNULL正規化してください。ただし、 PHP をだますために、名前が含まれるファイルをアップロードしてハッキングされたくない場合は除きます。許可された文字 (つまり、A-Za-z0-9 など) を指定し、その他すべてをアンダースコアに変換します。または、sha1/md5 を使用してファイル名からハッシュを作成し、その名前でファイルを保存します。

編集

これにより、AZ、az、0-9 を除くすべての文字がアンダースコアに置き換えられます_

$normalizedName = preg_replace('/[^A-Za-z0-9]/', '_', $userProvidedName);
于 2012-11-26T21:49:54.120 に答える