BEAR.Sundayでコンタクトフォームを作ってみる③
BEAR.Sundayでコンタクトフォームを作ってみる②の続きです。
まず、XSS脆弱性をつぶします。
Twigのautoescapeを有効にする
BEAR.SundayのTwigの設定は、vendor/bear/package/src/Provide/TemplateEngine/Twig/TwigProvider.php(つまり、BEAR.Packageの中)にあります。
ここで、以下のようになっており、autoescape
がfalse
になっています。
vendor/bear/package/src/Provide/TemplateEngine/Twig/TwigProvider.php
$twig = new Twig_Environment($loader, [
'cache' => $this->tmpDir . '/twig/cache',
'debug' => true,
'autoescape' => false,
]);
これをtrue
に変更します。
vendor/bear/package/src/Provide/TemplateEngine/Twigフォルダの中にある
- TwigProvider.php
- TwigModule.php
をsrc/Module/Providerフォルダを作成し、そこにコピーし変更します。
TwigProvider.phpを以下のように変更します。autoescapeをtrueに変更し、後はクラス名を調整しています。
--- vendor/bear/package/src/Provide/TemplateEngine/Twig/TwigProvider.php 2014-08-09 07:11:26.000000000 +0900
+++ src/Module/Provider/TwigProvider.php 2014-08-09 14:29:22.000000000 +0900
@@ -1,16 +1,13 @@
<?php
-/**
- * This file is part of the BEAR.Package package
- *
- * @license http://opensource.org/licenses/bsd-license.php BSD
- */
-namespace BEAR\Package\Provide\TemplateEngine\Twig;
+
+namespace Kenjis\Contact\Module\Provider;
use BEAR\Sunday\Inject\LibDirInject;
use BEAR\Sunday\Inject\TmpDirInject;
use Ray\Di\ProviderInterface as Provide;
use Twig_Environment;
use Twig_Loader_Filesystem;
+use BEAR\Package\Provide\TemplateEngine\Twig\Extension\AuraForm_Twig_Extension;
/**
* Twig
@@ -33,11 +30,11 @@
$twig = new Twig_Environment($loader, [
'cache' => $this->tmpDir . '/twig/cache',
'debug' => true,
- 'autoescape' => false,
+ 'autoescape' => true,
]);
$twig->addExtension(new \Twig_Extension_Debug());
- $twig->addExtension(new Extension\AuraForm_Twig_Extension());
+ $twig->addExtension(new AuraForm_Twig_Extension());
$function = new \Twig_SimpleFunction(
'href',
TwigModule.phpを以下のように変更します。変更したTwigProvider.phpがバインドされるようにクラス名を調整します。
--- vendor/bear/package/src/Provide/TemplateEngine/Twig/TwigModule.php 2014-08-09 07:11:26.000000000 +0900
+++ src/Module/Provider/TwigModule.php 2014-08-09 14:29:22.000000000 +0900
@@ -1,10 +1,6 @@
<?php
-/**
- * This file is part of the BEAR.Package package
- *
- * @license http://opensource.org/licenses/bsd-license.php BSD
- */
-namespace BEAR\Package\Provide\TemplateEngine\Twig;
+
+namespace Kenjis\Contact\Module\Provider;
use Ray\Di\AbstractModule;
use Ray\Di\Scope;
@@ -18,7 +14,7 @@
{
$this
->bind('BEAR\Sunday\Extension\TemplateEngine\TemplateEngineAdapterInterface')
- ->to(__NAMESPACE__ . '\TwigAdapter')
+ ->to('BEAR\Package\Provide\TemplateEngine\Twig\TwigAdapter')
->in(Scope::SINGLETON);
$this
->bind('Twig_Environment')
最後に、src/Module/AppModule.phpに以下を追加して、作成したProvider\TwigModuleがインストールされるように設定します。
--- a/src/Module/AppModule.php
+++ b/src/Module/AppModule.php
@@ -33,6 +33,9 @@ class AppModule extends AbstractModule
{
$this->install(new StandardPackageModule('Kenjis\Contact', $this->context, dirname(dirname(__DIR__))));
+ // override twig module
+ $this->install(new Provider\TwigModule($this));
+
// override module
// $this->install(new SmartyModule($this));
これで、最初のStandardPackageModuleの中でインストールされたデフォルトのTwigの設定が、作成したProvider\TwigModuleでオーバーライドされます。設定をオーバライドするために、new Provider\TwigModule($this)
の$this
を忘れずに記載してください。
これでコンタクトフォームにHTMLタグを入力しても、表示では正しくエスケープされることを確認してみましょう。
文字化けの修正
実は、前回送信したメールの本文の日本語が文字化けしていました。
調査したところ、検証エラーのページでブラウザが文字エンコーディングを誤検知してShift_JISになっていました。
HTTPヘッダで文字エンコーディングが指定されていなかったので、
bootstrap/instance.phpでdefault_charset
を設定しておくことにします。
--- a/bootstrap/instance.php
+++ b/bootstrap/instance.php
@@ -10,6 +10,9 @@ namespace Kenjis\Contact;
use BEAR\Package\Bootstrap\Bootstrap;
+// set default charset
+ini_set('default_charset', 'UTF-8');
+
require_once __DIR__ . '/autoload.php';
$app = Bootstrap::getApp(
これで、HTTPヘッダにUTF-8が指定されるようになりました。
XSS脆弱性とメールの文字化けが解消しましたので、CSRF対策はまだですが、今日はここまでにします。
BEAR.Sundayでコンタクトフォームを作ってみる④へ続く。
過去記事
- BEAR.Sundayでコンタクトフォームを作ってみる① BEAR.SundayのインストールとSwiftMailerによるメール送信
- BEAR.Sundayでコンタクトフォームを作ってみる② フォームの作成
- BEAR.Sundayでコンタクトフォームを作ってみる③ Twigのautoescapeと文字化けの修正 ←今ここ
関連
Date: 2014/08/13