Class yii\filters\HostControl

继承yii\filters\HostControl » yii\base\ActionFilter » yii\base\Behavior » yii\base\BaseObject
实现yii\base\Configurable
可用自版本2.0.11
源代码 https://github.com/yiisoft/yii2/blob/master/framework/filters/HostControl.php

HostControl 提供对请求的主机名的简单控制.

此过滤器提供针对 'host header' attacks 的保护, 仅允许对指定的主机名执行动作.

应用程序配置示例:

return [
    'as hostControl' => [
        'class' => 'yii\filters\HostControl',
        'allowedHosts' => [
            'example.com',
            '*.example.com',
        ],
    ],
    // ...
];

控制器配置示例:

use yii\web\Controller;
use yii\filters\HostControl;

class SiteController extends Controller
{
    public function behaviors()
    {
        return [
            'hostControl' => [
                'class' => HostControl::className(),
                'allowedHosts' => [
                    'example.com',
                    '*.example.com',
                ],
            ],
        ];
    }

    // ...
}

Note: 限制允许的主机名的最好方法是使用 Web 服务器的'virtual hosts'(虚拟主机)配置. 仅当此配置不可用或不安全时, 才应使用此过滤器.

公共属性

隐藏继承的属性

属性类型描述定义在
$allowedHosts array|Closure|null 允许的主机名列表. yii\filters\HostControl
$denyCallback callable 如果主机不匹配 $allowedHosts时将调用的回调. yii\filters\HostControl
$except array 此过滤器不适用的动作ID列表, 列表中的动作将不被过滤. yii\base\ActionFilter
$fallbackHostInfo string|null Request::$hostInfo 无效时使用的后备主机信息(eg. yii\filters\HostControl
$only array 此过滤器应适用的动作ID列表, 仅列表中的动作被过滤. yii\base\ActionFilter
$owner yii\base\Component|null 该行为的所有者. yii\base\Behavior

公共方法

隐藏继承的方法

方法描述定义在
__call() 调用不是类方法的已命名方法. yii\base\BaseObject
__construct() 构造函数. yii\base\BaseObject
__get() 返回对象属性的值. yii\base\BaseObject
__isset() 检查属性是否已设置, 即已定义且不为null. yii\base\BaseObject
__set() 设置对象属性的值. yii\base\BaseObject
__unset() 将对象属性设置为null. yii\base\BaseObject
afterAction() 执行动作后立即调用此方法. yii\base\ActionFilter
afterFilter() yii\base\ActionFilter
attach() 将行为对象附加到组件. yii\base\ActionFilter
beforeAction() 在执行动作之前(在所有可能的过滤器之后)立即调用该方法. yii\filters\HostControl
beforeFilter() yii\base\ActionFilter
canGetProperty() 返回一个值, 指示属性是否可读. yii\base\BaseObject
canSetProperty() 返回一个值, 指示属性是否可写. yii\base\BaseObject
className() 返回此类的完全限定名称. yii\base\BaseObject
detach() 从组件中分离行为对象. yii\base\ActionFilter
events() 声明 所有者 事件的事件处理程序. yii\base\Behavior
hasMethod() 返回一个值, 指示方法是否已定义. yii\base\BaseObject
hasProperty() 返回一个值, 指示属性是否已定义. yii\base\BaseObject
init() 初始化对象. yii\base\BaseObject

受保护的方法

隐藏继承的方法

方法描述定义在
denyAccess() 拒绝访问. yii\filters\HostControl
getActionId() 通过将 yii\base\Action::$uniqueId 转换为相对于模块的ID来返回动作ID. yii\base\ActionFilter
isActive() 返回一个值, 指示过滤器对于给定动作是否处于活动状态. yii\base\ActionFilter

属性详情

$allowedHosts public 属性

允许的主机名列表.

可以将每个主机指定为通配符模式. 例如:

[
    'example.com',
    '*.example.com',
]

可以将该字段指定为以下签名的 PHP 回调:

function (\yii\base\Action $action) {
    //return array of strings
}

其中$action是当前 动作 对象.

如果此字段未设置 - 将不执行主机名检查.

$denyCallback public 属性

如果主机不匹配 $allowedHosts时将调用的回调.

如果未设置, 将调用 denyAccess().

回调的签名应如下所示:

function (\yii\base\Action $action)

其中$action是当前 动作 对象.

Note: 在实现自己的主机拒绝处理时, 请确保避免使用当前请求的主机名, 创建绝对 URL 链接, 缓存页面部分等.

public callable $denyCallback null
$fallbackHostInfo public 属性

Request::$hostInfo 无效时使用的后备主机信息(eg. http://www.yiiframework.com).

在调用 $denyCallback 之前, 该值将替换 Request::$hostInfo, 以确保不会使用无效的主机进行进一步处理. 你可以将其设置为null, 以使 Request::$hostInfo 保持不变. 默认值为空字符串(这将导致创建相对 URL 而不是绝对 URL).

参见 yii\web\Request::getHostInfo().

方法详情

beforeAction() public 方法

在执行动作之前(在所有可能的过滤器之后)立即调用该方法.

你可以重写此方法, 以便为该动作做最后的准备.

public boolean beforeAction ( $action )
$action yii\base\Action

要执行的动作.

return boolean

该动作是否应该继续执行.

denyAccess() protected 方法

拒绝访问.

默认实现将立即显示 404 页面, 从而终止程序执行. 你可以重写此方法, 创建你自己的拒绝访问处理程序. 这样做时, 请确保避免使用当前请求的主机名, 创建绝对URL链接, 缓存页面部分等.

protected void denyAccess ( $action )
$action yii\base\Action

要执行的动作.

throws yii\web\NotFoundHttpException