yii2tech / https
安全连接(https)处理工具
Requires
- yiisoft/yii2: *
This package is auto-updated.
Last update: 2022-01-10 10:39:18 UTC
README
为Yii2提供的安全连接(https)处理扩展
此扩展提供了一些安全连接(https)处理的工具。
有关许可证信息,请参阅LICENSE文件。
安装
安装此扩展的首选方法是使用composer。
运行以下命令:
php composer.phar require --prefer-dist yii2tech/https
或添加以下内容到您的composer.json的require部分:
"yii2tech/https": "*"
使用方法
此扩展提供了一些安全连接(https)处理的工具。
过滤器[[\yii2tech\https\SecureConnectionFilter]]允许根据特定操作的需求自动从'http'重定向到'https'协议。可以通过设置secureOnly
和secureExcept
属性来设置需要安全协议的操作和不安全协议的操作。
作为[[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', ], ], ]; } // ... }
注意!不要忘记过滤器的only
和except
属性。请注意,secureOnly
和secureExcept
不能影响通过only
和except
排除在过滤之外的那些操作。您可以使用此功能跳过某些操作的安全连接处理。
注意!请留意那些可能在一种协议中出现但需要提交到另一种协议的表单。在重定向期间无法传输请求体,因此提交的数据将会丢失。您需要手动设置表单操作以使用正确的模式,而不是依赖于过滤器。
自动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()
方法的精确路由名称。