Bên cạnh thực tế là $_REQUEST
lần đọc từ cookie, có bất kỳ lý do nào khiến tôi nên sử dụng $_GET
và $_POST
thay vì $_REQUEST
không? Lý do và lý do thực tế để làm như vậy là gì?
Trả lời
Tôi sử dụng $ _REQUEST khi tôi chỉ muốn một số dữ liệu nhất định từ người dùng trả về một số dữ liệu nhất định.
Không bao giờ sử dụng $ _REQUEST khi yêu cầu sẽ có tác dụng phụ. Các yêu cầu tạo ra các hiệu ứng phụ phải là POST (vì lý do ngữ nghĩa và cũng vì các công cụ CSRF cơ bản, một thẻ img giả có thể nhấn bất kỳ điểm cuối GET nào mà không cần người dùng biết).
$ _GET nên được sử dụng khi GET hoặc POSTING vào một trang sẽ tạo ra các kết quả khác nhau.
Việc sử dụng $ _REQUEST mở một số vectơ tấn công vào ứng dụng của bạn nơi các biến có thể bị ghi đè ở nơi bạn không muốn điều đó xảy ra.
Cũng xem xét đơn đặt hàng GPC (Nhận, Đăng, Cookie) trên đó $ _REQUEST sẽ được điền.
tức là một yêu cầu với:
$_GET['foo'] = 'bar'
$_POST['foo'] = 'baz'
sẽ dẫn đến
$_REQUEST['foo'] == 'bar'
Bạn đã đưa ra một trong những câu trả lời, vì vậy tôi sẽ cung cấp cho khác:
Đó là nhiều hơn một sự lựa chọn phong cách. Ví dụ: bạn thường không muốn thông tin thay đổi trạng thái trên máy chủ để có thể lưu vào bộ nhớ cache, vì vậy bạn có thể muốn hạn chế nó thành các biến số $_POST
.
Câu trả lời hay! Tôi hy vọng sẽ thấy nhiều hơn trong số này. – Tom
sự không an toàn thường được đề cập là $ _REQUEST là không có thật. tất cả những cách này để lấy dữ liệu từ người dùng, có một máy không được bảo mật. bạn luôn phải vệ sinh đầu vào, vì vậy không có lợi thế bảo mật thực sự nào khi sử dụng một trong hai.
chỉ có ý nghĩa nếu bạn có các cách sử dụng khác nhau cho các giá trị có cùng tên trên các kênh khác nhau. trong trường hợp đó, bạn nên đổi tên một số trong số đó.
Rất đúng, mọi người muốn hét lên yêu cầu đó là lỗ hổng bảo mật lớn, nhưng ngay cả GET và POST cũng không an toàn, dễ dàng xen vào các bit nghịch ngợm, bạn cần phải luôn luôn khử trùng tất cả dữ liệu, ngay cả những thứ xuất phát từ cơ sở dữ liệu của bạn . – TravisO
Bên cạnh thực tế là $ _REQUEST đọc từ tập tin cookie
Bên cạnh thực tế rằng đây là undefined (Đó là cấu hình về mặt kĩ mỗi cài đặt), vấn đề sử dụng $_REQUEST
là nó quá đơn giản hoá mọi thứ . Có (hoặc phải là) sự khác biệt ngữ nghĩa giữa yêu cầu GET và yêu cầu POST. Vì vậy, nó sẽ quan trọng đối với ứng dụng của bạn nếu bạn nhận được đầu vào từ một nguồn này hoặc nguồn khác. Đây là cách giao thức HTTP được định nghĩa, vì vậy bằng cách bỏ qua nó, bạn đang phá hoại giao thức, điều này làm cho ứng dụng của bạn ít tương thích hơn. Đó là cùng một đối số kiểu có thể được thực hiện để sử dụng đánh dấu HTML ngữ nghĩa, thay vì đánh dấu theo định hướng trình bày. Hay nói chung, theo ý định của một giao thức hơn là chỉ làm bất cứ điều gì làm việc trong tình huống cụ thể.
Đây là thông tin tôi vừa tìm thấy: When and why should $_REQUEST be used instead of $_GET/$_POST/$_COOKIE?. Tôi rất tiếc vì tôi không tìm thấy câu hỏi này sớm hơn, vì vậy tôi sẽ không hỏi câu hỏi ...
HTTP GET là ngữ nghĩa có nghĩa là được sử dụng để tìm nạp một trang, trong khi POST có thể được lập luận rằng khi được sử dụng, bạn mong muốn rằng một số loại trạng thái được thay đổi.
Ví dụ: có một kỳ vọng rằng việc sử dụng GET với cùng thông số nhiều lần mang lại kết quả tương tự, trong khi sử dụng POST, chúng có thể không.
Không sử dụng POST khi bạn nên mang lại các vấn đề. Tôi nghĩ rằng các thư viện AJAX của Ruby on Rails đã sử dụng GET thay vì POST, và dẫn đến rất nhiều dữ liệu bị mất khi bị các trình thu thập dữ liệu web chạm vào.
Do đó, có thể bạn nên tránh sử dụng $ _REQUEST. Bạn nên biết mục đích của trang, và quyết định cách trả lời yêu cầu GET và cách trả lời yêu cầu POST.
- 1. Khi nào và tại sao nên sử dụng $ _REQUEST thay vì $ _GET/$ _POST/$ _COOKIE?
- 2. PHP $ _REQUEST $ _GET hoặc $ _POST
- 3. Tại sao bạn kết hợp $ _GET và $ _POST trong PHP?
- 4. Tại sao nên sử dụng Function.prototype.bind thay vì Function.prototype.call?
- 5. Tại sao nên sử dụng GWT.create() thay vì mới?
- 6. Tại sao tôi nên POST dữ liệu thay vì GET?
- 7. tại sao tôi nên sử dụng dịch vụ android thay vì java thread
- 8. Tại sao tôi nên sử dụng LoadBalancerProbe thay vì đăng ký vào sự kiện RoleEnvironment.StatusCheck?
- 9. Tại sao tôi nên sử dụng nhibernate thay vì khung thực thể 4
- 10. Tại sao tôi nên sử dụng toán tử operator.itemgetter (x) thay vì [x]?
- 11. Tại sao tôi nên sử dụng Cá chép thay vì cảnh báo trong Perl?
- 12. Tại sao tôi nên sử dụng glBindAttribLocation?
- 13. (Tại sao) tôi nên sử dụng obfuscation?
- 14. PHP $ _POST không hoạt động nhưng $ _GET hoạt động tốt
- 15. Tôi có nên sử dụng NoSQL thay vì MySQL không?
- 16. Tại sao tôi nên sử dụng Socket.io?
- 17. Tôi nên sử dụng gì thay vì windows.h trong linux
- 18. Tại sao không nên sử dụng attach() trong R, và tôi nên sử dụng cái gì?
- 19. Tôi có nên sử dụng FxCop và tại sao không?
- 20. Tại sao sử dụng tăng :: ice_or thay vì || và tăng :: ice_and thay vì && trong enable_if?
- 21. Tôi nên sử dụng cái gì thay vì sscanf?
- 22. Khi nào tôi nên sử dụng UserControl thay vì Trang?
- 23. Vì sao nên sử dụng NSAutoreleasePool?
- 24. Tôi nên sử dụng gì thay vì com.google.appengine.repackaged *?
- 25. Tôi có nên sử dụng String thay vì TFilename không?
- 26. Tôi nên sử dụng gì thay vì printf trong Perl?
- 27. Tôi nên sử dụng gì thay vì LoadWithPartialName()?
- 28. Khi nào tôi nên sử dụng UIImagePickerControllerSourceTypePhotoLibrary thay vì UIImagePickerControllerSourceTypeSavedPhotosAlbum?
- 29. Tại sao memo.Lines sử dụng TStrings thay vì TStringList?
- 30. WPF: Tại sao tôi nên sử dụng khung MVVM hiện có thay vì viết của riêng tôi?
Xin chúc mừng, bạn vừa nhận được câu trả lời được chấp nhận đầu tiên :) Chào mừng bạn đến với stackoverflow.com! – Tom