yii2-过滤器检查安全请求和跨域访问设置

在 Yii 2 的 RESTful 服务中,GET URL /,响应404的解决(响应200) 魏熙视频,yii2.restful,curl连接后只有404。莫名其妙。 正在解决中,还没有办法。 参考以下网址: 1.https://www.yiichina.com/question/2589 好像没看清楚办法。因为我用的是phpstudy2020自己配置的。 2.https://www.shuijingwanwq.com/2017/08/29/1743/ 1、在 APM 监控中,... 阅读详情


过滤器

过滤器是 控制器 动作 执行之前或之后执行的对象。 例如访问控制过滤器可在动作执行之前来控制特殊终端用户是否有权限执行动作, 内容压缩过滤器可在动作执行之后发给终端用户之前压缩响应内容。

过滤器可包含 预过滤(过滤逻辑在动作之前) 或 后过滤(过滤逻辑在动作之后),也可同时包含两者。

使用过滤器

过滤器本质上是一类特殊的 行为,所以使用过滤器和 使用 行为一样。 可以在控制器类中覆盖它的 yii\base\Controller::behaviors() 方法来申明过滤器,如下所示:

public function behaviors()
{
    return [
        [
            'class' => 'yii\filters\HttpCache',
            'only' => ['index', 'view'],
            'lastModified' => function ($action, $params) {
                $q = new \yii\db\Query();
                return $q->from('user')->max('updated_at');
            },
        ],
    ];
}

控制器类的过滤器默认应用到该类的 所有 动作,你可以配置yii\base\ActionFilter::only属性明确指定控制器应用到哪些动作。 在上述例子中,HttpCache 过滤器只应用到index和view动作。 也可以配置yii\base\ActionFilter::except属性使一些动作不执行过滤器。

除了控制器外,可在 模块或应用主体 中申明过滤器。 申明之后,过滤器会应用到所属该模块或应用主体的 所有 控制器动作, 除非像上述一样配置过滤器的 yii\base\ActionFilter::only 和 yii\base\ActionFilter::except 属性。

补充: 在模块或应用主体中申明过滤器,在yii\base\ActionFilter::only 和 yii\base\ActionFilter::except 属性中使用路由 代替动作ID, 因为在模块或应用主体中只用动作ID并不能唯一指定到具体动作。.

当一个动作有多个过滤器时,根据以下规则先后执行:

  • 预过滤
    • 按顺序执行应用主体中behaviors()列出的过滤器。
    • 按顺序执行模块中behaviors()列出的过滤器。
    • 按顺序执行控制器中behaviors()列出的过滤器。
    • 如果任意过滤器终止动作执行,后面的过滤器(包括预过滤和后过滤)不再执行。
  • 成功通过预过滤后执行动作。
  • 后过滤
    • 倒序执行控制器中behaviors()列出的过滤器。
    • 倒序执行模块中behaviors()列出的过滤器。
    • 倒序执行应用主体中behaviors()列出的过滤器。

创建过滤器

继承 yii\base\ActionFilter 类并覆盖 yii\base\ActionFilter::beforeAction() 和/或 yii\base\ActionFilter::afterAction() 方法来创建动作的过滤器,前者在动作执行之前执行,后者在动作执行之后执行。 yii\base\ActionFilter::beforeAction() 返回值决定动作是否应该执行, 如果为false,之后的过滤器和动作不会继续执行。

下面的例子申明一个记录动作执行时间日志的过滤器。

namespace app\components;

use Yii;
use yii\base\ActionFilter;

class ActionTimeFilter extends ActionFilter
{
    private $_startTime;

    public function beforeAction($action)
    {
        $this->_startTime = microtime(true);
        return parent::beforeAction($action);
    }

    public function afterAction($action, $result)
    {
        $time = microtime(true) - $this->_startTime;
        Yii::trace("Action '{$action->uniqueId}' spent $time second.");
        return parent::afterAction($action, $result);
    }
}

核心过滤器

Yii提供了一组常用过滤器,在yii\filters命名空间下,接下来我们简要介绍这些过滤器。

yii\filters\AccessControl

AccessControl提供基于yii\filters\AccessControl::rules规则的访问控制。 特别是在动作执行之前,访问控制会检测所有规则并找到第一个符合上下文的变量(比如用户IP地址、登录状态等等)的规则, 来决定允许还是拒绝请求动作的执行,如果没有规则符合,访问就会被拒绝。

如下示例表示表示允许已认证用户访问create 和 update 动作,拒绝其他用户访问这两个动作。

