Webアプリケーションからシェルスクリプトを動作させるときのサニタイズ
カテゴリー:Linux
作成しているWebアプリケーションに、GETパラメータから値を受け取ってその値を元にシェルスクリプトを動作させるという処理がありました。
このような処理があるときは値を受け取ったときに適切にサニタイズしなければサーバに致命的な脆弱性を生みます。
では、どのよう値が危険なのかを説明していきたいと思います。
今回、以下のようなシェルスクリプトを実行するとします。$1はWebアプリから受け取った値です。
cp $1
セミコロン
ここでもし$1の中身が「;rm -rf *」であればシェルスクリプトが実行する内容は
cp;rm -rf *
ディレクトリ内のファイルが全て削除されてしまいます。
これを防ぐため「;」はバックスラッシュでエスケープしておくべきです。
スラッシュ
次に$1の中身が「../../../../etc/filename」のようにシステムにかかわるパスであれば、システムファイルが書き換えられてしまう危険性があります。
そこで上の階層のディレクトリをディレクトリを書き換えられないようにするため「/」もエスケープする文字列に指定しておくべきでしょう。