Йохоу, всем привет.
Пишу порт проверяющей системы с Windows на FreeBSD. Все вроде бы даже и работает, но возникает вполне закономерный вопрос - а как сделать так, чтобы пользователь не послал на проверку какую-нибудь чушь, которая убьет сервер, или же, например, не занялся читерством по типу доступа к ресурсам, к которым он не должен иметь этот самый доступ.
Поскольку с такими задачами я ранее не сталкивался, то и решения данной проблемы у меня нет.
В голову приходят лишь некоторые идеи:
1) Запуск решений под пользователем, не имеющим доступа к файловой системе, помимо чтения/записи инпута/аутпута.
2) Некий "анализатор" решений на различных языках, запускаемый после процесса компиляции с целью отстранить от тестирования решения, которые, например, вызывают определенные функции, неугодные нам. Возникает ощущение что это как-то не тру, из-за того что "за всем не углядишь" и "лениво для каждого языка писать свое".
3) Каким-то образом отрубить библиотеки, которые, опять же, нам не нужны. В результате у нас не должно скомпилироваться.
4) По горячим следам найдена тема безопасности на Яве, заключающаяся в применении менеджера безопасности и настроек политики.
5) Проводить операции, касающиеся безопасности, не над исходником, а над непосредственно бинарником. Сюда может входить подмена адресов вызываемых функций или чего-то похожего.
Было бы интересно узнать о стандартных подходах в такой ситуации среди Гуру. =) Уверен, что многие из сидящих на этом сайте имели/имеют отношение к написанию проверяющих систем :)
Заранее спасибо!
Пишу порт проверяющей системы с Windows на FreeBSD. Все вроде бы даже и работает, но возникает вполне закономерный вопрос - а как сделать так, чтобы пользователь не послал на проверку какую-нибудь чушь, которая убьет сервер, или же, например, не занялся читерством по типу доступа к ресурсам, к которым он не должен иметь этот самый доступ.
Поскольку с такими задачами я ранее не сталкивался, то и решения данной проблемы у меня нет.
В голову приходят лишь некоторые идеи:
1) Запуск решений под пользователем, не имеющим доступа к файловой системе, помимо чтения/записи инпута/аутпута.
2) Некий "анализатор" решений на различных языках, запускаемый после процесса компиляции с целью отстранить от тестирования решения, которые, например, вызывают определенные функции, неугодные нам. Возникает ощущение что это как-то не тру, из-за того что "за всем не углядишь" и "лениво для каждого языка писать свое".
3) Каким-то образом отрубить библиотеки, которые, опять же, нам не нужны. В результате у нас не должно скомпилироваться.
4) По горячим следам найдена тема безопасности на Яве, заключающаяся в применении менеджера безопасности и настроек политики.
5) Проводить операции, касающиеся безопасности, не над исходником, а над непосредственно бинарником. Сюда может входить подмена адресов вызываемых функций или чего-то похожего.
Было бы интересно узнать о стандартных подходах в такой ситуации среди Гуру. =) Уверен, что многие из сидящих на этом сайте имели/имеют отношение к написанию проверяющих систем :)
Заранее спасибо!