Разрешение пользователям загрузить сценарии Python для выполнения

В правиле дизъюнкции есть ошибка. Далее, правило перестановки является структурным правилом:

G, A, B, D |- C
---------------
G, B, A, D |- C

И вы должны закодировать его, чтобы оно не зацикливалось. Но сейчас это точно может произойти. Есть простой трюк, может быть, вы хотели его реализовать, только поменять местами неатомы.

Вот исправленная версия:

:- use_module(library(basic/lists)).

sc([neg(A)|L],R) :- !, sc(L,[A|R]).
sc(L,[neg(A)|R]) :- !, sc([A|L],R).
sc(L,[or(A,B)|R]) :- !, sc(L,[A,B|R]).
sc([or(A,B)|L],R) :- !, sc([A|L],R), sc([B|L],R).
sc([A|L],R) :- atom(A), select(B,L,H), compound(B), !, sc([B,A|H],R).
sc(L,[A|R]) :- atom(A), select(B,R,H), compound(B), !, sc(L,[B,A|H]).
sc(L,R) :- member(A,L), member(A,R), !.

И вот несколько прогонов:

Jekejeke Prolog 3, Runtime Library 1.3.5
(c) 1985-2019, XLOG Technologies GmbH, Switzerland

?- sc([],[neg(or(neg(p),neg(neg(p))))]).
No
?- sc([],[or(neg(p),neg(neg(p)))]).
Yes

Замечания: я переместил правило идентификации до конца, поэтому оно будет только ударить атомы. Я поместил разрезы, что оправдано некоторыми леммами обращения для классической логики. Может не работать для других логик или когда возникают неосновательные проблемы.

12
задан AlbertoPL 4 May 2009 в 00:20
поделиться

6 ответов

Иметь обширный API для пользователей и отключать все другие вызовы при загрузке (например, операторы импорта). Кроме того, удалите все, что связано с вводом-выводом файлов.

(Вы можете выполнить несколько проходов, чтобы ничего не пропустить.)

0
ответ дан 2 December 2019 в 06:27
поделиться

Using PyPy you can create a python sandbox. The sandbox is a separate and supposedly secure python environment where you can execute their scripts. More info here

http://codespeak.net/pypy/dist/pypy/doc/sandbox.html

"In theory it's impossible to do anything bad or read a random file on the machine from this prompt."

"This is safe to do even if script.py comes from some random untrusted source, e.g. if it is done by an HTTP server."

8
ответ дан 2 December 2019 в 06:27
поделиться

I am in no way associated with this site and I'm only linking it because it tries to achieve what you are getting after: jailing of python. The site is code pad.

According to the about page it is ran under geordi and traps all sys calls with ptrace. In addition to be chroot'ed they are on a virtual machine with firewalls in place to disallow outbound connections.

Consider it a starting point but I do have to chime in on the whole danger thing. Gotta CYA myself. :)

8
ответ дан 2 December 2019 в 06:27
поделиться

Наряду с другими мерами предосторожности, вы также можете включить обзор кода человеком. Предполагая, что часть опыта рассматривает решения других участников, и каждый является разработчиком Python, не позволяйте активировать новый код, пока за него не проголосует определенное количество участников. Ваши пользователи не собираются утверждать вредоносный код.

4
ответ дан 2 December 2019 в 06:27
поделиться

Yes.

Allow them to script their client, not your server.

3
ответ дан 2 December 2019 в 06:27
поделиться

PyPy, вероятно, является приличной ставкой на стороне сервера, как и предлагалось, но я хотел бы рассмотреть вопрос о том, чтобы ваш бэкэнд Python предоставлял хорошо определенные API и форматы данных, и чтобы пользователи реализовывали AI и логику в Javascript, чтобы он мог работать в их браузере. Таким образом, взаимодействие будет выглядеть следующим образом: для каждого совпадения / поворота / и т. Д. Передайте данные в браузер в четко определенном формате, предоставьте шаблон javascript, который получает данные и может реализовывать логику, и предоставлять веб-API, которые могут вызываться клиентом (браузер), чтобы принять необходимые действия. Таким образом, вам не нужно беспокоиться о безопасности или мощности сервера.

1
ответ дан 2 December 2019 в 06:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: