W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
當你有非可信任的第三方來編輯模板時,比如說通過FTP編輯,安全機制可以幫助你通過 模板語言的限制,來減少可能對系統(tǒng)安全產(chǎn)生的危害。
安全機制可以通過Smarty_Security對象的屬性來進行設置。 這里是允許的設置:
$php_handling
明確定義了Smarty如何處理內(nèi)嵌到模板的PHP代碼: 可用值是:
Smarty::PHP_PASSTHRU -> 原樣顯示PHP代碼
Smarty::PHP_QUOTE -> 將PHP代碼轉換成HTML實體顯示
Smarty::PHP_REMOVE -> 刪除PHP代碼
Smarty::PHP_ALLOW -> 執(zhí)行PHP代碼
默認值是Smarty::PHP_PASSTHRU。
如果安全機制開啟,Smarty對象的$php_handling
設置將不會被檢查。
$secure_dir
是安全模板目錄的數(shù)組。 $template_dir
同樣也被看作安全的目錄。 默認這是空的數(shù)組。
$trusted_dir
是可信任目錄的數(shù)組。 信任目錄可以允許你存放PHP文件,這些PHP文件可以通過 {include_php}
包含到模板中, 并且直接運行。 默認這是空的數(shù)組。
$trusted_uri
是一個包含了匹配URL的正則表達式的數(shù)組,這些URL都被認為是可信的。 這個安全功能用于 {fetch}
和 {html_image}
。 在這些函數(shù)內(nèi)使用的URL,必須類似{$PROTOCOL}://{$HOSTNAME}
的格式, 并且可以使用一些簡單的正則表達式。 (不包括一些極端的例子如authentication-tokens)
正則表達式'#https?://.*smarty.net$#i'
將允許下面的URL:
http://smarty.net/foo
http://smarty.net/foo
http://www.smarty.net/foo
http://smarty.net/foo
https://foo.bar.www.smarty.net/foo/bla?blubb=1
但不允許以下的URL:
http://smarty.com/foo
(不匹配頂級域名"com")
ftp://www.smarty.net/foo
(不匹配協(xié)議"ftp")
http://www.smarty.net.otherdomain.com/foo
(不匹配域名"smarty.net")
$static_classes
是一個包含了可信的靜態(tài)類的數(shù)組。 默認是空數(shù)組,表示信任任何的靜態(tài)類。 設置不信任全部靜態(tài)類可以設置$static_classes = null。
$php_functions
是一個包含了可用的PHP函數(shù)的數(shù)組,這些函數(shù)可以在模板內(nèi)直接使用。 空數(shù)組 ( $php_functions = array() ) 表示全部PHP函數(shù)都是可用的。 設置全部函數(shù)不可用,需要設置$php_functions = null。 默認值是array('isset', 'empty', 'count', 'sizeof', 'in_array', 'is_array','time','nl2br')。
$php_modifiers
是一個包含了可用的PHP函數(shù)的數(shù)組,這些函數(shù)可以在模板內(nèi)當作修飾器來使用。 空數(shù)組 ( $php_functions = array() ) 表示全部PHP函數(shù)修飾器都是可用的。 設置全部函數(shù)修飾器不可用,需要設置$php_modifier = null。 默認值是array('escape','count')。
$streams
是一個包含了可用數(shù)據(jù)流的數(shù)組,這些數(shù)據(jù)流可以直接在模板內(nèi)使用。 空數(shù)組 ( $streams = array() ) 表示全部數(shù)據(jù)流都是可用的。 設置全部數(shù)據(jù)流不可用,需要設置$streams = null。 默認值是array('file')。
$allowed_modifiers
是一個包含了可用的(注冊的/自動加載的)修飾器數(shù)組。 如果非空,則只有列表上的修飾器才能使用。這是一個白名單。
$disabled_modifiers
是一個包含了不可用的(注冊的/自動加載的)修飾器數(shù)組。
$allowed_tags
是一個控制哪些區(qū)塊標簽、函數(shù)和過濾器能夠在模板內(nèi)使用的數(shù)組。 如果非空,則只有列表上的標簽才能使用。這是一個白名單。
$disabled_tags
是一個包含了不可用的區(qū)塊標簽、函數(shù)和過濾器的數(shù)組。
$allow_constants
布爾值,代表了是否允許在模板內(nèi)使用常量。 默認是true。
$allow_super_globals
布爾值,代表了是否允許在模板內(nèi)使用PHP的全局變量。 默認是true。
$allow_php_tag
布爾值,代表了是否允許在模板內(nèi)使用{php} 和 {include_php}標簽。 默認是false。
如果安全機制開啟,私有的成員方法、靜態(tài)類/對象的私有函數(shù)或者私有屬性都不能在模板內(nèi)使用。
自定義你自己的安全策略,可以擴展繼承Smarty_Security類或者是建立它的實例。
Example 17.1. 擴展Smarty_Security 類來設置安全策略
<?php require 'Smarty.class.php'; class My_Security_Policy extends Smarty_Security { // 關閉全部PHP函數(shù) public $php_functions = null; // 刪除PHP標簽 public $php_handling = Smarty::PHP_REMOVE; // 允許任何函數(shù)成為修飾器 public $modifiers = array(); } $smarty = new Smarty(); // 開啟自定義安全機制 $smarty->enableSecurity('My_Security_Policy'); ?>
Example 17.2. 通過Smarty_Security類的實例來自定義安全策略
<?php require 'Smarty.class.php'; $smarty = new Smarty(); $my_security_policy = new Smarty_Security($smarty); // 關閉全部PHP函數(shù) $my_security_policy->php_functions = null; // 刪除PHP標簽 $my_security_policy->php_handling = Smarty::PHP_REMOVE; // 允許任何函數(shù)成為修飾器 $my_security_policy->$modifiers = array(); // 開啟自定義安全機制 $smarty->enableSecurity($my_security_policy); ?>
Example 17.3. 開啟默認的安全設置
<?php require 'Smarty.class.php'; $smarty = new Smarty(); // 開啟默認安全設置 $smarty->enableSecurity(); ?>
安全機制只會在模板編譯時進行檢查。 所以當你修改了安全設置后,必須刪除全部緩存和編譯文件并重新編譯。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: