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 VerifyCSRFToken
phần mềm trung gian. Nói chung, nếu bạn có phần mềm trung gian này trong web
nhóm phần mềm trung gian của App\Http\Kernel
lớ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 POST
biểu mẫu yêu cầu của bạn , bạn có thể sử dụng @csrf
chỉ 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 $except
biế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.
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 whois
trê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.
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 extract
chứ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.
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
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).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
.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.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.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.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ủ.ignore_repeated_errors
: Nên vô hiệu hóa.You need to login in order to like this post: click here
YOU MIGHT ALSO LIKE