安全なwebアプリケーションの作り方 292-305
- evalインジェクション
- eval:与えられた文字列をスクリプトのソースとして解釈実行する機能
- ちゃんと使わないとOSコマンドインジェクション攻撃と同じ被害を受ける(それはそう(それはそう))
対策:eval相当機能を使わない/引数に外部からのパラメータを含めない/英数字に限定する
- 思ったんだけど、脆弱性への対策として (1) 外部からのパラメータを使わない (2) どうしても使うときは英数字だけに限定する、っての多くない?いや、考えたら当たり前なんだけど、この2つを対策するだけである程度防げるのはすごいし、それでも防げてなくてこういう本で繰り返し言われているのも(色んな意味で)すごい
- サンプル攻撃でデータのやりとりするときにBase64エンコードしてて、なんで?って思ったらこういうことらしい、なるほどなぁ…
- https://ja.wikipedia.org/wiki/Base64
Base64は、データを64種類の印字可能な英数字のみを用いて、それ以外の文字を扱うことの出来ない通信環境にてマルチバイト文字やバイナリデータを扱うためのエンコード方式である。MIMEによって規定されていて、7ビットのデータしか扱うことの出来ない電子メールにて広く利用されている。
対策のevalに与えるパラメータを英数字に限定するってのは、スクリプト仕込むのに区切り文字(; / , / などなど、& とかもかな)使えなくなるからいい感じになるよ
- evalはたしかに便利で強いけど、便利で強いものはそれだけ副作用があるし、脆弱性が入ったときの影響も大きいから使わないようにしたほうがよい