私は、解凍して私たちのサーバーに保存したzipファイルをアップロードできるWebサービスを構築しています。Javas Fileコンストラクタを使ってパスのトラバーサルが可能ですか?
私が指定したパス内のファイルを開くには、次の関数を作成しました:
private File secureOpenFile(String fileName, String directorypath){
return new File(directorypath, fileName);
}
しかし、それはパストラバーサルの可能性を持っているとして、セキュリティスキャンは、これは安全ではないことを私に伝えます。引数を与える(「../../notsafe」、 『uploadfolder』)は、Fileクラスのドキュメントに、私は次を発見した、しかし...悪意のある攻撃者が他のファイルを上書きする
を可能にする:https://docs.oracle.com/javase/7/docs/api/java/io/File.html#File(java.io.File,%20java.lang.String)
をそれ以外の場合、親抽象パス名はディレクトリを表し、子パス名文字列はディレクトリまたはファイルのいずれかを表します。子パス名文字列が絶対パスであれば、それはシステム依存の方法で相対パス名に変換されます。 parentが空の抽象パス名である場合、新しいFileインスタンスは、子を抽象パス名に変換し、システム依存のデフォルトディレクトリに対して結果を解決することによって作成されます。それ以外の場合、各パス名文字列は抽象パス名に変換され、子抽象パス名は親に対して解決されます。
私は次のように解釈しました。親フォルダを残しません。私は正しいかどうか?このコードは安全ですか?今の場合:このセキュリティ上の問題を解決する最善の方法は何ですか?
あなたはユーザーからのパラメータの入力を受け取りますか? – ProgrammerBoy
Hey ProgrammerBoy。第2引数のファイル名は、ユーザーがアップロードしたzipファイルに由来します。私はユーザーがこのzipファイルに何か変なものを置くことができると思うので、私はその入力を信頼しません... – rmeertens