安全性是构建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是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
执行时,您将收到以下输出.