2017-09-19 3 views
0

私は、Webアプリケーション用の単純なログブラウザを作成しています。サーバーはすべてのログファイルを一覧表示し、ユーザーはその中から1つを選択し、サーバーはその内容を表示します。環境はASP.NET MVCです。URIパラメータとしてファイル名を渡す - 安全にする方法?

URIにファイル名を渡すことは危険です。単純なやり方は、"..\..\web.config"を使用してすべてのパスワードとともに設定ファイルを表示することです。私は明らかに特定のファイルへのアクセスだけを許可するように、スクリプトを保護する必要があります。最も簡単な方法は、渡されたファイル名にシーケンス\または..が含まれているかどうかをチェックし、そのようなクエリを拒否することです。

私の質問です:このソリューションは十分安全ですか?あるいは私は完全に別のアプローチを選択する必要がありますか?


私の提案された解決策(議論する):あなたのアプリサーバ用/書き込み権を読んだり、DBに接続インタフェースを介してクライアントと通信管理できる

public LogData GetLog(string file) 
{ 
    string path = HttpContext.Current.Server.MapPath("~/App_Data/Logs/"); 
    string fileToOpen = Directory.EnumerateFiles(path, "*.*") 
       .Where(f => Path.GetFileName(f) == file) 
       .FirstOrDefault(); 

    if (fileToOpen != null) 
    { 
     // Process 
    } 
} 
+0

https://www.owasp.org/index.php/Path_Traversal – CBroe

+0

簡単な解決策は、ファイルを列挙し、GUIDをIDとしてデータベース/データストアに格納することです。代わりにそのGUIDを渡すことができますファイル名の。 – Steve

+0

@ Steve私が書いたように、これはログブラウザです。ログファイルは通常データベースに保存されていないので、私はこのソリューションのシンプルさについて議論するでしょう:) – Spook

答えて

0

、あなたはパラメータとしてIDを受け入れることができるし、サーバー上のパスを取得します。

関連する問題