0

App_Dataフォルダー内の選択したディレクトリおよびサブディレクトリ内の特定のファイルにアクセスできるように設計されたASP.NetMVCコントローラーアクションがあります。

ユーザーがルートディレクトリまたは親ディレクトリにアクセスできず、ディレクトリとサブディレクトリ内のファイルにのみアクセスできるように、これをロックする方法を教えてもらえますか?

コントローラーアクションの安全でないバージョンは次のとおりです。

public string GetFile(string fileName)
{
    string dataDir = AppDomain.CurrentDomain.GetData("DataDirectory").ToString();
    string specialFiles = "SpecialFiles";

    string finalPath = Path.Combine(dataDir, specialFiles, fileName);
    string text = System.IO.File.ReadAllText(finalPath);
    return text;
}

fileName単純な解決策は、のような文字列の組み合わせをチェックしてから..\、例外などをスローすることです。このソリューションを実装することはできますが、ベストプラクティスが存在する場合はそれに従うことをお勧めします。

4

1 に答える 1

1

文字列をfinalPathに結合する前に、fileName以下からFileNameを抽出します。

fileName = System.IO.Path.GetFileName(fileName)
于 2013-03-10T06:56:27.650 に答える