Smarty Template Engine 37.díl - Nastavení IV.

Napsal (») 6. 9. 2009 v kategorii PHP/HTML, přečteno: 1691×
obrazky/smarty.gif

Smarty Template Engine 37.díl - Nastavení IV.


V tomto díle budeme pokračovat v ukázce nastavení Smarty, především v bezpečnostních direktivách.

Nastavení bezpečnosti


Následující proměnné nastavují bezpečnostní chování šablon proti vložení PHP kódu. Poněvadž šablony jsou při změně svého obsahu v templates opětovně načítány a rekompilovány do PHP kódu, hrozí jejich zneužití třetí stranou, ale např. i samotnými kodéry. Poněvadž je minimálně během vývoje projektu bezpodmínečně nutné nastavit práva složky pro zápis kompilovaných šablon na práva pro zápis i skriptu (775), během vývoje projektu není ošetřena případná chyba v nastavení serveru, skriptů, či úniku FTP informací přes různé Ftp programy, které s radostí dolují uložená hesla z klientů a následně vkládají do skriptů svůj vlastní, škodlivý kód. Menším řešením je po zprovoznění našeho projektu jednoduchý zákaz zápisu do složek se zkompilovanými šablonami.

Jako další nástroj nám však samotné Smarty nabízí ve svých vnitřních proměnných nastavení některých základních bezpečnostních prvků, především ošetření vkládání PHP skriptů do samotných šablon, či konkrétních adresářů.

php_handling
Nastavuje chování šablon pro PHP kód v šablonách. Neplatí ovšem pro kód, jež je uzavřen ve speciálních tazích '{php}...{/php}' (závisí dle nastavení direktivy 'secure'). Pro tuto direktivu existují čtyři možná nastavení.


  • SMARTY_PHP_PASSTHRU - vytiskne PHP jako plain text

  • SMARTY_PHP_QUOTE - zaapostrofování PHP tagů na html entity

  • SMARTY_PHP_REMOVE - smazání php tagů ze šablony

  • SMARTY_PHP_ALLOW - smarty provede php příkazy



security
Tato direktiva je pro nastavení bezpečnosti zcela zásadní. Jde o globální nastavení některých Smarty funkcí, v čele s tagy '{php}...{/php}'. Hodí se právě do situací, kdy ještě stále pracujeme na projektu s více kodéry a nechceme riskovat průnik nežádoucího kódu přes šablony. Následující možnosti nastavení mohou být přepsány specifičtější direktivou 'security_settings'.
Defaultně je tato direktiva nastavena na FALSE. Pro použití je jí tedy třeba zapnout nastavením na hodnotu TRUE.

V případě povolení pak tedy platí:

  • Pokud je direktiva 'php_handling' nastavena na hodnotu SMARTY_PHP_ALLOW, je tout nadřazenou direktivou změněna na hodnotu SMARTY_PHP_PASSTHRU

  • Nejsou povoleny PHP funkce uvnitř příkazu '{if}', pokud není jinak nastaveno pomocí 'security_settings'

  • Includování šablon může být prováděno pouze z adresářů, jež jsou povoleny ve výpisu direktivou 'security_dir'.

  • Lokální soubory z webového prostoru mohou být nahrány do šablony pouze z adresářů, jež jsou povoleny direktivou 'security_settings'.

  • Smarty tagy '{php}..{/php}' nejsou akceptovány

  • Nejsou povoleny modifikátory jako PHP funkce, pokud nejsou specifikovány direktivou 'security_settings'.



hlavicka.php
<?php
$smarty->security = 'false';
?>


secure_dir
Specifikuje pole adresářů, z kterých je v šablonách možno načítat data Smarty příkazy: 'include', 'fetch' v případě, že direktiva 'security' je nastavena na TRUE.

hlavicka.php
<?php
$smarty->security = 'true';
$secure_dirs[] = './allowed/source';
$secure_dirs[] = './includes/';
$smarty->secure_dir = $secure_dirs;
?>


security_settings
Slouží k přepsání, zkonkrétnění restrikcí, při zapnutí direktivy 'security'. Je možno nastavovat následujícím způsobem.


  • PHP_HANDLING – nastavuje se jako TRUE/FALSE. V případě nastavení na TRUE nebude toto zabezpečení vyžadováno, defaultně: 'false'

  • IF_FUNCS – výčet PHP funkcí, jež mohou být použity uvnitř Smarty příkazu '{if}', defaultně: ''

  • INCLUDE_ANY – nastavuje se jako TRUE/FALSE. V případě nastavení na TRUE bude povoleno includování z adresářů, specifikovaných direktivou 'secure_dir', defaultně: 'false'

  • PHP_TAGS – nastavuje se jako TRUE/FALSE. V případě nastavení na TRUE povolíme používání Smarty tagu '{php}...{/php}' v šablonách, defaultně: 'false'

  • MODIFIER_FUNCS – pole PHP funkcí, jež mohou být použity jako modifikátory v šablonách, defaultně: ''

  • ALLOW_CONSTANTS – nastavuje se jako TRUE/FALSE. V případě nastavení na TRUE povolíme používání smarty konstant ve tvaru '$smarty.typ.nazev' v šablonách, defaultně: 'false'



Hromadné nastavení se provede např. následujícím způsobem:
hlavicka.php
$smarty->security = true;
$smarty->security_settings = array(
'PHP_HANDLING' => false,
'IF_FUNCS' => array('array', 'list',
'isset', 'empty',
'count', 'sizeof',
'in_array', 'is_array',
'true', 'false', 'null'),
'INCLUDE_ANY' => false,
'PHP_TAGS' => true,
'MODIFIER_FUNCS' => array('count'),
'ALLOW_CONSTANTS' => false
);

Můžete si prohlédnout povolené funkce v parametru IF_FUNCE a také, že jsou povoleny PHP_TAGS.

V případě, že bychom chtěli nastavit např. pouze jeden parametr, můžeme postupovat také např. takto (povolení PHP tagu):
hlavicka.php
$smarty->security = true;
$smarty->security_settings['PHP_TAGS'] = true;


trusted_dir
Používá se opět pouze v případě, že povolíme direktivu 'security'. V takovém případě nastavujeme v této proměnné výčet (array) adresářů, z nichž můžeme povolit spuštění/naincludování PHP skriptů Smarty příkazem 'include_php'.

hlavicka.php
<?php
$smarty->security = 'true';
$secure_dirs[] = './allowed/source';
$secure_dirs[] = './includes/';
$smarty->trusted_dir = $secure_dirs;
?>
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
Článek ještě nebyl okomentován.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel devět a nula