当前位置: 首页 > 文档资料 > FuelPHP 中文文档 >

Security - 类別

优质
小牛编辑
116浏览
2023-12-01

Security 类别能让你在你的应用程序得到 CSRF 保护。

配置

Security 类别透过 app/config/config.php 配置档案的 security 段落来配置。

以下安全配置设定可以被定义:

参数类型预设描述
token_salt字串
'put your salt value here...'
用来产生安全符记的盐。请确保这包含一些随机的东西,以确保你的符记是不可预测的。
csrf_token_key字串
'fuel_csrf_token'
用于 CSRF 符记 cookie 的名称,以及包含符记的表单栏位的名称。
csrf_expiration整数
0
CSRF 符记 cookie 的过期时间。预设 cookie 会在浏览器 session 结束时过期。
uri_filter阵列
array('htmlentities')
用来过滤 URI 的可呼叫项目的阵列(PHP 函式、物件方法、类别方法)。预设情况下,它使用 PHP 的 htmlentities 内部函式。
input_filter阵列
array()
用来过滤 $_GET、$_POST 和 $_COOKIE 的可呼叫项目的阵列(PHP 函式、物件方法、类别方法)。预设情况下,没有输入过滤器被定义。
output_filter阵列
array('Security::htmlentities')
用来过滤传送给检视或表现控件的变数的可呼叫项目的阵列(PHP 函式、物件方法、类别方法)。 为了安全起见,你需要定义一个输出过滤器。
htmlentities_flags整数
null
被用来在编码 HTML 实体的标誌。预设是 ENT_QUOTES 如果没定义的话。
htmlentities_double_encode布林
null
已经编码过的实体是否应该再被编码一次。预设是 false 如果没定义。
auto_filter_output布林
true
当为 true,所有传递给检视物件的变数会自动被编码。
whitelisted_classes阵列
array('stdClass', 'Fuel\\Core\\View',
'Fuel\\Core\\Presenter', 'Closure')
当检视变数的自动编码启用,当传递物件到检视时,你会遇到问题。 定义在此阵列的类别将免除自动编码。
csrf_autoload布林
true
当为 true 时,自动使用 check_token() 载入并检查 CSRF 符记。
csrf_autoload_methods阵列
array('post', 'put', 'delete')
当 csrf_autoload 为 true,CSRF 符记将被用来验证阵列中的所有 HTTP 方法。

请注意,如果你启用 "csrf_autoload",你所有的 HTTP 指定类型的请求必须包含一个 CSRF 符记,否则验证将失败,并抛出一个 SecurityException。

如果你需要处理 CSRF 验证失败在自动载入启用时,你可以在你的 index.php 捕捉 SecurityException。

check_token($value = null)

check_token 方法能让你检查 CSRF 符记。
检查符记也确保符记存在,而且当它接收到下一个要被检查的 session 值, 它将重置符记(无论检查的结果)。

静态
参数
参数预设描述
$value
null
要被检查的 CSRF 符记,当没给时检查来自 POST 或 JSON 输入的值。
回传布林
範例
Security::check_token();

fetch_token()

fetch_token 方法能让你从 cookie 取回 CSRF 符记。

静态
参数
回传字串
範例
$csrf_token = Security::fetch_token();

js_fetch_token()

js_fetch_token 方法能让你产生 JavaScript fuel_csrf_token() 函式,当呼叫时,它将回传目前的 CSRF 符记。用在表单提交 AJAX 操作时填充对的栏位。

静态
参数
回传字串
範例
// 输出 javascript 函式
echo Security::js_fetch_token();

// 你现在可以在你的页面上使用产生的 javascript 程式码 函式
<script type="text/javascript">
	var current_token = fuel_csrf_token();
</script>

js_set_token()

js_set_token 方法能让你产生 JavaScript fuel_set_csrf_token() 函式,当呼叫时,它将设定目前表单的 CSRF 符记栏位。 在一个表单的 onsubmit 使用, 用目前 CSRF cookie 的值来更新表单内的隐藏符记栏位。 你必须使用它在你希望允许多个视窗开启时, 并使用一个严格的旋转及 CSRF 符记的终结。

静态
参数
回传字串
範例
// 输出 javascript 函式
echo Security::js_set_token();

// 你使用产生的函式做为 onsubmit 函式,像这样。
// 不要忘记 'this' 参数,如此该函式知道要更新哪张表单!
<form onsubmit="fuel_set_csrf_token(this);">
	<!-- 在这里做你的东西 -->
</form>

generate_token()

generate_token 方法能让你产生一个安全符记。 此方法是用来产生 CSRF 符记,但可用在你应用程序里, 任何需要安全随机符记的地方。

静态
参数
回传字串
範例
$token = Security::generate_token();

clean($value, $filters = null)

clean 方法能让你使用提供的过滤器来净化资料。

静态
参数
参数预设描述
$value必要要被净化的值。这可以是一个字串值,或一个字串值的阵列。
$filters
null
要被用来净化字串的过滤器。过滤器可以是单一值,或一个值的阵列。每个值必须是有效的 PHP 回呼(callback)。 你可能指定函式 ('htmlentities')、物件 ($this)、或静态方法 ('Classname::method')。
回传字串
範例
// 首先剥离标籤,在剩余的资料中转换 HTML 实体,并且使用我们的特别净化解决方案完成它
$filters = array('strip_tags', 'htmlentities', '\\cleaners\\soap::clean');
$text = Security::clean($text, $filters);

strip_tags($value)

strip_tags 方法能让你从一个字串剥离 HTML 和 PHP 标籤。

静态
参数
参数预设描述
$value必要输入的字串。
回传字串
範例
$text = '<p>Test paragraph.</p>';
$text = Security::strip_tags($text);

xss_clean($value, array $options = array())

xss_clean 方法能让你从一个字串剥离危险的 HTML 标籤,使用 HTMLawed 函式库。

静态
参数
参数预设描述
$value必要输入的字串。
$options
array()
给 htmLawed 的选择性配置阵列,如果你需要自订净化规则。
回传字串
範例
$text = '<SCRIPT>alert("XSS attack!")</SCRIPT>';
$text = Security::xss_clean($text);

htmlentities($value, $flags = null, $encoding = null, $double_encode = null)

htmlentities 方法能让你转化 HTML 字元为他们相等的实体。此方法与 PHP 的 htmlentities() 函式操作一致, 但也支援阵列及物件。

静态
参数
参数预设描述
$value必要输入的值。
$flags
null
要传递给 htmlentities() 的标誌。如果没给也没配置,它将预设是 ENT_QUOTES。
$encoding
null
用于传递值的编码。如果没给它预设将使用 FuelPHP 的预设编码。
$double_encoding
null
如果为 true,已经编码的值将不会再次被编码。如果没给或没配置,它将预设是 false
回传混合
抛出RuntimeException,在物件已经被传递且不能被转换为字串的情况下。
範例
$text = '<p>Test paragraph.</p>';
$text = Security::htmlentities($text);

程序助手