BEAR.Sundayでの「Hello World!」②
前回の「Hello World!」の続きです。
今回はテンプレートエンジンを使い、XSSを解消します。
Helloページリソースの変更
src/Resource/Page
フォルダにあるページリソースHello.php
を少し変更します。
src/Resource/Page/Hello.php
<?php
namespace My\Hello\Resource\Page;
use BEAR\Resource\ResourceObject;
class Hello extends ResourceObject
{
public function onGet($name = 'World')
{
$this['name'] = $name;
return $this;
}
}
$this['name']
に引数で渡された$name
を代入しています。
テンプレートの作成
デフォルトのテンプレートエンジンはTwigです。
Helloページリソースに対応する、テンプレートファイルHello.twigを同じsrc/Resource/Page
フォルダに作成します。
src/Resource/Page/Hello.twig
{% autoescape %}
<!DOCTYPE html>
<html lang="ja">
<head>
</head>
<body>
<div class="container">
<h1>Hello {{ name }}!</h1>
</div>
</body>
</html>
{% endautoescape %}
ページリソースで$this['name']
に代入したものがname
として使えます。
ビルトインWebサーバの起動
それでは、PHPのビルトインWebサーバを起動して、ブラウザからアクセスできるようにしましょう。
$ php -S 0.0.0.0:8000 -t var/www/ bootstrap/contexts/dev.php
ブラウザからのアクセス
http://localhost:8000/helloにアクセスしてみましょう。
Note: もし、何かエラーが出た場合は、Xdebugをoffにしてみましょう。
次は、http://localhost:8000/hello?name=BEARにアクセスしてみましょう。
クエリ文字列でnameにBEARを渡しましたので、表示が「Hello BEAR!」に変わりました。
次は、http://localhost:8000/hello?name=<s>BEAR</s>にアクセスしてみましょう。
TwigによりHTMLタグが無効化されています。
コマンドラインからのアクセス
BEAR.Sundayではコマンドラインからもページにアクセスできます。
$ php bootstrap/contexts/dev.php get /hello
200 OK
cache-control: ["no-cache"]
date: ["Sat, 21 Jun 2014 08:15:29 GMT"]
[BODY]
name World,
[VIEW]
<!DOCTYPE html>
<html lang="ja">
<head>
</head>
<body>
<div class="container">
<h1>Hello World!</h1>
</div>
</body>
</html>
[BODY]
にname
とその値World
が、そして[VIEW]
にHTMLでの表現が表示されています。
次に/hello?name=BEAR
をget
してみましょう。
$ php bootstrap/contexts/dev.php get /hello?name=BEAR
200 OK
cache-control: ["no-cache"]
date: ["Sat, 21 Jun 2014 08:16:57 GMT"]
[BODY]
name BEAR,
[VIEW]
<!DOCTYPE html>
<html lang="ja">
<head>
</head>
<body>
<div class="container">
<h1>Hello BEAR!</h1>
</div>
</body>
</html>
World
だったところがBEAR
に変わりました。
まとめ
Twigを使うことで簡単にXSSに対応することができました。
BEAR.SundayでもHello Worldは結構簡単でした。
関連
Date: 2014/06/21