use yii\filters\AccessControl;

public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'only' => ['create', 'update'],
            'rules' => [
                // 允许认证用户
                [
                    'allow' => true,
                    'roles' => ['@'],
                ],
                // 默认禁止其他用户
            ],
        ],
    ];
}

更多关于访问控制的详情请参阅 授权 一节。

认证方法过滤器

认证方法过滤器通过HTTP Basic Auth或OAuth 2 来认证一个用户,认证方法过滤器类在 yii\filters\auth 命名空间下。

如下示例表示可使用yii\filters\auth\HttpBasicAuth来认证一个用户,它使用基于HTTP基础认证方法的令牌。 注意为了可运行,yii\web\User::identityClass 类必须 实现 yii\web\IdentityInterface::findIdentityByAccessToken()方法。

use yii\filters\auth\HttpBasicAuth;

public function behaviors()
{
    return [
        'basicAuth' => [
            'class' => HttpBasicAuth::className(),
        ],
    ];
}

认证方法过滤器通常在实现RESTful API中使用,更多关于访问控制的详情请参阅 RESTful 认证 一节。

yii\filters\ContentNegotiator

ContentNegotiator支持响应内容格式处理和语言处理。 通过检查 GET 参数和 Accept HTTP头部来决定响应内容格式和语言。

如下示例,配置ContentNegotiator支持JSON和XML响应格式和英语(美国)和德语。

use yii\filters\ContentNegotiator;
use yii\web\Response;

public function behaviors()
{
    return [
        [
            'class' => ContentNegotiator::className(),
            'formats' => [
                'application/json' => Response::FORMAT_JSON,
                'application/xml' => Response::FORMAT_XML,
            ],
            'languages' => [
                'en-US',
                'de',
            ],
        ],
    ];
}

在应用主体生命周期过程中检测响应格式和语言简单很多, 因此ContentNegotiator设计可被引导启动组件调用的过滤器。 如下例所示可以将它配置在应用主体配置。

use yii\filters\ContentNegotiator;
use yii\web\Response;

[
    'bootstrap' => [
        [
            'class' => ContentNegotiator::className(),
            'formats' => [
                'application/json' => Response::FORMAT_JSON,
                'application/xml' => Response::FORMAT_XML,
            ],
            'languages' => [
                'en-US',
                'de',
            ],
        ],
    ],
];

补充: 如果请求中没有检测到内容格式和语言,使用formats和languages第一个配置项。

yii\filters\HttpCache

HttpCache利用Last-Modified 和 Etag HTTP头实现客户端缓存。例如:

use yii\filters\HttpCache;

public function behaviors()
{
    return [
        [
            'class' => HttpCache::className(),
            'only' => ['index'],
            'lastModified' => function ($action, $params) {
                $q = new \yii\db\Query();
                return $q->from('user')->max('updated_at');
            },
        ],
    ];
}

更多关于使用HttpCache详情请参阅 HTTP 缓存 一节。

yii\filters\PageCache

PageCache实现服务器端整个页面的缓存。如下示例所示,PageCache应用在index动作, 缓存整个页面60秒或post表的记录数发生变化。它也会根据不同应用语言保存不同的页面版本。

use yii\filters\PageCache;
use yii\caching\DbDependency;

public function behaviors()
{
    return [
        'pageCache' => [
            'class' => PageCache::className(),
            'only' => ['index'],
            'duration' => 60,
            'dependency' => [
                'class' => DbDependency::className(),
                'sql' => 'SELECT COUNT(*) FROM post',
            ],
            'variations' => [
                \Yii::$app->language,
            ]
        ],
    ];
}

更多关于使用PageCache详情请参阅 页面缓存 一节。

yii\filters\RateLimiter

RateLimiter 根据 漏桶算法 来实现速率限制。 主要用在实现RESTful APIs,更多关于该过滤器详情请参阅 Rate Limiting 一节。

yii\filters\VerbFilter

VerbFilter检查请求动作的HTTP请求方式是否允许执行,如果不允许,会抛出HTTP 405异常。 如下示例,VerbFilter指定CRUD动作所允许的请求方式。

use yii\filters\VerbFilter;

public function behaviors()
{
    return [
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'index'  => ['get'],
                'view'   => ['get'],
                'create' => ['get', 'post'],
                'update' => ['get', 'put', 'post'],
                'delete' => ['post', 'delete'],
            ],
        ],
    ];
}

yii\filters\Cors

