codecamp

CakePHP的安全性

安全性是构建Web应用程序的另一个重要特征。它确保了网站用户数据的安全。 CakePHP提供了一些工具,以确保您的应用程序安全。

加密和解密

CakePHP的安全类库提供加密和解密数据的方法。以下两种方法分别用于加密解密数据。

static CakeUtilitySecurity::encrypt($text, $key, $hmacSalt = null)
static CakeUtilitySecurity::decrypt($cipher, $key, $hmacSalt = null)

加密方法将文本和键作为参数来加密数据,返回HMAC校验值。

hash()方法用来散列数据。以下是hash()方法的语法。

语法

static CakeUtilitySecurity::hash($string, $type = NULL, $salt = false)

CSRF

CSRF代表跨站请求伪造 。通过启用CSRF组件,就可以得到反攻击保护。 CSRF是Web应用程序的常见漏洞。它允许攻击者捕获和重放前一个请求,在其他域使用图像标记或资源提交数据请求。CSRF只需通过简单的添加CsrfComponent至组件阵列即可启用。

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

该CsrfComponent与表单助手无缝集成。每次通过表单助手创建表单的时候,它都会插入包含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 CakeCorePlugin;
   use CakeRoutingRouteBuilder;
   use CakeRoutingRouter;

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

src/Controller/目录下创建一个LoginsController.php文件。复制以下代码至其中。

src/Controller/LoginsController.php

<?php
   namespace AppController;
   use AppControllerAppController;

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

src/Template目录下创建一个Logins目录,并在该Logins目录下创建一个名为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();
?>

通过访问以下网址执行上面的例子- http://localhost:85/CakePHP/login

输出

执行以上程序,您会看到如下页面:



CakePHP的Cookie管理
CakePHP的验证
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

CakePHP Useful Resources

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }