ウェブ、ショウジン

Smartyのカスタム設定でセキュリティと利便性を向上させる

2009-1-10
Category
PHP

Smartyテンプレートファイルに直接アクセスされるのを防ぐために、Smartyクラスの継承を利用して、以下のようにカスタムのclassファイルを作成し、templatesやtemplates_c、cache、configsディレクトリの位置も変更する。

デフォルトで全ての変数(Smartyテンプレート内の)にescape処理をかける設定もする。

Smartyのデリミタを{{}}に変更して、テンプレート内でJavaScriptのfunction構文等が入った時にも大丈夫なようにする。

CSSや画像(img)データへのリンクパスがSmartyのテンプレートファイルからは「特殊」なことになるので注意。(templates内にある***.tplから同ディレクトリにあるつもりで普通にCSSやimgデータにリンクを張っても通じない)

ファイルやディレクトリを以下の構成に変更

├ htdocs
│   └ php_10days // PHPスクリプトを置く場所
├ libs
│   ├ MySmarty.class.php
│   └ Smarty.class.php
│
├ templates
├ templates_c // Webサーバの書き込み権限を与えておく
├ configs
└ cache // Webサーバの書き込み権限を与えておく

/libs/MySmarty.class.php

<?php
// ルートディレクトリを変数ROOT_DIRにセットする
define("ROOT_DIR", $_SERVER['DOCUMENT_ROOT']."/..");

// Smartyクラスを呼び出す
require_once("Smarty.class.php");

// Smartyクラスを継承したMySmartyクラスを作成する
class MySmarty extends Smarty {

	// コンストラクタ
	function MySmarty() {

		// Smartyで使用する四つのディレクトリのパスを上書き
		$this->template_dir = ROOT_DIR."/templates";
		$this->compile_dir = ROOT_DIR."/templates_c";
		$this->cache_dir = ROOT_DIR."/cache";
		$this->config_dir = ROOT_DIR."/configs";

		// 左右デリミタを上書き
		$this->left_delimiter = "{{";
		$this->right_delimiter = "}}";

		// デフォルトで全ての変数にescapeをかける設定
		$this->default_modifiers = array('escape');

		// Smartyクラスのコンストラクタの呼び出し
		$this->Smarty();
	}
}
?>

/htdocs/php_10days/smarty1.php(サンプルスクリプト)

<?php

// Smarty.classの呼び出し
require_once($_SERVER["DOCUMENT_ROOT"]."/../libs/MySmarty.class.php");

// 追加するHTMLフォーム
$scalar = "Hello Smarty!";
$sex["m"] = "men";
$sex["f"] = "women";

// 新しく作成したMySmartyインスタンスの生成
$smarty = new MySmarty();

// テンプレート変数の割り当て
$smarty->assign("scalar", $scalar);
$smarty->assign("sex", $sex);

// テンプレートを表示
$smarty->display("smarty1.tpl");

?>

/templates/smarty1.tpl

<html>
<head>
<title>Smarty実行サンプル</title>
</head>
<body>

{{$scalar}}<br />
{{$sex.m}}<br />
{{$sex.f}}<br />

</body>
</html>

Categories

Tag Cloud

AdMob Android Apache centos CodeIgniter EC-CUBE facebookアプリ facebookページ feed Firefox Flash google googleanalytics htaccess iPad iPhone JavaScript lamp mobile nginx ogp pear php plugin rollover rss sendmail setting smarty ssh Titanium Mobile Titanium Studio tutorial ubuntu vim VirtualBox vmware vps Windows WordPress xampp youtube さくらインターネット アクセス解析 カスタム投稿