跨域资源共享 CORS 机制允许一个网页的许多资源(例如字体、JavaScript等) 这些资源可以通过其他域名访问获取。 特别是JavaScript's AJAX 调用可使用 XMLHttpRequest 机制,由于同源安全策略该跨域请求会被网页浏览器禁止. CORS定义浏览器和服务器交互时哪些跨域请求允许和禁止。

yii\filters\Cors 应在 授权 / 认证 过滤器之前定义,以保证CORS头部被发送。

use yii\filters\Cors;
use yii\helpers\ArrayHelper;

public function behaviors()
{
    return ArrayHelper::merge([
        [
            'class' => Cors::className(),
        ],
    ], parent::behaviors());
}

Cors 可转为使用 cors 属性。

  • cors['Origin']: 定义允许来源的数组,可为['*'] (任何用户) 或 ['http://www.myserver.net', 'http://www.myotherserver.com']. 默认为 ['*'].
  • cors['Access-Control-Request-Method']: 允许动作数组如 ['GET', 'OPTIONS', 'HEAD']. 默认为 ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'].
  • cors['Access-Control-Request-Headers']: 允许请求头部数组,可为 ['*'] 所有类型头部 或 ['X-Request-With'] 指定类型头部. 默认为 ['*'].
  • cors['Access-Control-Allow-Credentials']: 定义当前请求是否使用证书,可为 true, false 或 null (不设置). 默认为 null.
  • cors['Access-Control-Max-Age']: 定义请求的有效时间,默认为 86400.

例如,允许来源为 http://www.myserver.net 和方式为 GET, HEAD 和 OPTIONS 的CORS如下:

use yii\filters\Cors;
use yii\helpers\ArrayHelper;

public function behaviors()
{
    return ArrayHelper::merge([
        [
            'class' => Cors::className(),
            'cors' => [
                'Origin' => ['http://www.myserver.net'],
                'Access-Control-Request-Method' => ['GET', 'HEAD', 'OPTIONS'],
            ],
        ],
    ], parent::behaviors());
}

可以覆盖默认参数为每个动作调整CORS 头部。例如,为login动作增加Access-Control-Allow-Credentials参数如下所示:

use yii\filters\Cors;
use yii\helpers\ArrayHelper;

public function behaviors()
{
    return ArrayHelper::merge([
        [
            'class' => Cors::className(),
            'cors' => [
                'Origin' => ['http://www.myserver.net'],
                'Access-Control-Request-Method' => ['GET', 'HEAD', 'OPTIONS'],
            ],
            'actions' => [
                'login' => [
                    'Access-Control-Allow-Credentials' => true,
                ]
            ]
        ],
    ], parent::behaviors());
}



