Webサーバーでファイルを安全に保ちたい。これらのファイルにアクセスできるのは、これらのファイルにアクセスするために認証されたユーザーのみです。データベースにファイルを「LongBLOB」として保存することを考えましたが、最大2MBのデータしかサポートしていません。ファイルサイズは50MBを超える場合があります。ファイルを保護するための他のより良い方法はありますか?助けてください。よろしくお願いします。
それらをデータベースに保存しないでください。それらをWebディレクトリに置き、 .htaccess
。
他の方法で認証する場合は、Webにアクセスできないが、phpが実行するユーザーが読み取り可能なディレクトリにファイルを保存します。
いくつかのオプションが思い浮かびます。
Apacheを使用している場合は、htaccessを使用してディレクトリをパスワードで保護できます。 (最初のグーグルリンク: http://www.javascriptkit.com/howto/htaccess3.shtml )
またはファイルをWebサーバーの上に保存します。許可されたユーザーがそれらにアクセスできるようにするスクリプトをphpで作成します。
FTP経由で実行したい場合で、cpanelを実行している場合は、新しいftpアカウントを作成できる可能性があります。 yourdomain.com/cpanelをチェックして、インストールされているかどうかを確認してください。
DBにファイルを保存することは非常に悪い習慣です。ファイルに関する情報のみを保存することをお勧めします。名前、拡張子。ファイルは$ id。$ extのようにサーバーに保存されます。それは良い建築になるでしょう。そして、ユーザーがファイルをダウンロードするとき、彼はDBに名前のあるファイルを取ります。
英語でごめんなさい。
価値の高いダウンロード可能なコンテンツファイルをファイルシステムに直接保持することを選択した場合、最善の方法はそれらをwebroot。次に、アプリケーションは、コンテンツ(PDF、Word文書、曲など)のURL(必要に応じてURLエンコード)を作成する問題を解決する必要があります。
一般に、これは、クエリを使用してファイルパスを取得し、ユーザーがアンカーをクリックしたときにファイルパスを使用してコンテンツをユーザーに送信することで実現できます(header()
などを使用)。これは、ユーザーが実際のサーバー側のファイルパスを確認することなく実行できます)。
ユーザーを望まない場合[〜#〜] a [〜#〜]高価値のダウンロード可能なコンテンツのURLをユーザーに共有する[〜#〜] b [〜#〜] =の場合、アプリケーションは何らかの方法でリンクをユーザー専用に関連付ける必要があります[〜#〜] a [〜#〜]。何ができるの?どこから始めればいいですか?
明らかに、ユーザーがファイルをダウンロードする前に、セッション中にユーザー[〜#〜] a [〜#〜]がログインしていることを確認する必要があります。 それほど明白ではないは、ログインユーザーを防ぐ方法です- [〜#〜] b [〜#〜]ユーザーから送信されたURLの使用から[〜#〜] a [〜#〜](ユーザーへ[ 〜#〜] b [〜#〜])ダウンロードするA'sデジタルコンテンツ。
_$_SESSION
_を使用してログインユーザーのID(数値、または文字列)を保存し、最終的なクエリのその部分を作成すると(コンテンツがユーザーの購入などに関連付けられていると仮定)、ログインユーザーを防ぐことができます[〜 #〜] b [〜#〜]購入していないものをダウンロードすることから、SQLを処理するためのリソースヒットが発生します購入していない未購入のアイテムの空のセット。これは良いステップ2のように聞こえます。
ステップ1はどうですか?そもそもクエリを実行する必要性を防ぐことができる何かがありますか?
さて、見てみましょう。 HTMLフォームでは、非表示フィールドでXSRFトークンを使用して、送信されたフォームがPOST/GET要求を受信するWebサーバーから実際に発信されたことを確認できます。フォーム全体で1つのトークンが使用されます。
ダウンロードするユーザー固有のもの(アンカー)のページが与えられた場合、クエリ文字列パラメーターの形式で各アンカーのhref
属性に単一のトークン(同じトークンですが、ページリクエストごとに異なります)を埋め込んで保存できます。 _$_SESSION
_にあるこのトークンのコピー。
これで、ログインしたユーザー[〜#〜] b [〜#〜]がログインしたユーザーA's共有URLを使用しようとすると、ユーザー-が原因ですべてが失敗します。 [〜#〜] a [〜#〜]およびユーザー[〜#〜] b [〜#〜]異なるセッションがある(またはセッションがまったくない)、およびしたがって、異なるトークン。言い換えれば、「私のリンクはあなたのリンクと同じですが、異なります。」アンカーは、ページ、ユーザー、またはコンテンツだけでなく、セッションに関連付けられます。
そのシステムが整っていると、PHPは、データベースを関与させずにコンテンツのリクエストが有効かどうかを判断できます(送信されたトークンを_$_SESSION
_のトークンと比較することにより)。 、有効なXSRFトークンの期間/ライフタイムを制限するために_$_SESSION
_で時間制限を設定できます。time()
関数と基本的な計算を使用するだけです。60分はトークンのライフタイムとして理想的です。この状況ではアンカーをクリックします。クリックしたアンカーのトークンの有効期限が切れている場合は、ユーザーに再度ログインしてもらいます。
ファイルシステム上のファイルを使用し、パスをデータベースに保存する場合は、(少なくとも)次のことも行うようにしてください。
$_SESSION
_システムを用意します。ダウンロード可能なファイルは、htaccessで保護されたフォルダに保存できます。以下のようなスクリプトを使用して、ダウンロード可能なファイルの動的リンクを生成できます。
例安全なダウンロードリンク。 http://codecanyon.net/item/secure-download-links/309295
最良の方法は、ファイル参照をデータベースに保存することです。ファイル自体はサーバーファイルシステムに保存されます。これの複雑さは、データベースファイル参照とサーバーファイルシステム内の既存のファイルとの間に参照整合性があることを確認することです。 SQL Server 2008などの一部のデータベースには、実際のファイル自体へのファイル参照の整合性を維持する機能があります。
それ以外に、サーバーでファイル自体を保護することは、ファイルが存在する特定のフォルダーへのアクセス許可を構成できるOSに依存します。
ファイルが完全に静的である場合は、読み取り専用またはWORMメディアを使用してデータファイルを保存するか、実際に「LiveCD」から完全なWebサーバーを実行できます。それは確かにすべての人のニーズに適しているわけではありませんが、データの整合性が最優先される限られたケースでは機能します。