cakePHPによるXSS対策とDRY原則 【結論無し】
先日の記事(cakePHPにおけるXSS対策)で僕は、XSS対策するならコントローラとモデル両方に記載すべきだと書いた。この主張は今でも変えない。
が、これはDRY原則に反している。
実際のメソッドはライブラリに書いてあるとしても、その呼出を両方に書いている事には変わらない。つまり、MVCパラダイムが二重化を強要しているということになる。
前は「まぁ、XSS対策を外すなんてことは考えられないし……」と思っていたが、何かの拍子で外さなくてはいけなくなった時にめんどくさくなったらかなわないし、やはりこの原則を守ることに越したことはないので、何かしら手は無いか考えている。
現段階では、コントローラで処理したデータ($this->Model->save())を、そのままViewに返すのではなく、再びモデルから取り出すというパターンを常に採用する、という案がある。これだとコントローラにXSS対策の関数をかませなくても、モデルにかけば全てオッケーなのだが、これは計算リソースと時間リソースの無駄遣いのため、見送りたい。
逆は先日の記事の通り、パラダイムを裏切った設計になるのでダメだと思う。
さて、何か画期的な解決策はないものだろうか。