0

クライアント用のファイル アップロードを作成し、可能な限り安全にしようとしています。次のコードを使用して、ファイルのアップロードを処理しています。アイデアは、ファイルの名前を変更し、Web ルートの外のフォルダーに書き込むことです。

問題は、「書き込み」プロセス中に、悪意のあるファイルがフォルダーに書き込まれ、次のコードで名前が変更される前に、ColdFusion が悪意のあるファイルの実行を許可する可能性があるかどうかです。

これは私のコンポーネントの上部にあります...

<cfset destdir = "/folder/upload/">

これは、ファイルを処理するコードの一部です...

<cfset var local = structNew()>
<cfset local.response = structNew()>
<cfset local.response['catcher'] = ''>
<cfset local.filename = listGetAt(#arguments.file#, 1, ".")>
<cfset local.fileext = ListLast(#arguments.file#, ".")>
<cfset local.nfile = #CreateUUID()# & "." & #local.fileext#>

<cftry>
  <cffile action="write" file="#destdir##local.nfile#" output="#arguments.content#">
  <cfset local.response['newfilename'] = local.nfile>
  <cfcatch type="any">
  <cfset local.response['catcher'] = "Write Exception " & #cfcatch.Detail# & " | " & #cfcatch.Message#>
  <cfset local.response['success'] = true>
  <cfreturn local.response>
  </cfcatch>
</cftry>

ファイルのアップロード手順は、CFC と Valums の AjaxUpload プラグインによって処理されていることに注意してください...

4

3 に答える 3

4

サンプル コードは、通常のファイル アップロードとは異なることを行っているように見えます。cffile action="upload" がなく、ファイルのコンテンツを既に取得しているようです。local.fileext安全と見なすファイルの種類に制限し、Arguments.content悪意がないことを確認する必要があります。ファイルを webroot に書き込むとすぐに、URL を介してプローブできるため、書き込む前にすべてが安全であることを確認する必要があります。

通常の形式のポスト ファイル アップロードでは、プロセスは次のようになります。

  1. cffile action="upload"ファイルのアップロードを webroot の外の一時フォルダーに書き込むために使用します。
  2. ファイルの整合性を検証して、悪意がないことを確認します (不良ファイルの場合は削除します)。
  3. 検証済みのファイルを最終的な場所に移動しますcffile action="move"
于 2012-04-19T21:17:57.933 に答える
1

あなたが尋ねた質問に答えるために-あなたの「書き込み」操作は単一の操作です。元のファイルを移動したり名前を変更したりしていません(少なくとも上記のコードでは)。代わりに、ファイル ハンドルを作成し、バッファを出力してハンドルを閉じます。ハンドルを解放する前にコードを実行することはできません。ファイル自体を移動して名前を変更したりコピーしたりすると、実行を許可するのに十分なギャップが生じる可能性があります。また、単一の要求スレッドでファイルを書き込んでから実行しようとすると、ファイル I/O によって問題が発生する可能性があることも知っておく必要があります (Java が OS の通知よりも少し早くヒットする可能性があるため、ファイルへのアクセスを取得しようとするとエラーが発生する可能性があります)。私が言っていることがわかる場合は、ハンドルリリースの)。

これは、問題の端に光を当てる可能性のある cffile ハッキングに関する投稿です。

http://www.coldfusionmuse.com/index.cfm/2009/9/18/script.insertion.attack.vector

注 - これは私の理解です...かなりしっかりしていますが、このリストにはすでに回答した人を含むかなり賢い人がいます. ここで誰かの雷を盗もうとしているわけではありません。

于 2012-04-20T17:59:05.900 に答える
0

アップロード時にファイルの名前を変更し、Web ルートの外に配置することは良い考えですが、coldfusion でファイルをアップロードする際のセキュリティを向上させる基本的な方法がいくつかあります。

手始めに、アクション アップロードを含む cffile には「accept」属性があり、ファイルのアップロードで許可するMIME タイプ(カンマ区切りのリスト)を指定できます。
cffile には、ファイルのパーミッションを設定するための「モード」属性 (Linux のみ)もあります。 ソース: http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_f_02.html

アップロードされた悪意のあるファイルが簡単にアップロードされた場合、自動的に実行されるとは思えませんが、予防策を講じることをお勧めします。

于 2012-04-20T07:53:24.560 に答える