10

そこで、少しアドバイスが必要です。私は学術目的のみのウェブサイトを構築しており、非常に限られた人数に制限されています。この Web サイトの唯一の目的は、ファイルをアップロードするための GUI です。これらのファイルのサイズは通常、10 ~ 12 GB です。

reasearch を実行すると、php スクリプトを使用してファイルをアップロードし、php.ini で最大ファイル アップロード サイズを変更できることがわかりました (ただし、最大ファイル アップロード サイズの制限は見つかりませんでした)。いくつか質問があります。

1) 接続タイムアウトなどを回避するために、Web サイトとユーザーの間の接続を開いたままにする方法を何らかの形で理解する必要がありますか? もしそうなら、サーバー側でこれを行うだけで十分ですか? それとも、これらのユーザーが使用する Web ブラウザーにも問題がありますか (Web ブラウザーが接続をタイムアウトさせますか)? --- これらのアップロードには膨大な時間がかかるため、この質問をしています。

2) 心に留めておかなければならないセキュリティ上の問題にはどのようなものがありますか? これまでのところ、次のことを見つけて検討しました。

  1. Web サイトへのアクセスを多数のサブネット (希望するアカデミア ユーザー) からのみ制限する

  2. Web サイトにアップロードされるファイルは、一意のヘッダーで構成される特別な形式です) -- したがって、これらのヘッダーをチェックします。

  3. .htaccess を使用して CGI 実行を無効にする

  4. すべてのアップロードを www ルート フォルダの外に移動する

  5. これらのファイルをチェックしてアンチウイルスを見つける可能性があります

  6. 最初に、これらすべてのユーザーは、この Web サイトにアクセスするために認証を行います。これは、最初の質問でも考慮しなければならないことです。ユーザーはどのくらいの期間ログオンしたままでいられますか。また、それをどのように制御できますか?

この Web サイトのセキュリティ面は、12 GB のファイルを扱う場合に非常に厄介な問題である開発にとって非常に重要です。

これらは私が達成するのが難しいと思っていたことの一部ですが、他にもあると確信しています。私も何を考慮すべきだと思いますか?また、他の実装方法があれば遠慮なくどうぞ。

追加情報:

  • 現在、これらのユーザーはこのサーバーにファイルをアップロードするために scp を使用しています
  • これらのユーザーは私のコミュニティから非常に信頼されていますが、セキュリティはこのコミュニティの最大のモットーです。一般に公開されているものはほとんどなく、これらのサーバーに保存されている情報の一部は危険にさらされることはありません。
  • サーバーにアップロードされるファイルは基本的に実在の人物に関する機密データなので、パケットスニッフィングなどを考慮する必要があります

みんなありがとう、私はこれが飲み込むことがたくさんあることを知っていますが、どんな助けも本当に感謝しています.

4

7 に答える 7

10

PHP を介して単一のファイルをアップロードすることは不可能です。サーバー リソース (メモリ) をどれだけ投入しても (そして、私を信じてください、大量に必要になります!)、PHP にはそうするのを妨げる制限が 1 つあります。

php.ini には、サーバーに送信できるデータの最大サイズに影響する「post_max_size」という変数があります。この変数は符号なし 32 ビット整数で、4,294,967,295 を超えることはできません。

適切な解決策は、Flash を使用してファイルをいくつかの小さな部分に分割してから、ファイルのアップロードを実行することです。まさにこれを行うライブラリを見つけました:http://www.blog.elimak.com/2011/08/uploading-large-files-with-flash-splitting-the-bytearray-in-chunks/

PHP でメモリの問題が発生した場合は、チャンクを小さくしてください。

幸運を!

編集: 2 番目の質問に答えるには、そのほとんどがそこにあります。データが途中で乗っ取られる可能性があることを懸念している場合は、SSL を使用して転送を実行してください。認証に関しては、OAuth の使用を検討し、転送の非アクティブ時にユーザーのアクセス トークンを必ず取り消すようにしてください。.htaccess ファイルに追加php_flag engine offして、アップロードされた PHP ファイルが実行されないようにします。また、サーバー ウイルス スキャナを定期的に実行することも悪くありません :)

于 2013-03-18T14:21:52.453 に答える
2

あなたのユーザーを知らないので、SCP を使い続けることをお勧めします。セキュリティ上の懸念はすべて SCP で対処されており、広く自由に利用できます。

そうは言っても、ユーザーが技術者でない場合、SCP が苦痛であることは理解しています。私があなたなら、これを完全に Web アプリケーションとして実装しようとは思わないでしょう。ユーザーに適切な SCP コマンドを生成し、それを実行するだけの Web フロント エンドを用意します。これは、Java アプレットを使用すると簡単に実行できます。また、プロセスにフィードバックされる SCP の進行状況を Java に変換するだけで、ブラウザーを介して大まかな進行状況を提供できます。アプレット ルートを使用すると、通常、アプレットはクライアントの PC でプロセスを開始できないため、セキュリティ上の問題が発生します。これを回避するには、アプレットに署名するか、より高いレベルの権限を要求する必要があります。繰り返しますが、これは、ユーザーの技術レベルに応じて、適切なソリューションである場合とそうでない場合があります。

Web アプリ ルートを使用することを主張する場合は、転送に SSL/TLS を使用していることを確認してください。これにより、パケット スニッフィングの問題が解決されます。また、巨大なファイルのいずれにも実行可能ビットが設定されていないことを確認してください。それらを実行可能にする必要がある場合は、保存中ではなく、ダウンロード時に実行可能ビットを設定するようユーザーに要求してください。サーバー上で実行する必要がある場合は、組み込みのファイル システム アクセス許可を使用して、アプリをサンドボックス化します。ルートとしてサーバーにアップロードして実行する必要がある場合は、天国が役立ちます。その場合、セキュリティは問題外です:-)

