UNCパスを動的に構築する場合、特定のルートパスに制約するためにどのような手法を使用する必要があります。UNCパスの妥当性検査( .. .. と同様の注入を防ぐ)
string root = @"\\Blah\Share\YouStayHere\";
//pretend second string is from a query string a user could manipulate
string path = @"\\Blah\Share\YouStayHere\" + @"..\..\TresspassingQueryString";
if(! SomeValidation(root, path)) { throw new Exception("you dirty bastard"...
は、これはおそらく権限で管理されるべきで付与されたが、権限はオプションではありませんので、多分他のディレクトリには、同じアプリケーション内の別のASPページのコンテキストでアクセス可能です。
私は、Request.MapPathがアプリケーションのディレクトリ内でアクセスを維持するために使用できることは知っていますが、これは.NETアプリケーションの仮想パス外の共有です。
私はパスを解決してからpathCombined
がroot
から始まることを確認するためにチェックするためにPath.Combineを使用することを期待していたが、Path.Combineが.... \
また、私はそこかもしれないと想像し続けます誰かがこのような状況でできる他のタイプの注射であるので、私は ".. \"トークンの正規表現を行うよりも一般的なものを期待していました。
有効なパスであってもルート外に侵入していても、エラーメッセージがあいまいであることを確認しています。私。 2番目のエラーメッセージは実際のパスを推測してファイル構造に関する情報を提供しているため、「これは無効なパスです」というメッセージと「これは制限された領域です」という1つのメッセージを持つことは望ましくありません。 。 – AaronLS