Get in touch
or send us a question?
CONTACT

Các mẹo bảo mật trên framwork laravel (Phần 3)

Cross Site Request Forgery (CSRF)

Truy vấn yêu cầu chéo trang web (CSRF)  là một kiểu tấn công xảy ra khi một trang web, email, blog, tin nhắn tức thời hoặc chương trình độc hại khiến trình duyệt web của người dùng thực hiện một hành động không mong muốn trên một trang web đáng tin cậy khi người dùng được xác thực.

Laravel cung cấp tính năng bảo vệ CSRF ngay lập tức với VerifyCSRFTokenphần mềm trung gian. Nói chung, nếu bạn có phần mềm trung gian này trong webnhóm phần mềm trung gian của App\Http\Kernellớp mình, bạn nên được bảo vệ tốt:

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        ...
         \App\Http\Middleware\VerifyCsrfToken::class,
         ...
    ],
];

Tiếp theo, đối với tất cả các POSTbiểu mẫu yêu cầu của bạn , bạn có thể sử dụng @csrfchỉ thị lưỡi để tạo các trường mã thông báo đầu vào CSRF ẩn:

<form method="POST" action="/profile">
    @csrf

    <!-- Equivalent to... -->
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>

Đối với các yêu cầu AJAX, bạn có thể thiết lập tiêu đề X-CSRF-Token .

Laravel cũng cung cấp khả năng loại trừ các tuyến đường nhất định khỏi bảo vệ CSRF bằng cách sử dụng $exceptbiến trong lớp phần mềm trung gian CSRF của bạn. Thông thường, bạn chỉ muốn loại trừ các tuyến không trạng thái (ví dụ: API hoặc webhook) khỏi bảo vệ CSRF. Nếu bất kỳ tuyến nào khác bị loại trừ, những tuyến này có thể dẫn đến lỗ hổng CSRF.

Command Injection

Các lỗ hổng Command Injection liên quan đến việc thực thi các lệnh shell được xây dựng với dữ liệu đầu vào của người dùng không thoát.

Ví dụ: mã sau thực hiện whoistrên tên miền do người dùng cung cấp:

public function verifyDomain(Request $request)
{
    exec('whois '.$request->input('domain'));
}

TĐoạn mã trên dễ bị tấn công vì dữ liệu người dùng không được thoát đúng cách. Để làm như vậy, bạn có thể sử dụng các hàm escapeshellcmd và / hoặc escapeshellarg PHP.

Other Injections

Chèn đối tượng, chèn mã eval và trích xuất các cuộc tấn công chiếm quyền điều khiển biến liên quan đến việc phi số hóa, đánh giá hoặc sử dụng extractchức năng trên dữ liệu đầu vào của người dùng không đáng tin cậy.

Some Một số ví dụ:

unserialize($request->input('data'));
eval($request->input('data'));
extract($request->all());

Nói chung, tránh chuyển bất kỳ dữ liệu đầu vào không đáng tin cậy nào cho các chức năng nguy hiểm này.

PHP Ini Analyzer

Kiểm tra xem cấu hình PHP của bạn có an toàn hay không. Cài đặt PHP được đề xuất

  1. allow_url_fopen: Nên vô hiệu hóa. Việc vô hiệu hóa điều này sẽ giảm thiểu nguy cơ LFI leo thang (mở cửa sổ mới)tới RFI (mở cửa sổ mới)và giảm rủi ro thực thi mã từ xa, tiết lộ thông tin và tạo kịch bản trên nhiều trang web (XSS).
  2. allow_url_include: Nên vô hiệu hóa. Điều này có tác dụng tương tự như allow_url_fopen.
  3. expose_php: Nên vô hiệu hóa. Nếu cấu hình này được bật, kẻ tấn công có thể thấy phiên bản PHP đang chạy trên máy chủ ứng dụng.
  4. display_errors: Nên tắt để tránh lộ thông báo lỗi ứng dụng chi tiết có thể bao gồm thông tin nhạy cảm.
  5. display_startup_errors: Nên vô hiệu hóa để tránh lộ ra các lỗi xảy ra trong trình tự khởi động của PHP.
  6. log_errors: Nên được kích hoạt để ghi thông báo lỗi vào tệp nhật ký lỗi của máy chủ.
  7. ignore_repeated_errors: Nên vô hiệu hóa.