Yii2.0 前后端分离 前端ajax调用跨域的问题 Yii2.0有自己的一套防止跨域调用的机制,网上一搜一大把的解决方式,无非就是: use yii\filters\Cors; public function behaviors() { return ArrayHelper::merge([ [ 'class' => Cors::className(), 'cor... 阅读详情

相关推荐

yii2-user-agent:https

yii2-用户代理 https://github.com/donatj/PhpUserAgent composer.json " require " : { " xj/yii2-user-agent " : " ~1.0.0 " } 用法 //A var_dump (\xj\ua\ UserAgent :: model ()-> getAttributes ()); //B $ userAgent = \xj\ua\ UserAgent :: model (); /* @var \xj\ua\UserAgent $userAgent */ $ platform = $ userAgent -> platform ; $ browser = $ userAgent -> browser ; $ version = $ userAgent -> version ; $ uaAt

Yii2 做接口,跨域问题解决方案

PHP Yii2 接口跨域访问配置

Coder.Monkey的工作簿 1162

GEOPHYSICS 投稿避坑指南:从格式规范到双盲评审的实战解析

本文详细解析了GEOPHYSICS期刊投稿的全流程避坑指南,从格式规范、数据声明到双盲评审的实战策略。特别强调了数学公式排版、图表制作标准以及投稿系统的隐藏关卡,帮助作者避免常见错误,提升投稿成功率。

weixin_30606461的博客 236

yii2 处理跨域请求

最近在一个 yii2 的项目中遇到了跨域请求的问题,研究了好半天,按照官方文档各种写,各写改还是不生效,特此在这里记录一下。 在控制器中添加如下代码: public function behaviors() { return [ 'corsFilter'=>[ 'class' => Cors::cl...

Mr Qiang 5391

C#实现串口通讯程序

1、自动获取本地串口。2、根据传入串口基本属性参数打开串口。3、串口数据的发送接收功能(ASCII和HEX格式)。4、ASCII和HEX相互转换。csharp体验AI代码助手代码解读复制代码[Category("UserProperty")] [Description("轮廓半径")] public int Radius { get => radius;

2401_89221445的博客 1766

安时积分法和开路电压法结合估算锂电池SOC

基于安时积分法和开路电压法结合的锂电池SOC估计Simulink仿真建模,利用安时积分法计算放电过程中的SOC,在搁置状态利用开路电压法进行SOC修正。

qq_39304296的博客 2554

Yii2中限制访问某控制器的IP(IP白名单)

有关Yii2.0鉴权之访问控制过滤器参考这篇文章 http://www.yiiframework.com/doc-2.0/guide-security-authorization.html 这里主要说下怎么在控制器中限制访问的IP: use yii\web\Controller; use yii\filters\AccessControl; class SiteCont...

267

《童虎学习笔记》5分钟用Keepalived搭建MySQL高可用实现虚ip自动漂移

1

tonghu_note的博客 5618

Yii 2.0鉴权之访问控制过滤器:很不错的介绍

鉴权就是验证一个用户是否有足够权限去做一件事的过程。 Yii提供了两种鉴权方式:Access Control Filter (ACF,访问控制过滤器)和Role-Based Access Control (RBAC,基于角色的访问控制)。 访问控制过滤器(ACF) ACF是一种简单的鉴权方式,是用来做一些简单的访问控制的一种好方法。 顾名思义,ACF是作为一个行

黎志文 3402

论文学习:Towards Automated Infographic Design:Deep Learning-based Auto-generation of Extensible Timeline

title: “Towards Automated Infographic Design:Deep Learning-based Auto-generation of Extensible Timeline” tags: [“论文评述”, “报告”] date: 2019-08-22 author: 叶慧 mathjax: true 论文:Towards Automated Infograph...

xiaoyehahaha的博客 731

富斯遥控器-ros机器人控制

富斯遥控器-ros机器人手柄控制

zkh7758的博客 1700

Yii2.0 RESTful Web服务(3)

在创建资源类和指定资源格输出式化后,下一步就是创建控制器操作将资源通过RESTful APIs展现给终端用户。 Yii 提供两个控制器基类来简化创建RESTful 操作的工作:yii\rest\Controller 和 yii\rest\ActiveController, 两个类的差别是后者提供一系列将资源处理成ActiveRecord(关于ActiveRecord)的操作。 因此如果使

Alan Jager space 4479

手把手教你学Simulink——基于通信协议与标准的场景实例:卫星通信中的网络安全协议(IPSec)仿真

随着卫星通信在国防、金融、应急指挥、能源管网等关键领域的广泛应用,其安全性已成为系统设计的核心要求。然而,卫星链路具有广播特性、长距离传输、地面站分布广等特点,极易遭受窃听、篡改、重放、中间人攻击等网络威胁。传统的“信任链路层安全”已不足以应对现代网络攻击。为此,国际标准组织(如IETF、ETSI、CCSDS)推荐在卫星通信中部署协议,实现端到端的数据机密性、完整性、身份认证和抗重放保护。本文将手把手教你如何在中构建一个符合标准的仿真系统,涵盖从明文传输到加密隧道的完整安全链路建模。本文完整实现了。

MHD0815的博客 149

Yii框架中的权限控制如何控制用户访问权限

在Yii框架中,权限控制主要通过基于角色的访问控制(RBAC)来实现。RBAC是一种基于角色的访问控制机制,通过将用户和权限分别关联到角色,在角色授权过程中实现用户和权限之间的解耦,从而有效地管理用户访问权限。

sheji888的专栏 1044

零基础入门simulink仿真--通信领域的调制解调技术:基于Simulink的PM信号调制与解调仿真建模示例

PM的基本原理是将基带信号(如语音或音乐信号)加载到高频载波信号的相位上。通过改变载波的瞬时相位,可以实现信息的传输。PM的优点包括抗噪声能力强、频谱利用率较高等,但其解调过程相对复杂。通过Simulink,我们可以通过模块化的建模方式实现PM信号的调制和解调过程,并观察信号在信道中的传输效果。通过本指南,我们介绍了如何基于Simulink搭建一个完整的PM信号调制与解调仿真模型,并进行仿真和性能评估。背景介绍:理解PM信号调制与解调的基本原理及其应用。所需工具和环境:列出进行PM仿真所需的工具和环境。

amy_mhd的博客 605

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Yii2 API认证和授权

Authentication 认证 RESTful API是无状态的, 因此这意味着不能使用 sessions && cookies。 因此每一个请求应该带有一些 authentication credentials 因为用户的 authentication 状态可能不是保存在sessions || cookies 中的。 一个通用的实例就是在发送每一个请求的同时带一个 secret acc

wjtlht928的专栏 2624

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

YII2 博客系统

用户管理 认证 前后台认证分离 用户管理页面完善 授权 授权 授权是指验证用户是否允许做某件事情的设定,YII提供两种授权方法: ACF 存取控制过滤器 RBAC 基于角色的存取控制 ACF存取控制过滤器 ACF是一种通过yii\filters\AccessControl类来实现的简单授权方法,非常适用于仅需简单存取控制的应用。 实现ACF的方法 public functi...

JunChow 576

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Yii 2授权(RBAC)

Yii 2 授权(RBAC) 授权是指验证用户是否允许做某件事的过程。Yii提供了基于角色的存取控制(RBAC) RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。(如下图) 基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问

weng74的博客 832

Yii2.0 RESTful风格的Controller与ActiveController

yii\rest\Controller提供的大多数RESTful API功能通过过滤器实现. 特别是以下过滤器会按顺序执行: yii\filters\ContentNegotiator: 支持内容协商。yii\filters\VerbFilter: 支持HTTP 方法验证; yii\filters\AuthMethod: 支持用户认证;yii\filters\RateLimiter: 支持频

Alan Jager space 7143

php系列【仅供参考】:Yii框架中的权限控制如何控制用户访问权限

Yii框架中的权限控制如何控制用户访问权限

weixin_54626591的博客 657

YII 过滤器 filters

该方法实例化了一个CAccessControlFilter 类,该类就是处理过滤规则的,然后把$this->accessRules()作为一个参数付给 $filter->setRules()方法。一个普遍的例子就是,当我们要求执行某个特定的控制器动作之前,用户必须已经登录,那么可以写一个简单的访问过滤器在这个动作执行之前来检查这个要求。一个例子是,如果我们想要在某个动作执行后额外记录些什么,或者执行一些审核逻辑,可以编写一个简单的审计过滤器来进行这个动作之后的处理任务。Yii中的过滤器是指,

hudeyong926的专栏 233

yii2中限制访问某控制器的IP(IP白名单)

有关Yii2.0鉴权之访问控制过滤器参考类手册 http://www.yiiframework.com/doc-2.0/guide-security-authorization.html前提:需要配置user组件use yii\web\Controller; use yii\filters\AccessControl; class SiteController extends Controlle...

LCRxxoo的博客 2137

yii2 AccessControl 和 Authenticator 的结合使用

Yii2 里面有的权限检查有多种方式,这里举例说明一下 常用的header 认证行为和 AccessControl 认证;

zhoubin.wang 285

Yii2框架ACF(AccessControl Filter)的使用

AccessControl其实也就是 yii\filters\AccessControl Filter, 我们下面简写为 ACF 作为描述。 ACF,访问控制过滤器,适用于简单的验证,面对的对象便是控制器的action。对于一些复杂的验证方式,我们后面会说到 Role Based Access Control (rbac),即基于角色的权限控制。 接下来我们就上面抛出的问题进行解析。...

311

yii2的VerbFilter是干什么的?底层原理是什么?

通过使用 VerbFilter,您可以确保只有指定的请求方法才能访问相应的动作,增加应用程序的安全性和正确性。它提供了一种简单而有效的方式来处理请求方法的限制和错误处理,使您能够更好地控制应用程序的行为。方法,在动作执行前检查当前请求的方法是否符合指定的允许或禁止的请求方法。它允许您指定允许或禁止的请求方法,以确保只有指定的方法可以访问相应的动作。自定义错误处理:VerbFilter 还允许您自定义处理不允许的请求方法的行为,例如重定向到其他页面、返回自定义错误消息等。VerbFilter 使用。

长风破浪会有时的博客 314

Yii框架安全特性

Yii框架的安全特性主要体现在这几个方面: SQL注入的防范措施 XSS的防范措施 CSRF的防范措施 COOKIE验证机制 访问控制过滤器 对magic_quotes_gpc的判断

baidu_zhongce的博客 1942
上一篇: 使用 jQuery.i18n.properties 实现 Web 前端的国际化
下一篇: Yii 2.0加载自定义类或命名空间
xmlife
博客等级 码龄19年 89粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值