現状のお仕事はCMSを仕様に合わせてビジネスサイトを作るお仕事だが、このCMSが駄目コードであるが故にほとんど自作の俺々ライブラリ群を作っている状態になっている。まぁ僕はそっちの方が楽でいいんですが、仕様が最近までちゃんと決まってなかったので追加変更するカスタマイズがえらいことになっている。こりゃ、修羅場確定ですわ。死なないように頑張ろう。でもまぁ今の会社のやり方ははっきりは言わないけど、こんなやり方してたら修羅場は確実に発生するよねとは言いたい。僕は直接は言わないけどさ。業務改善はやりごたえがありそうでクラクラしますわ。
でもって表題。俺々ライブラリのView部分はSmartyで運用しているのですが、最近までセキュリティの事を考えてなかった。
XSS攻撃やCSRFを仕掛けてみたら普通に通るでやんの。これはまずいということで泥縄でセキュリティ対策を打っている。
フレームワーク使って楽なのはこんなところ省けることだよね。俺々ライブラリだとこういう所を手作業でやらないといけなくて面倒くさい。PHPのセキュリティまとめははまちちゃんの下記の記事が参考になる。
5分でできるPHPセキュリティ対策 - ぼくはまちちゃん!(Hatena)
とはいえ、XSS攻撃対策はSmartyで運用していると楽だ。Smarty使えば出力側のHTMLタグは全部サニタイジングを挟むことができるんである。やり方は下記。
<?php class SmartyWrapper { public $smartyObj; /** * コンストラクタ */ public function __construct() { $this->smartyObj = new Smarty(); $this->smartyObj->template_dir = __DIR__ .'/../smarty/template'; $this->smartyObj->compile_dir = __DIR__ .'/../smarty/template_c'; $this->smartyObj->config_dir = __DIR__ .'/../smarty/config'; $this->smartyObj->cache_dir = __DIR__ .'/../smarty/cache'; // XSS対策 $this->smartyObj->default_modifiers = array('escape:"html"'); return; } } $obj = new SmartyWrapper(); $obj->smartyObj->assign('html_tag', '<h1>ほげほげ</h1>'); $obj->smartyObj->display('index.tpl');
こんなかんじ。出力側では{$html_tag}としてやると、htmlタグが大なり小なりに置き換えられた形で出力される。
普通にhtmlタグを出力したい場合は{$html_tag nofilter}とするとエスケープせずに出力される。
CSRF対策にはトークンかまして、SQLインジェクションにはプリペアドステートメントを挟む。この一手間が面倒くさいんですよねー。自分でWEBサービス作るんだったら、CakePHPなり使いますわ。
以上。
PHP逆引きレシピ 第2版 (PROGRAMMER’S RECiPE)
- 作者: 鈴木憲治,山田直明,山本義之,浅野仁,櫻井雄大,安藤建一
- 出版社/メーカー: 翔泳社
- 発売日: 2013/10/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (9件) を見る