CakePHP - ความปลอดภัย

ความปลอดภัยเป็นอีกหนึ่งคุณสมบัติที่สำคัญในขณะที่สร้างเว็บแอปพลิเคชัน ทำให้ผู้ใช้เว็บไซต์มั่นใจได้ว่าข้อมูลของพวกเขาจะปลอดภัย CakePHP มีเครื่องมือบางอย่างเพื่อรักษาความปลอดภัยให้กับแอปพลิเคชันของคุณ

การเข้ารหัสและการถอดรหัส

ไลบรารีความปลอดภัยใน CakePHP มีวิธีการซึ่งเราสามารถเข้ารหัสและถอดรหัสข้อมูลได้ ต่อไปนี้เป็นสองวิธีที่ใช้เพื่อวัตถุประสงค์เดียวกัน

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

วิธีการเข้ารหัสจะใช้ข้อความและคีย์เป็นอาร์กิวเมนต์ในการเข้ารหัสข้อมูลและค่าที่ส่งคืนจะเป็นค่าที่เข้ารหัสด้วยการตรวจสอบ HMAC

ในการแฮชข้อมูล hash()ใช้วิธีการ ต่อไปนี้เป็นไวยากรณ์ของวิธี hash ()

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

CSRF

CSRF ย่อมาจาก Cross Site Request Forgery. เมื่อเปิดใช้งานส่วนประกอบ CSRF คุณจะได้รับการป้องกันจากการโจมตี CSRF เป็นช่องโหว่ทั่วไปในเว็บแอปพลิเคชัน

ช่วยให้ผู้โจมตีสามารถจับภาพและเล่นซ้ำคำขอก่อนหน้านี้และบางครั้งก็ส่งคำขอข้อมูลโดยใช้แท็กรูปภาพหรือทรัพยากรบนโดเมนอื่น CSRF สามารถเปิดใช้งานได้โดยเพียงแค่เพิ่มไฟล์CsrfComponent ไปยังอาร์เรย์ส่วนประกอบของคุณดังที่แสดงด้านล่าง -

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

CsrfComponent รวมเข้ากับไฟล์ FormHelper. ทุกครั้งที่คุณสร้างแบบฟอร์มด้วย FormHelper จะแทรกฟิลด์ที่ซ่อนไว้ซึ่งมีโทเค็น CSRF

แม้ว่าจะไม่แนะนำให้ใช้ แต่คุณอาจต้องการปิดใช้งาน CsrfComponent สำหรับคำขอบางอย่าง คุณสามารถทำได้โดยใช้ตัวเลือกเหตุการณ์ของตัวควบคุมในช่วงbeforeFilter() วิธี.

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

ส่วนประกอบความปลอดภัย

ส่วนประกอบความปลอดภัยใช้ความปลอดภัยที่เข้มงวดมากขึ้นกับแอปพลิเคชันของคุณ มีวิธีการสำหรับงานต่างๆเช่น -

  • Restricting which HTTP methods your application accepts- คุณควรตรวจสอบเมธอด HTTP เสมอซึ่งจะใช้ก่อนที่จะเรียกใช้ผลข้างเคียง คุณควรตรวจสอบวิธี HTTP หรือใช้Cake\Network\Request::allowMethod() เพื่อให้แน่ใจว่าใช้วิธี HTTP ที่ถูกต้อง

  • Form tampering protection- โดยค่าเริ่มต้น SecurityComponent จะป้องกันไม่ให้ผู้ใช้ปลอมแปลงแบบฟอร์มในรูปแบบเฉพาะ SecurityComponent จะป้องกันสิ่งต่อไปนี้ -

    • ไม่สามารถเพิ่มฟิลด์ที่ไม่รู้จักลงในแบบฟอร์ม

    • ไม่สามารถลบฟิลด์ออกจากแบบฟอร์ม

    • ไม่สามารถแก้ไขค่าในอินพุตที่ซ่อนอยู่ได้

  • Requiring that SSL be used - การดำเนินการทั้งหมดที่ต้องใช้ SSL- ปลอดภัย

  • Limiting cross controller communication- เราสามารถ จำกัด ผู้ควบคุมที่สามารถส่งคำขอไปยังผู้ควบคุมนี้ได้ นอกจากนี้เรายังสามารถ จำกัด การดำเนินการที่สามารถส่งคำขอไปยังการดำเนินการของผู้ควบคุมนี้ได้

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config/routes.php ตามที่แสดงในโปรแกรมต่อไปนี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf');
   //$builder->connect('/pages',
      ['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('login',['controller'=>'Logins','action'=>'index']);
   $builder->fallbacks();
});

สร้างไฟล์ LoginsController.php ไฟล์ที่ src/Controller/LoginsController.php. คัดลอกรหัสต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/Controller/LoginsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   class LoginsController extends AppController {
      public function initialize() : void {
         parent::initialize();
         $this->loadComponent('Security');
      }
         public function index(){
      }
   }
?>

สร้างไดเร็กทอรี Logins ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ Viewไฟล์ชื่อ index.php คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Logins/index.php

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

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ - http: // localhost / cakephp4 / login

เอาต์พุต

เมื่อดำเนินการคุณจะได้รับผลลัพธ์ต่อไปนี้