プログラミング言語内で、単純なシェルコマンドを実行します
cd var; echo > create_a_file_here
varが、私は、ファイル「create_a_file_here」を作成したい場所に(たぶん)ディレクトリの文字列を含む変数であること。これで、誰かがこのコード行を見つけた場合、たとえば、次のコードを割り当てることにより、コードを悪用することが可能です。
var = "; rm -rf /"
物事はかなり醜くなります。上記のケースを回避する1つの方法は、「;」などの特殊文字をvarの文字列で検索することです。シェルコマンドを実行する前に、これはおそらくすべてのエクスプロイトをカバーしているとは思いません。
「cd var」がディレクトリのみを変更し、それ以外は変更しないようにするための良い方法を知っている人はいますか?
sh
、または同様の構文を使用して独自のプログラミング言語を作成するが、拡張するvar
代わりに、あなたが書くために必要なのcd "$var"
?それともこれbash
でshopt -s cdable_vars
?ああ、私はあなたが他のいくつかのプログラムがこれらのコマンドを実行するためにシェルをフォークすることを意味すると思います。したがって、引用するだけですvar
が、引用文字自体が含まれていないことを確認してください...
s='"'; echo "$s"
プリント"
。
var=untrusted string
親プログラムで行うのでvar
、を呼び出すときにすでに設定されている環境変数もそうですsh
。次に、展開するたびにそれを引用するだけでよく、確実に行うことができます。ああ、そのアイデアはすでにステファンの答えの一部だと思います>。<
var
て、引数として渡すこともできます。例えば、呼び出しsh
の引数で-c
、'cd "$1"; echo > create_a_file_here'
、'sh'
、var
作品やへの変更を必要としませんvar
。'sh'
引数は次のように渡されます$0
。