0

要求されたファイルの内容をネットワーク経由で送信するサービスを作成しています。ただし、固定parentディレクトリから派生したファイルの要求にのみ応答します。

頭に浮かぶ最初の潜在的なセキュリティ問題は、悪意のあるユーザーが..埋め込みパスを要求する可能性があることです。もう1つの潜在的な問題はシンボリックリンクですが、ローカルファイルシステムを制御していて、の下にシンボリックリンクがないため、これらは問題にはならないはずparentです。

..したがって、私の質問は、パスコンポーネントの中に存在するかどうかをチェックするだけで十分かどうかです。または、私が忘れてしまった他のセキュリティの脆弱性はありますか?

4

2 に答える 2

3

それについて行く別の方法は

  • 要求されたパスを正規化/正規化
  • (正規化された)親ディレクトリが要求されたパスのプレフィックスであるかどうかを確認します

そうすれば、絶対に確信できます。これには、正常に機能するノーマライザーが必要です。path.normalize()readlink -fなど、プログラミング環境で提供されているものを使用してください。

ない場合は、セキュリティ面で自分で書くのは問題ありません。あなたはあなたが知っていることを正規化し('..'は1つ上がる-またはそれを無視して違法にする)、そのまま残されたものは上記のチェックによって拒否されます。当然のことですが、もちろん、ファイルにアクセスするには、ユーザーが指定したパスではなく、後で正規化されたパスのみを使用する必要があります。

確認する必要があることの1つは、正規化された親ディレクトリが末尾のスラッシュ(Windowsの場合はバックスラッシュ)で終わることです。そうしないと、ユーザーは、parentDirと同じ文字で始まるparentDirと同じレベルのフォルダにアクセスできます。

于 2012-10-29T23:14:38.127 に答える
0

ダブルスラッシュを忘れないでくださいexample//path。一部のシステムはこれらをとして扱います/path

于 2012-10-29T22:07:05.137 に答える