Tôi đã xem qua một số câu trả lời phổ biến liên quan đến PHP gần đây đã đề xuất sử dụng superglobal $_REQUEST
, mà tôi nghĩ là mùi mã, vì nó nhắc tôi về số register_globals
.
Bạn có thể cung cấp giải thích/bằng chứng tốt về lý do tại sao $_REQUEST
là thực tiễn không tốt? Tôi sẽ ném ra một vài ví dụ tôi đã đào lên, và sẽ yêu thích nhiều thông tin/quan điểm về cả các vector tấn công lý thuyết và khai thác thế giới thực, cũng như các đề xuất về các bước hợp lý mà sysadmin có thể thực hiện để giảm rủi ro (thiếu viết lại ứng dụng ... hoặc, chúng tôi cần để đi đến quản lý và yêu cầu viết lại không?).
Ví dụ lỗ hổng: Mặc định GPC
mảng hợp nhất theo đơn đặt hàng có nghĩa là giá trị COOKIE ghi đè GET và POST, vì vậy $_REQUEST
có thể được sử dụng cho công XSS và HTTP tấn công. PHP cho phép các vars cookie ghi đè lên các mảng superglobal. 10 trang trình bày đầu tiên của this talk đưa ra các ví dụ (toàn bộ bài nói chuyện tuyệt vời). phpMyAdmin exploit ví dụ về tấn công CSRF.
Ví dụ biện pháp đối phó: reconfigure $_REQUEST
mảng merge-trật tự GPC
-CGP
để GET/POST ghi đè COOKIE, không phải là cách khác xung quanh. Sử dụng Suhosin để chặn ghi đè superglobals.
(Ngoài ra, sẽ không được hỏi nếu tôi nghĩ câu hỏi của tôi là một người bị mắc mưu, nhưng vui vẻ áp đảo SO câu trả lời cho "When and why should $_REQUEST be used instead of $_GET/$_POST/$_COOKIE?" là "Không bao giờ.")
Bạn cũng có thể giả mạo bài đăng biểu mẫu hoặc cookie. Không có gì đặc biệt về POST của COOKIE mà làm cho nó khó khăn hơn để giả mạo sau đó GET. – Kibbee
Có một điều. Các biến GET có thể được sử dụng như một phần của cuộc tấn công CSRF. Chỉ cho phép POST hoặc COOKIE cho những thứ nhất định, khiến cho loại tấn công này trở nên khó khăn hơn. – troelskn