2018年10月8日月曜日

PHPでコマンドを呼び出す際に入力値をエスケープする

サニタイジングというと色々ややこしい話になりそうですが、やはり外部からの入力値に危ない文字列が含まれるリスクは考慮しておく必要があります。例えば入力値を変数としてコマンドを実行する場合、以下のような複数の対策を取る必要があります。
  1. 入力値チェック
  2. エスケープ
  3. コマンド実行ユーザ権限を必要最低限のものとする
入力値チェックは実装するとは思いますが、思いもよらない入力に対応できない場合(不具合ではありますが)もあります。その場合の対策として、エスケープを行いましょう!
PHPの場合は以下の関数を利用するようです。

escapeshellarg()

更に、万が一のことを考え、実行させるユーザの権限を最小限のものにしておく必要があります。

まあ、そもそもPHPからコマンドを呼び出すような実装をするなと言う話はありますが、自分が作りたいものにコマンド実行ありきのものが多いのです。でも、今後SQLとかを実行する際にも役立つと思うので、勉強がてら慎重に作っていこうと思います。

こちらのサイトを参考にさせて頂きました。
サニタイズ/入力値検証/エスケープの考え方

0 件のコメント:

コメントを投稿