2013-04-11 44 views
5

Tôi đã có một cuộc thảo luận thú vị với đồng nghiệp về bảo mật trong PHP.Bảo mật PHP về Biểu mẫu và Thao tác DOM

Giả sử một người có trang web PHP đang chạy với biểu mẫu HTML chuẩn. Một kẻ tấn công quyết định sử dụng các công cụ của Nhà phát triển Chrome và thêm vào DOM enctype="multipart/form-data"file input.

Kẻ tấn công tải lên tệp, có thể nó sẽ không thực thi nếu nó là vi-rút nhưng nó vẫn sử dụng băng thông/bộ nhớ cho thời điểm đó. Tệp sẽ đi vào thư mục PHP /tmp chỉ bằng cách thực hiện việc này? Điều này có làm cho mọi hình thức trở nên không an toàn khi người dùng có thể tải lên một tệp dưới bất kỳ hình thức nào không?

Trên quy mô lớn hơn nếu 100.000 người đã thêm vào DOM và tải lên tệp gigabyte ngẫu nhiên thì sao? Nó sẽ không tạm thời làm cho họ đạt băng thông và/hoặc lưu trữ của họ?

+1

Bạn sẽ vẫn cần một số loại mã phía máy chủ để xử lý việc tải lên, nếu nó không có ở đó, nó sẽ không tải lên! – Marty

+1

Nó sẽ tự động đi vào '$ _FILES ['name'] ['tmp_name']' phải không? – JREAM

+2

Nếu bạn có nhà cung cấp dịch vụ lưu trữ tính phí cho ** băng thông ** đến, hãy yêu cầu họ nhảy khỏi cầu. Nhưng có, các công cụ được tự động lưu trữ trong '/ tmp', nhưng được tái chế theo thời gian. –

Trả lời

3

Bản thân quá trình tải lên diễn ra, bất kể điều gì. Tệp được lưu trữ trong thư mục tạm thời tải lên, và sau đó tập lệnh PHP được bắt đầu. Nếu tập lệnh không xử lý tệp được tải lên, tệp sẽ tự động bị xóa khỏi thư mục tạm thời khi tập lệnh đã hoàn tất việc thực thi.

Máy chủ có hủy yêu cầu khi vượt quá kích thước tối đa hay không, là vấn đề về cấu hình.

+0

Ahh! Tôi đã quên tải lên kích thước tệp tối đa và hết thời gian chờ - tôi nghĩ đây là các biện pháp bảo mật sẽ bù đắp vấn đề này! – JREAM

+2

Nếu tất cả các tập lệnh PHP tải lên của bạn nằm trong một thư mục, bạn có thể kiểm soát kích thước tệp tải lên bằng cách sử dụng LimitRequestBody trong tệp .htaccess. Đặt giá trị nhỏ cho LimitRequestBody (200 KB) trong tệp .htaccess của webroor và bên dưới thư mục nơi tệp PHP tải lên của bạn cư trú, cung cấp giá trị cao hơn của LimitRequestBody – Amit