-6

Java で書かれています。fName = ..project/blah/blah.exe の場合、これがセキュリティ上の問題になる理由がわかりません

これにより、同じ名前を持つ別のディレクトリで悪意のある可能性のあるファイルが開かれる可能性がありますか?

String sFileName = request.getParameter(“fName”);
sFileName = sFileName.replaceAll("/", “\\");
sFileName = sFileName.replaceAll(“..\\", ""); 
4

2 に答える 2

5

直接使用する場合sFileName、最も明白な問題は、 を扱わないことですabsolute paths。たとえば、入力は次のようになります。

C:\Users\Test\secret.txt

何も置き換えず、すぐに開くだけです。

もう1つは、置換自体がパスを作成する可能性がある..ことです。たとえば....\\secret.txt、 に置き換えられると考えてください..\secret.txt

于 2012-10-17T04:41:27.820 に答える
3

それはおそらく安全ではありません。または、むしろ、ポストの置換はセキュリティを追加しません.

次の入力を想像してください。

..../some/sensitive/relativepath

次の出力が得られます (これは文字列値であり、文字列リテラルではありません)。

..\some\senstive\relativepath

つまり、提供されたコードは、慎重に構築された (「ハッカー」などの) 入力に対して保護されていません。実証されているように、「相対パスの削除」をバイパスするのは簡単です。

また、絶対パスも保護しません。

\some\sensitive\absolutepath
于 2012-10-17T04:38:57.097 に答える