私は、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
}
}
https://www.owasp.org/index.php/Path_Traversal – CBroe
簡単な解決策は、ファイルを列挙し、GUIDをIDとしてデータベース/データストアに格納することです。代わりにそのGUIDを渡すことができますファイル名の。 – Steve
@ Steve私が書いたように、これはログブラウザです。ログファイルは通常データベースに保存されていないので、私はこのソリューションのシンプルさについて議論するでしょう:) – Spook