yii2tech/https

此软件包已废弃,不再维护。未建议替代软件包。

安全连接(https)处理工具

资助软件包维护!
klimov-paul
Patreon

安装: 1,289

依赖项: 0

建议者: 0

安全: 0

星标: 11

关注者: 4

分支: 1

开放问题: 0

类型:yii2-extension

1.0.0 2016-07-12 08:50 UTC

This package is auto-updated.

Last update: 2022-01-10 10:39:18 UTC


README

12951949

为Yii2提供的安全连接(https)处理扩展


此扩展提供了一些安全连接(https)处理的工具。

有关许可证信息,请参阅LICENSE文件。

Latest Stable Version Total Downloads Build Status

安装

安装此扩展的首选方法是使用composer

运行以下命令:

php composer.phar require --prefer-dist yii2tech/https

或添加以下内容到您的composer.json的require部分:

"yii2tech/https": "*"

使用方法

此扩展提供了一些安全连接(https)处理的工具。

过滤器[[\yii2tech\https\SecureConnectionFilter]]允许根据特定操作的需求自动从'http'重定向到'https'协议。可以通过设置secureOnlysecureExcept属性来设置需要安全协议的操作和不安全协议的操作。

作为[[yii\base\ActionFilter]]的子类,[[\yii2tech\https\SecureConnectionFilter]]可以在控制器级别和模块(应用程序)级别进行设置。

应用程序配置示例

return [
    'as https' => [
        'class' => 'yii2tech\https\SecureConnectionFilter',
        'secureOnly' => [
            'site/login',
            'site/signup',
        ],
    ],
    // ...
];

控制器配置示例

use yii\web\Controller;
use yii2tech\https\SecureConnectionFilter;

class SiteController extends Controller
{
    public function behaviors()
    {
        return [
            'https' => [
                'class' => SecureConnectionFilter::className(),
                'secureOnly' => [
                    'login',
                    'signup',
                ],
            ],
        ];
    }

    // ...
}

注意!不要忘记过滤器的onlyexcept属性。请注意,secureOnlysecureExcept不能影响通过onlyexcept排除在过滤之外的那些操作。您可以使用此功能跳过某些操作的安全连接处理。

注意!请留意那些可能在一种协议中出现但需要提交到另一种协议的表单。在重定向期间无法传输请求体,因此提交的数据将会丢失。您需要手动设置表单操作以使用正确的模式,而不是依赖于过滤器。

自动URL创建

使用简单地从一种协议重定向到另一种协议不是高效的,且存在丢失通过Web表单提交的数据的风险。因此,最好在您的视图中显式指定具有正确协议的URL。您可以使用[[\yii2tech\https\SecureUrlRuleFilter]]动作过滤器简化此过程。一旦应用,它将调整[[\yii\web\UrlManager::rules]],使得[[\yii\web\UrlManager::createUrl()]]方法在当前协议不匹配的情况下自动创建具有正确协议的绝对URL。

应用程序配置示例

return [
    'as secureUrlRules' => [
        'class' => 'yii2tech\https\SecureUrlRuleFilter',
        'secureOnlyRoutes' => [
            'auth/login',
            'site/signup',
        ],
        'secureExceptRoutes' => [
            'site/index',
            'help/<action>',
        ],
    ],
    'components' => [
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '/' => 'site/index',
                'login' => 'auth/login',
                'signup' => 'site/signup',
                '<action:contact|faq>' => 'help/<action>',
            ]
        ],
    ],
    // ...
];

现在[[\yii\web\UrlManager::createUrl()]]将创建具有正确协议的URL,无需额外努力

if (Yii::$app->request->isSecureConnection) {
    echo Yii::$app->urlManager->createUrl(['site/index']); // outputs: 'http://domain.com/'
    echo Yii::$app->urlManager->createUrl(['auth/login']); // outputs: '/login'
} else {
    echo Yii::$app->urlManager->createUrl(['site/index']); // outputs: '/'
    echo Yii::$app->urlManager->createUrl(['auth/login']); // outputs: 'https://domain.com/login'
}

注意:[[\yii2tech\https\SecureUrlRuleFilter]]过滤器仅在[[\yii\web\UrlManager::enablePrettyUrl]]启用时生效。

注意!一旦应用[[\yii2tech\https\SecureUrlRuleFilter]]过滤器,它会更改相关[[\yii\web\UrlManager]]实例的状态,这可能会产生意外的副作用。例如:这可能会破坏诸如解析URL等特性。

自动创建URL的更可靠方法是使用[[\yii2tech\https\SecureConnectionUrlManagerTrait]]。当与[[\yii\web\UrlManager]]的子类一起使用时,它将调整createUrl()方法,使其行为与上面的示例完全相同。

特质使用示例

namespace app\components\web;

use yii2tech\https\SecureConnectionUrlManagerTrait;

class MyUrlManager extends \yii\web\UrlManager
{
    use SecureConnectionUrlManagerTrait;
}

应用程序配置示例

return [
    'components' => [
        'urlManager' => [
            'class' => 'app\components\web\MyUrlManager',
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '/' => 'site/index',
                'login' => 'auth/login',
                'signup' => 'site/signup',
                '<action:contact|faq>' => 'help/<action>',
            ],
            'secureOnlyRoutes' => [
                'site/signup',
                'auth/*',
            ],
            'secureExceptRoutes' => [
                'site/index',
                'help/*',
            ],
        ],
    ],
    // ...
];

如果你在项目中没有使用任何自定义URL管理器,你可以使用[[\yii2tech\https\UrlManager]],它已经应用了[[\yii2tech\https\SecureConnectionUrlManagerTrait]]。

注意:使用[[\yii2tech\https\SecureConnectionUrlManagerTrait]]比使用[[\yii2tech\https\SecureUrlRuleFilter]]更可靠,但在某些情况下可能会消耗更多的计算资源。尽管如此,仍然建议使用特质而不是过滤器。

注意:[[\yii2tech\https\SecureConnectionUrlManagerTrait]]和[[\yii2tech\https\SecureUrlRuleFilter]]处理路由的方式不同:过滤器使用由URL规则定义的路由,而特质操作的是传递给createUrl()方法的精确路由名称。