私のphp Webページは、サーバー上でコマンドを実行します:
exec("encrypt -pPassw0rd infile outfile; rm infile");
サーバーはリナックスです。
ちょうど実行しました:
grep -R "Passw0rd" /
パスワードがどこにも保存されていないかどうかを確認するには、これで十分ですか?
ここでのポイントは、コンテキストに関係なく、ユーザーからの入力は決して信頼されるべきではないということです。
これらのタイプの攻撃に対抗するために、PHPにはescapeshellarg()とescapeshellcmd()の2つの関数が用意されています。
escapeshellarg()関数は、システムコマンド(この場合はzipコマンド)の引数として使用するために、ユーザー入力から受け取った潜在的に有害な文字を削除または削除するように設計されています。この関数の構文は次のとおりです。
escapeshellcmd()は、基盤となるオペレーティングシステムにとって特別な意味を持つ文字のみをエスケープすることを除いて、対応するものと似ています。escapeshellarg()とは異なり、escapeshellcmd()は空白を含む入力を処理しません。
ユーザー入力がシステムコールの引数リストの一部として使用される場合は、escapeshellarg()関数が常に適切な選択です。
お役に立てば幸いです。
ファビオ@fcerullo