Là một quản trị viên web, tôi cần phải xác định các tập lệnh nguy hiểm.
Tôi luôn viết mã php lọc đầu vào của người dùng. Tôi không bao giờ tin vào đầu vào của người dùng, chọn ký tự nào hợp lệ (so với việc không sử dụng một số), sử dụng chức năng lọc gốc của php (filter_input
) hoặc sử dụng các tiện ích lib/frameworks.
Hôm nay, tôi đã tìm kiếm lỗ hổng bảo mật trong các module tải về và tìm thấy mã này:
if (isset($_GET['css_file_name'])) {
$cssFileName = _PS_MODULE_DIR_ . DS . "xxxx" . DS . "css" . DS . $_GET['css_file_name'] . ".css";
echo file_get_contents($cssFileName);
}
echo "";
Tôi nghĩ đó là không an toàn, nó không tôn trọng các quy tắc cơ bản bao giờ tin tưởng người dùng nhập vào. Vì vậy, tôi quyết định chứng minh điều đó, tôi đã cố gắng thêm các ký tự DEL ascii để xóa .css
và có thể tìm thấy bất kỳ tệp nào (tệp php có thông tin đăng nhập chẳng hạn) nhưng tôi đã không thành công.
Vì vậy, câu hỏi của tôi là: mã này có thực sự không an toàn không? Có thể lấy một file php với nó (bạn có thể chứng minh điều đó?)
Nếu chúng ta không thể khai thác được thì có an toàn không? Câu hỏi của bạn là thú vị, nhưng an ninh là một cách suy nghĩ, và bản thân bạn đang nghi ngờ liệu điều này có an toàn hay không. Đây là một dấu hiệu rõ ràng, rằng một danh sách trắng sẽ là thích hợp trong trường hợp này, bởi vì rất khó để chứng minh rằng nó là an toàn. – martinstoeckli