Introducing CakePHP

Introduction

  • Để tìm hỗ hổng bảo mật trong một ứng dụng Web, cần phải dành thời gian tìm hiểu trước về framework xây dựng ra nó.
  • Trong bài viết này, tôi sẽ giới thiệu tới các bạn một Framework để xây dựng website đó là CakePHP. Sau khi đọc bài viết, các bạn sẽ có kiến thức căn bản về CakePHP và có thể kiểm soát được các lỗi bảo mật trong Framework này.
  • CakePHP version tại thời điểm viết bài là 3.8.4. Theo dõi cập nhật tại đây.

Framework Overview

  • CakePHP là một framework phát triển web chạy trên PHP. Giống như những Framework phổ biến khác, nó được xây dựng theo mô hình MVC.

  • Quá trình request có thể được mô tả như sau:
    • Request gửi từ HTTP client được xử lý bởi Controller.
    • Controller tương tác với Model để lấy dữ liệu.
    • Cuối cùng, dữ liệu được hiển thị lên View cho client.

Application Routes

  • Controller đóng vai trò quan trọng trong việc xử lý request. Nó là điển hình để nhìn thấy một path như là "/Articles" được xử lý bởi lớp ArticlesController.php. Controller được đặt tên theo quy ước: Conventions

  • Tuy nhiên, "routes.php" (app/Config) có thể sửa đổi để định nghĩa routes tùy chỉnh. Ví dụ như trên, nếu ta muốn MyArticles là đường dẫn mặc định ta sẽ cấu hình trong routes.php như sau:

  • Kết quả sau cấu hình:

  • Framework tích hợp RoutesShell có thể được sử dụng để liệt kê tất cả các routes. Trong thư mục project chạy lệnh: bin/cake routes.

  • Tham khảo thêm routing documentation

Model

  • Cũng giống như các Framework khác, CakePHP sử dụng Object-relational mapping (ORM) để giúp Dev tương tác với Database một cách đơn giản.

  • ORM là một thứ "magic" đằng sau Model. Model bao gồm các TableEntity, biểu diễn cho các bảng cơ sở dữ liệu. Bạn có thể tìm thấy table và entity trong project theo đường dẫn src/Model/Tablesrc/Model/Entity.

  • Đối với việc truy vấn database nếu không cẩn thận có thể bị lợi dụng lỗ hỏng SQL injection (SQLi). Tuy nhiên, việc phát hiện ra các lỗ hổng SQLi không phải là rõ ràng trong tất cả các phần. Bạn có thể tìm hiểu về SQL injection tại đây

View

  • View có nhiệm vụ hiển thị giao diện cho client có thể là HTML, XML, JSON, PDF file...

  • Cake sử dụng view template files (.ctp) để xử lý hiển thị data gửi về.

  • Các file được đặt trong folder "src/Template" và tên được đặt theo Controller sử dụng file đó, và theo hành động tương ứng với nó.

  • Ví dụ:

  • View templates "sử dụng cú pháp PHP thay thế cho các cấu trúc điều khiển và output" vì thế ban đầu trông nó hơi lạ. Ví dụ cho vòng lặp "foreach":

  • Để truyền Data từ Controller sang View ta sử dụng method "set". Documentation for setting view variables.

  • Và trong View ta lấy ra giá trị đó như sau:

  • CakePHP cung cấp một method "h()", nó là một wrapper cho htmlspecialchars() và mục đích của nó là mã hóa dữ liệu đầu ra.

  • Ngoài ra, còn có các component như layouts, elements, view blocks

Controller

  • Routing quy định Controller nào sẽ xử lý request. Controller logic dựa trên các actions. Actions được định nghĩa như các public method trong Controller.

  • Những method sẽ xử lý request và trả về response (thường là một View).

  • Ví dụ một path để kích hoạt action update trong ArticlesController như sau "/Articles/update":

  • Code:

  • Note: Tất cả các Controller sẽ kế thừa từ AppController (Hãy ghi nhớ điều này). Còn có một PagesController mặc định để phục vụ nội dung tĩnh.

  • Trong tài liệu có đề cập đến các callback methods, trong đó có beforeFilter - method được gọi trước tất cả các action trong Controller. Method này được sử dụng trong AuthenticationComponent để cho phép một action được truy cập công khai. Ví dụ: định nghĩa method sau đây sẽ cho phép truy cập action mà không cần phải xác thực (Authorization)

HTTP Requests

  • Với CakePHP ta không cần sử dụng $_GET và $_POST để lấy ra request. CakePHP cung cấp cho chúng ta một đối tượng đó là request.

  • Ví dụ một số biểu thức thường sử dụng:

  • Đối tượng request cũng bao gồm session data. Session data có thể truy cập từ Controller, View, Helper, Cell và Component. Chúng ta không cần sử dụng $_SESSION nữa! Tài liệu về Session

  • Đọc thêm tài liệu về Cake request docs

Middleware

  • Middleware có thể được sử dụng để sửa đổi requests và responses. Mọi dữ liệu do người dùng kiểm soát từ HTTP client có thể truy cập bằng middleware.

  • Tùy vào từng ứng dụng, có thể có nhiều lớp middleware xử lý một request trước khi nó đến Controller. Hãy ghi nhớ mỗi ứng dụng sẽ có các middleware khác nhau.

  • Một Middleware có thể được áp dụng cho toàn bộ ứng dụng hoặc áp dụng cho phạm vi cụ thể. Hãy xem src/Application.php và config/routes.php để hiểu cách sử dụng Middleware.

  • Các lớp MIddleware nên được đặt trong thư mục src/Middleware. Trong CakePHP có tích hợp một số Middleware như:

Security

  • Ngoài một số Middleware để cập ở trên, CakePHP cung cấp một số tool để giúp nhà phát triển tăng cường bảo mật như Security UtilitySecurity Component. Nó xử lý các nhiệm vụ như encryption, hashing, enforing SSL...

Kết luận

  • Trong bài viết này, mình đã giới thiệu một cách tổng quan nhất về framwork CakePHP. Từ đây bạn hoàn toàn có thể tự tin bắt đầu với Framework này, nó không phải là quá khó. Sự khác biệt chính là framework đóng gói dữ liệu theo cách riêng của nó, một khi bạn đã hiểu rõ cách thức hoạt động của nó thì nó thực sự rất đơn giản.
  • Bạn có thể tham khảo thêm tài liệu mình để phía dưới nhé ^.^

Tài liệu tham khảo