Class yii\filters\HostControl
HostControl 提供对请求的主机名的简单控制。
此筛选器提供针对 ['host header' 攻击] 的保护(https://www.acunetix.com/vulnerabilities/web/host-header-attack), 仅允许对指定的主机名执行操作。
应用程序配置示例:
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 服务器的 “虚拟主机” 配置。 仅当此配置不可用或不安全时才应使用此筛选器。
公共属性
属性 | 类型 | 描述 | 被定义在 |
---|---|---|---|
$allowedHosts | array|Closure|null | 主机名列表,哪些是允许的。
每个主机都可以指定为通配符模式。例如:
` php
[
'example. |
yii\filters\HostControl |
$denyCallback | callable | 如果当前主机与 $allowedHosts 不匹配将调用的回调。
如果未设置,将调用denyAccess()。
回调的签名应如下:
` php
function (\yii\base\Action $action)
`
其中 $action 是当前 action 对象。
> Note: 在实现自己的主机拒绝处理时, 确保避免使用当前请求的
主机名, 创建绝对 URL 链接、缓存页面部件等。 |
yii\filters\HostControl |
$except | array | List of action IDs that this filter should not apply to. | yii\base\ActionFilter |
$fallbackHostInfo | string|null | 回退主机信息 (例如。`http://www. | yii\filters\HostControl |
$only | array | List of action IDs that this filter should apply to. | yii\base\ActionFilter |
$owner | yii\base\Component|null | The owner of this behavior | yii\base\Behavior |
公共方法
方法 | 描述 | 被定义在 |
---|---|---|
__call() | Calls the named method which is not a class method. | yii\base\BaseObject |
__construct() | Constructor. | yii\base\BaseObject |
__get() | Returns the value of an object property. | yii\base\BaseObject |
__isset() | Checks if a property is set, i.e. defined and not null. | yii\base\BaseObject |
__set() | Sets value of an object property. | yii\base\BaseObject |
__unset() | Sets an object property to null. | yii\base\BaseObject |
afterAction() | 执行动作后立即调用此方法。 您可以覆盖此方法以对操作执行一些后处理。 | yii\base\ActionFilter |
afterFilter() | yii\base\ActionFilter | |
attach() | Attaches the behavior object to the component. | yii\base\Behavior |
beforeAction() | This method is invoked right before an action is to be executed (after all possible filters.) You may override this method to do last-minute preparation for the action. | yii\filters\HostControl |
beforeFilter() | yii\base\ActionFilter | |
canGetProperty() | Returns a value indicating whether a property can be read. | yii\base\BaseObject |
canSetProperty() | Returns a value indicating whether a property can be set. | yii\base\BaseObject |
className() | Returns the fully qualified name of this class. | yii\base\BaseObject |
detach() | Detaches the behavior object from the component. | yii\base\Behavior |
events() | Declares event handlers for the $owner's events. | yii\base\Behavior |
hasMethod() | Returns a value indicating whether a method is defined. | yii\base\BaseObject |
hasProperty() | Returns a value indicating whether a property is defined. | yii\base\BaseObject |
init() | Initializes the object. | yii\base\BaseObject |
受保护的方法
方法 | 描述 | 被定义在 |
---|---|---|
denyAccess() | 拒绝访问。 默认实现将立即显示 404 页,正在终止程序执行。 您可以重写此方法,创建自己的拒绝访问处理程序。在执行此操作时,请确保 避免使用当前请求的主机名,创建绝对 URL 链接,缓存页面部件等。 | yii\filters\HostControl |
getActionId() | 通过将 yii\base\Action::$uniqueId 转换为相对于模块的 ID 来返回动作 ID。 | yii\base\ActionFilter |
isActive() | 返回一个值,该值指示过滤器对于给定操作是否处于活动状态。 | yii\base\ActionFilter |
属性详情
主机名列表,哪些是允许的。 每个主机都可以指定为通配符模式。例如:
[
'example.com',
'*.example.com',
]
此字段可指定为以下签名的 PHP 回调:
function (\yii\base\Action $action) {
//return array of strings
}
其中 $action
是当前 action 对象。
如果未设置此字段 - 将不执行任何主机名检查。
如果当前主机与 $allowedHosts 不匹配将调用的回调。 如果未设置,将调用denyAccess()。
回调的签名应如下:
function (\yii\base\Action $action)
其中 $action
是当前 action 对象。
Note: 在实现自己的主机拒绝处理时, 确保避免使用当前请求的 主机名, 创建绝对 URL 链接、缓存页面部件等。
回退主机信息 (例如。http://www.yiiframework.com
) 使用 Request::$hostInfo 时无效。
在调用 $denyCallback 之前,此值将替换 Request::$hostInfo
以确保不会使用无效的主机进行进一步处理。您可以将其设置为 null
使 Request::$hostInfo 保持不变。
默认值为空字符串(这将导致创建相对 URL 而不是绝对 URL )。
方法详情
This method is invoked right before an action is to be executed (after all possible filters.) You may override this method to do last-minute preparation for the action.
public boolean beforeAction($action) | ||
$action | yii\base\Action | 要执行的动作。 |
return | boolean | 该动作是否应继续执行。 |
---|
拒绝访问。 默认实现将立即显示 404 页,正在终止程序执行。 您可以重写此方法,创建自己的拒绝访问处理程序。在执行此操作时,请确保 避免使用当前请求的主机名,创建绝对 URL 链接,缓存页面部件等。
protected void denyAccess($action) | ||
$action | yii\base\Action | 要执行的操作。 |
throws | yii\web\NotFoundHttpException |
---|