2011-02-06 3 views
0

何が良いですか?ワードドキュメント、pdfs、スキャンしたイメージなどのユーザードキュメントをデータベースまたはフォルダに保存できるようにする。セキュリティは最重要課題です。私は誰かがdomain.com/user/social/profile/user_images/23432434.pngのようなことをして、それを見ることを望んでいません。ユーザがアップロードした文書をphymyadminに保存する方が良いか、フォルダに保存する方が良いでしょうか?

ありがとうございました。

+3

phpmyadminはデータベースではなくフロントエンドです。 –

答えて

1

セキュリティが最重要課題の場合は、.htaccessを使用してコンテンツフォルダへの公開アクセスを閉じます。

1

アセットをパブリックフォルダ(アプリケーションが存在するドキュメントのルートフォルダ)の後ろに保存し、http://myapp.com/assets.php?id=13のように取得し、assets.phpがファイルを取得してコンテンツを出力するようにすることができます。

assets.phpに、あなたが役割を確認することができ、などなど

例えばのように:(あなたのスクリプトがある)

  • ルートフォルダ
    • public_htmlの
    • 資産(あなたのアップロードは嘘です、彼らは目に触れることはできませんし、誰かがassets.phpを呼び出すときに引き出すことができます)
1

DBまたはHDに保存すると、実際には何もしません。重要なのは、ファイルをどのように処理するかです。

この目的のために、任意の種類のハッシュ関数を使用できます。

  1. 、あなたは、例えば、MD5のために何ができる
  2. DB
  3. に各ユーザーに "塩" フィールドを追加します(MD5({ファイル名})。塩)

、それらのファイルを取得するには、pretyは難しいでしょうそれをキャプチャと組み合わせると。

+0

DBに保存すると、document.pdfとして保存されます。私がやっているのは、それをダウンロードするためのリンクが表示されているからです。 – AAA

+1

データベースにBLOB(バイナリーラージオブジェクト)として保存します。次に、保存する前の拡張子を知っておく必要があります。また、MIMEタイプを出力するのも正しいでしょう。私はあなたがHDDにそれらを格納し、@allenskdの答えを私と組み合わせることをお勧めします。 – exus

2

データベースにファイルを格納することは、後で後悔することがよくあります。データベースにのみファイル名またはIDを格納します。

アクセスを防止する場合は、ファイルをDOCUMENT_ROOTの外部に保存します。アクセスを処理するラッパースクリプトを作成し、呼び出されるときreadfile()またはX-Sendfile:のいずれかを使用します。 (基本的には、SQLストアド・リソースに対しても同じことが行われます)。

+0

私は新しいものなので、なぜそれが後悔するのか分からない。具体的な例は? – AAA

+1

@AAA:これは管理上のオーバーヘッドになります。さらに重要なことは、これは一度の重大なパフォーマンス低下です。 – mario

1

ファイルをサーバーのルートの上に保管します。例えば

の/ var/www /の - サーバルート。公開されている /var/documents - ここにユーザーファイルがあります。ルートの上にあり、公開されていません。

Serverのドキュメント:

#add headers 
echo file_read_contents("/var/documents/file.doc"); 
1

/var/www/serve.phpでSQLでファイルを保存するには、のような低速としていくつかの問題が発生することがあります。 あなたの.htaccessに

# no one gets in here! 
deny from all 

を使用してエコーのfile_get_contents($ファイル名)を使用することができます。またはreadfile($ filename);

関連する問題