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
เอาต์พุต
เมื่อดำเนินการคุณจะได้รับผลลัพธ์ต่อไปนี้