phpのexec()
関数は、コマンドを実行し、数式や数式の結果を計算することはできません。それはまったく違うものです。その文字列にはコマンドが含まれていないので、有効な構文ではありません。
代わりにあなたの代わりに、数式のexec()
へのお電話に有効なコマンドを供給する必要があります。
は、この単純な例を見てください:
<?php
$input = '((1*10)/100) + 100';
echo exec('php -r "echo ' . $input . ';"');
これは明らかに、コマンドラインが必要ですあなたがhttpサーバ内からそれをトリガしようとした場合のために、PHPのバージョンはphp
として利用可能です。しかし、他の利用可能なインタプリタ、例えばbash
を使っても同じことが可能です。
"インライン"代替(外部プロセスをフォークしないで)は、phpのeval()
関数を使用することです。しかし、もう一度、式ではなくコマンドを入力する必要があります。利点は、実行時に他のツールやインタープリタを使用する必要がないことです。対応する例は次のようになります
<?php
$input = '((1*10)/100) + 100';
echo eval('return ' . $input . ';');
両方スニペットの出力は明らか100.1
です。
ただし、どちらの方法でも、実行に使用する式を完全に制御することが重要です。 ではなく、を使用すると、クライアント側の入力をこのフィルタされていないものに渡すことができます。これにより、攻撃者はシステム上で任意のコードを実行することができます!
'EXEC()'数式の結果を計算しないように、コマンドを実行することを可能にするのに役立ちます。それはまったく違うものです。その文字列にはコマンドが含まれていないため、有効な構文はありません。 – arkascha