CakePHP - 安全

安全性是构建Web应用程序时的另一个重要特性.它向网站用户保证他们的数据是安全的. CakePHP提供了一些保护应用程序的工具.

加密和解密

CakePHP中的安全库提供了加密和解密数据的方法.以下是两种用于相同目的的方法.

static Cake\Utility\Security::encrypt($text, $key, $hmacSalt = null)
static Cake\Utility\Security::decrypt($cipher, $key, $hmacSalt = null)

encrypt方法将text和key作为加密数据的参数,返回值将是带有HMAC校验和的加密值.

要散列数据hash()方法.以下是hash()方法的语法.

语法

static Cake\Utility\Security::hash($string, $type = NULL, $salt = false)

CSRF

CSRF代表跨站请求伪造.通过启用CSRF组件,您可以获得针对攻击的保护. CSRF是Web应用程序中的常见漏洞.它允许攻击者捕获和重放先前的请求,有时使用图像标记或其他域上的资源提交数据请求.只需将 CsrfComponent 添加到组件数组即可启用CSRF,如下所示.

public function initialize(){
   parent::initialize();
   $this->loadComponent('Csrf');
}

CsrfComponent与 FormHelper 无缝集成.每次使用FormHelper创建表单时,它都会插入一个包含CSRF令牌的隐藏字段.

虽然不建议这样做,但您可能希望在某些请求中禁用CsrfComponent.您可以在 beforeFilter()方法期间使用控制器的事件调度程序执行此操作.

public function beforeFilter(Event $event){
   $this->eventManager()->off($this->Csrf);
}

安全组件

安全组件为您的应用程序应用更严格的安全性.它提供了各种任务的方法,如 :

  • 限制应用程序接受的HTTP方法 :  ;在执行副作用之前,应始终验证正在使用的HTTP方法.您应该检查HTTP方法或使用 Cake \Network\Request :: allowMethod()以确保使用正确的HTTP方法.

  • 表格篡改保护 : 默认情况下,SecurityComponent会阻止用户以特定方式篡改表单. SecurityComponent将阻止以下事项和减号;

    • 无法将未知字段添加到表单中.

    • 无法从表单中删除字段.

    • 隐藏输入中的值无法修改.

  • 要求使用SSL : 要求SSL加密的所有操作.

  • 限制跨控制器通信 : 我们可以限制哪个控制器可以向该控制器发送请求.我们还可以限制哪些操作可以向此控制器的操作发送请求.

示例

制作 config/routes.php 文件中的更改,如以下程序所示.

config/routes.php

<?php
   use Cake\Core\Plugin;
   use Cake\Routing\RouteBuilder;
   use Cake\Routing\Router;

   Router::defaultRouteClass('DashedRoute');
   Router::scope('/', function (RouteBuilder $routes) {
      $routes->connect('login',['controller'=>'Logins','action'=>'index']);
      $routes->fallbacks('DashedRoute'); 
   });
   Plugin::routes();

src/Controller/LoginsController.php 创建 LoginsController.php 文件.将以下代码复制到控制器文件中.

src/Controller/LoginsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;

   class LoginsController extends AppController{
      public function initialize(){
         parent::initialize();
         $this->loadComponent('Security');
      }
      public function index(){
      }
   }
?>

创建目录登录 src/Template 并在该目录下创建一个名为 View 的文件b> index.ctp 的.将以下代码复制到该文件中.

src/Template/Logins/index.ctp

<?php
   echo $this->Form->create("Logins",array('url'=>'/login'));
   echo $this->Form->input('username');
   echo $this->Form->input('password');
   echo $this->Form->button('Submit');
   echo $this->Form->end();
?>

通过访问以下URL :   http://localhost:85/CakePHP/login

输出

执行时,您将收到以下输出.

Loggins