2012-12-02 29 views
5

Tôi chỉ đang đùa giỡn với một ý tưởng và tôi không thể nghĩ ra cách để giải quyết vấn đề này trong chương trình phụ trợ mà không gây khó khăn cho vấn đề bảo mật.Đánh giá thuật toán từ người dùng 'không đáng tin cậy'

Giả sử tôi muốn cung cấp cho người dùng cơ hội tạo các thuật toán đơn giản qua dịch vụ web và kiểm tra những danh sách nhỏ này, ví dụ: range(0, 5) sau đó báo cáo lại kết quả qua một dịch vụ web khác, mẫu hoặc email, không thực sự quan trọng, đó là đánh giá làm phiền tôi.

Sử dụng python:

class Algorithm(whatever): 
    function = whatever.CharField(max_length=75) 

Một người sử dụng có thể nhập cái gì đó như:

'f(x)=x+(x/5)**0.75' 

Dĩ nhiên tôi có thể sử dụng eval, tước bất kỳ built-in, dây khác hơn là "x" vv, nhưng điều này vẫn có thể là thực hành không may.

Điều duy nhất tôi có thể đưa ra là di chuyển mọi chức năng đánh giá sang giao diện người dùng JavaScript.

+1

Vâng, Google chắc chắn thực hiện điều này trong mã lệnh của họ. Vì vậy, tôi tự hỏi làm thế nào họ giải quyết vấn đề này. Có lẽ chạy mã không tin cậy một máy ảo với các thiết lập cần thiết. Vì vậy, ngay cả khi họ bork VM, bạn vẫn còn an toàn – inspectorG4dget

+0

nếu bạn loại bỏ cuối cùng "nhập khẩu" từ khóa không có gì nên xảy ra về thiệt hại dữ liệu. –

+0

@MaxLi Thế còn '__import__' thì sao? – Natan

Trả lời

3

eval() là điều xấu, và làm điều này trên chương trình phụ trợ là rất nguy hiểm. Tuy nhiên nó có thể được thực hiện một cách an toàn bằng cách sử dụng một python sandbox. Nhưng nếu sandbox nơi thất bại, bạn sẽ được sở hữu. Đó không phải là cách tiếp cận "phòng thủ sâu".

Cách tiếp cận tốt hơn là đánh giá tải trọng ở phía máy khách ... Tuy nhiên đây là Cross-Site Scripting (XSS). Một cách để ngăn kẻ tấn công có thể khai thác vấn đề này, có một trình xử lý sự kiện ở phía máy khách để đánh giá biểu mẫu khi một nút được nhấn. Nếu kẻ tấn công có thể xây dựng một yêu cầu GET hoặc POST thực thi JavaScript thì anh ta có thể khai thác lỗ hổng XSS. Ngoài ra, hãy đảm bảo đặt x-frame-options: deny để ngăn chặn clickjacking.

Các vấn đề liên quan