01/10/2018, 01:10

Xây dựng website asp.net biên dịch code C/C++/Java

Bài toán giống như các trang chạy code online http://ideone.com/
Đưa code vào và biên dịch theo từng ngôn ngữ. Để được output hoặc đưa ra lỗi nếu có
Em đã tìm hiểu nhiều nơi nhưng chưa tìm được phương án nào có khả thi cả . Mong các tiền bối chỉ giáo!

Khoa NTA viết 03:10 ngày 01/10/2018

Theo mình nghĩ đơn giản thì các bước của nó là như sau:

  1. Thu thập code và stdin data mà người dùng submit và ghi code ra 1 file tạm thời. Lưu ý, phải giới hạn cho người dùng, vì có nguy cơ là họ sẽ lợi dụng shell để dùng cho mục đích xấu.
  2. Dùng lệnh biên dịch tương ứng theo mỗi ngôn ngữ và xử lý giá trị trả về của trình biên dịch + bắt stdout/stderr khi có lỗi. Trên Python có module subprocess làm được việc này (mình giới thiệu là việc đó khả thi và vì mình không rành PHP).
  3. Nếu biên dịch thành công, thực hiện chạy chương trình và đưa stdin data vào.

Bạn thử tìm hiểu cách tạo 1 shell rồi từ từ sẽ rõ :3

Phan Hoàng viết 03:13 ngày 01/10/2018

Thường thì bài toán này nên dựng 1 sandbox, sau đó output từ sandbox ra (có thể dùng docker). Chứ làm chung với môi trường của hệ thống, rủi ro bị phá khá cao (kể cả là dùng subprocess luôn).

Bên openedx có hệ thống codejail khá hay, bạn thử cài đặt xem sao:

GitHub

edx/codejail

codejail - Secure code execution

Bài liên quan
0