Chúng tôi có một ứng dụng Java IRC nơi người dùng được phép thực thi PHP tùy ý và nhận kết quả. Dưới đây là một ví dụ về những gì được sử dụng cho:PHP jailing mã tùy ý
btc: <php>$btc = json_decode(file_get_contents('https://btc-e.com/api/2/1/ticker'), true); $ticker = $btc['ticker']; echo "Current BTC Ticker: High: $".$ticker['high']." Low: $".$ticker['low']." Average: $" . $ticker['avg'];
Chúng tôi cũng có cài đặt python, nhưng chúng tôi thích PHP vì PHP không yêu cầu dòng mới trong mã ở bất kỳ đâu. (Bởi vì đây là IRC, chúng tôi không thể cung cấp cho nó newlines trừ khi chúng tôi exec một file py web nạp)
Vấn đề là làm thế nào để ngăn chặn những người cố gắng để khai thác hệ thống, chẳng hạn như trong:
<php>echo readfile("/etc/passwd");
Mà sẽ, rõ ràng, đọc ra các tập tin passwd cho tất cả để xem.
Chúng tôi cũng đang gặp vấn đề này, sau khi chúng tôi đã cố gắng để ngăn chặn readfile():
<php>$rf = readfile; echo $rf("/etc/passwd");
Làm thế nào chúng ta nên đi về đảm bảo hệ thống này? (Mã đầy đủ là trên github, đối với bất kỳ quan tâm nào: https://github.com/clone1018/Shocky)
Như một sang một bên, không có thông tin nhạy cảm thực sự được phơi bày, vì toàn bộ nội dung trong máy ảo, vì vậy nó không phải là "timebomb" . Chúng tôi vẫn muốn khóa nó xuống.
Tại sao máy chủ web của bạn có quyền đọc '/ etc/passwd'? Khóa người dùng web của bạn để bắt đầu. – afuzzyllama
@afuzzyllama Điều đó không liên quan gì đến người dùng web; '/ etc/passwd' là thế giới có thể đọc được theo mặc định trên hầu hết các bản phân phối Linux.Một số chương trình yêu cầu quyền truy cập vào tệp đó để hoạt động và không chứa bất kỳ mật khẩu nào. –
@Ryan P - Bởi "người dùng web" tôi có nghĩa là người dùng đang chạy apache, không phải người dùng trên trang web. – afuzzyllama