0

私のアプリでは、ユーザーに一意の名前を使用して登録するように求めています。アプリは、その名前でディレクトリを作成し、ファイルの保存などを行うことができます。

名前の英数字以外のスクリーニングについては、あまり考えていませんでした。ただし、UNIXコマンド名と一致するディレクトリ名を作成しないようにするように言われたスレッドに出くわしました。

これは正当なリスクですか?もしそうなら、そのような出来事をどのようにプログラムで選別することができますか? また、問題を説明するためにそのようなシナリオがどのように展開されるのかにも興味があります (エクスプロイト?)。もちろん、その最後の部分は学術的な関心のみです。

4

2 に答える 2

0

通常、それは問題ではありません(明らかなセキュリティリスクはありません)。シェルなどのほとんどのソフトウェアは、いくつかの環境変数(PATHなど)に基づいてUNIXコマンドを検索します。したがって、作成したディレクトリが「cd」などのunixコマンドと一致する場合でも、cdcdなどの他のunixコマンドのパラメータとしてのみ使用できます

ただし、別のアプリケーションが一部のディレクトリの検索などの他のアプローチに基づいてunixコマンドを検索すると、セキュリティ違反が発生する可能性があります。

于 2013-02-03T02:35:57.947 に答える
0

それがリスクであると私が考える唯一の方法は、コマンドライン関数を使用してそれらのユーザー名を振り返って処理する場合です。コマンドとして解釈できる場所では、ユーザー名をエスケープするように注意する必要があります...ただし、厳密に英数字のユーザー名を使用していると、実行するのに多くの問題が発生します。そのようなリスクに。

とにかく、ユーザー名が作成プロセスのパス上のアプリケーションと一致しないことを確認したい場合は、アプリ環境が何であれ、シェルアウトして、の結果を評価できますwhich $prospectiveUsername。空の文字列以外のものが返される場合は、ユーザー名がプロセスのパス上のアプリケーションであることがわかります。

注:上記のシナリオでは、シェルコマンドを呼び出す前に、必ずユーザー名をサニタイズしてください。そうしないと、たとえばユーザーが自分のユーザー名を「janedoe; rm -rf /」と入力することにした場合、セキュリティリスクが発生します。

于 2013-02-03T02:36:19.137 に答える