ファイルをチェックするためのアンチウイルスがあることは良いことですが、検出率がひどいことに注意してください. ファイルが深く感染し、35 の AV プログラムのうち 30 でクリーンであると宣言されたケースを見てきました。すべてのファイルが感染していると想定し、それらの権限を適切に制限します。

本当のリスクは、誰かがエクスプロイトを含むコードをアップロードする可能性があることです。ファイルが実行可能でない限り、それは難しくなります。コンパイラにアクセスできない場合は、さらに困難になります。ファイルにアクセスできる方法を特定のプログラムのみに制限すると、悪用者にとってさらに困難になります。これを防ぐためにできる最善の方法は、パッチをインストールすることです。アップデートは時々何かを壊しますが、あなたを安全に保ちます。

ユーザーが信頼できる場合は、ファイルを読み書きできるユーザーのアクセス許可を自分で設定できるようにすることができます。このようにして、個人の機密情報が制御され、誰かがアクセス許可を緩く設定した場合の説明責任があります。

これは解決すべきかなり大きな問題であり、表面に触れたにすぎません。少なくとも少しは役立つことを願っています。

于 2013-03-14T19:40:20.313 に答える
1

あなたが言うように、そのようなウェブサイトを効率的に構築することは本当に非常に難しいです. ただし、より適切で安全なアプローチとして、Java または C# で構築された GUI プログラムの使用を検討することをお勧めします。その理由と利点は数多くあります。

まず、アップロードする前にクライアント側で分割することを強くお勧めします。ユーザーは、 FFSJ Command Line Interface (Windows 用) やJJSplit (Java オープン ソース)など、このために作成された強力なユーティリティを簡単に使用できます。

このようなプログラムを使用する利点は次のとおりです。

  1. ユーザーの認証をより安全に
  2. クライアント側とサーバー側の両方でユーザー IP サブネットを検証する
  3. 転送を容易にするためにファイルを分割するオプションがあります
  4. 複数のファイル部分を同時にアップロードできるという利点があります
  5. ユーザーのインターネット接続の最大速度を使用することができます
  6. アップロード中に発生する可能性のあるエラーを最小限に抑えて修正することができます。
  7. 信頼性と正しいアップロードを保証するためのアップロード後のチェックサム検証
  8. アップロードを暗号化することもできるため、セキュリティ上の利点がさらに高まります。

私は続けることができますが、あなたは要点を理解しています。ただし、このオプションの明らかな欠点は、プログラマーでない場合の経済的コストと時間です。

ただし、分割とアップロードの基本的な機能を既に備えているそのようなプログラムの 1 つにGSplitがあります。Unix ベースのシステムでは、アップロード前にファイル自体を分割したり、 HJSplitなどのプログラムを使用したりすることもできます。

PS:

PHP を使い続ける必要がある場合は、Open Uploadを確認してください。これは RapidShare クローンに似ており、既に IP 制限、ユーザー認証、キャプチャなどを備えています。

それがあなたの質問に徹底的に答えることを願っています。幸運を。

于 2013-03-20T03:11:06.647 に答える
0

ajax 関数を使用してセッションを維持したり、ob 関数を使用してフローを制御したりできます。http://www.php.net/manual-lookup.php?pattern=ob&lang=pt_BR&scope=quickrefを参照してください。

于 2013-03-20T20:07:22.467 に答える
0

私見、この状況では FTP の方がはるかに適しています。

于 2013-03-20T22:38:15.370 に答える
0

はい、Flash や Java を使用せずに、HTML5 を使用してそれを行うことができます。FileReader オブジェクトを介してファイルの読み取りスライスを作成し、ajax を介して生のチャンクをサーバーに送信すると、それらを読み取って PHP で組み立てることができます。ファイルをPHPに投稿しているときに、ajax投稿リクエストで開始バイトや終了バイトなどの追加属性を渡すことができるので、どの部分がアップロードされたかを追跡し、何らかの構築を行うことができます。必要に応じて一時停止/再開ロジック。詳細については、これを確認してください。

http://www.html5rocks.com/en/tutorials/file/dndfiles/ http://www.webiny.com/blog/2012/05/07/webiny-file-upload-with-html5-and-ajax- using-php-streams/

私は Java や Flash よりも HTML5 を使用したいと考えています。SSLを使用できます。さらに安全にしたい場合は、それらのユーザーに秘密鍵を渡して送信前にデータを暗号化し、サーバーで復号化できます(SSLを使用すると冗長になります). 12 GB のデータ ファイルの復号化はかなり遅くなる可能性があることに注意してください。

于 2013-03-20T21:59:50.093 に答える
0

FTP + Explicit/Implicit SSL を真剣にお勧めします。これは間違いなくあなたの問題を分類します。

以下をサポートするいくつかの高度な ftpd があります。

  1. ユーザーが大きなファイルをアップロードできるようにする (ほとんどの場合)。
  2. プレーンパスワード認証の前にユーザー接続を拒否します。
  3. 特定の IP 範囲内でのユーザー ログインを許可します。
  4. アップロード/ダウンロード/削除/リストなどのカスタム権限;
  5. すべてのユーザーを自分のフォルダーに chroot します。
  6. 再開可能 (カスタマイズ可能な権限でもあります);
  7. SFV ファイルを使用したファイル整合性チェック。
  8. Zip の整合性チェック;

唯一の欠点は、クライアントをダウンロードしてセットアップすることです。これは、誰もが好むわけではありません。

HTTP と同様に、コンテンツを表示するにはある種のブラウザが必要であり、それぞれを操作するには FTP クライアントも必要です。

于 2013-03-21T00:25:40.307 に答える