CakePHP的安全性

2018-01-19 16:02 更新

安全性是構(gòu)建Web應(yīng)用程序的另一個(gè)重要特征。它確保了網(wǎng)站用戶數(shù)據(jù)的安全。 CakePHP提供了一些工具,以確保您的應(yīng)用程序安全。

加密和解密

CakePHP的安全類(lèi)庫(kù)提供加密和解密數(shù)據(jù)的方法。以下兩種方法分別用于加密解密數(shù)據(jù)。

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

加密方法將文本和鍵作為參數(shù)來(lái)加密數(shù)據(jù),返回HMAC校驗(yàn)值。

hash()方法用來(lái)散列數(shù)據(jù)。以下是hash()方法的語(yǔ)法。

語(yǔ)法

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

CSRF

CSRF代表跨站請(qǐng)求偽造 。通過(guò)啟用CSRF組件,就可以得到反攻擊保護(hù)。 CSRF是Web應(yīng)用程序的常見(jiàn)漏洞。它允許攻擊者捕獲和重放前一個(gè)請(qǐng)求,在其他域使用圖像標(biāo)記或資源提交數(shù)據(jù)請(qǐng)求。CSRF只需通過(guò)簡(jiǎn)單的添加CsrfComponent至組件陣列即可啟用。

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

該CsrfComponent與表單助手無(wú)縫集成。每次通過(guò)表單助手創(chuàng)建表單的時(shí)候,它都會(huì)插入包含CSRF安全令的隱藏域。

雖然不建議這樣做,你可能要在某些請(qǐng)求中禁用CsrfComponent。您可以通過(guò)使用控制器的事件調(diào)度程序在beforeFilter()方法運(yùn)行的過(guò)程中這樣做。

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

安全組件

安全組件適用于安全要求更嚴(yán)格的應(yīng)用程序。它為各類(lèi)任務(wù)提供方法,如:-

  • 限制您的應(yīng)用程序接受的http方法 。在反作用發(fā)生之前,您應(yīng)該總是檢查HTTP方法。您應(yīng)該檢查HTTP方法或使用Cake\Network\Request::allowMethod()以確保使用正確的HTTP方法。

  • 表單篡改保護(hù) -默認(rèn)情況下,SecurityComponent阻止用戶以特定的方式篡改表單。SecurityComponent將阻止以下事件 -

    • 未知域不能被添加到表單。

    • 字段不能從表單中刪除。

    • 隱藏域的值不能被修改。

  • 要求使用SSL -所有動(dòng)作要求SSL加密。

  • 限制跨控制器的通信 -我們可以限制哪些控制器可將請(qǐng)求發(fā)送到此控制器。我們也可以限制哪些方法可以發(fā)送請(qǐng)求到此控制器的方法。

修改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/目錄下創(chuàng)建一個(gè)LoginsController.php文件。復(fù)制以下代碼至其中。

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目錄下創(chuàng)建一個(gè)Logins目錄,并在該Logins目錄下創(chuàng)建一個(gè)名為index.ctp視圖文件。復(fù)制以下代碼至其中。

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();
?>

通過(guò)訪問(wèn)以下網(wǎng)址執(zhí)行上面的例子- http://localhost:85/CakePHP/login

輸出

執(zhí)行以上程序,您會(huì)看到如下頁(yè)面:



以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)