Smarty Security Policy
Smarty Security Policies are security hardening measures that protect a system. WHMCS applies a Smarty Security Policy for system-wide use and a mail policy for stored and dynamic email-based templates.
Policies
WHMCS includes security policies for the system and for mail.
- The system policy does not restrict PHP beyond the version-specific behaviors in the sections below.
- The mail policy restricts the use of variable modifiers in email-based templates.
- The policy will not allow any calls to static classes, fetching any data from PHP streams, or accessing any super global variables.
- The mail policy allows the
escape
,count
,urlencode
,ucfirst
, anddate_format
variable modifiers by default. - The mail policy restricts the use of native PHP functions to the
isset
,empty
,count
,sizeof
,in_array
,is_array
,time
, andnl2br
functions by default. - The mail policy blocks the
block
,function
, andinclude
Smarty tags by default.
Smarty PHP Tags
In WHMCS 9.0, we plan to remove all backwards compatibility for legacy Smarty {php}
, {include_php}
, and {insert}
tags.
Supported Policy Settings and Values
The settings that a WHMCS Smarty Security Policy enforces are the same as the settings that the Smarty library itself defines.
WHMCS doesn’t honor Smarty’s disabled_special_smarty_vars
parameter. Instead, policies should use the enabled_special_smarty_vars
parameter. For example:
// Smarty enable special variables policy:
$smarty_security_policy = [
'system' => [
'enabled_special_smarty_vars' => [
'cookies',
],
],
];
The enabled_special_smarty_vars
value must be an array using Smarty’s options. The WHMCS system policy enables the following values for compatibility with older templates, but your current or future WHMCS templates may not require them:
'foreach',
'section',
'block',
'capture',
'now',
'get',
'post',
'server',
'request',
'template',
'const',
Defining your own Smarty security policy requires you to include all of the variables that client and admin templates use, including the ones that WHMCS otherwise enables by default (above).
Last modified: 2025 March 18