Веб-интерфейс, позволяющий клиентам писать и выполнять условные операторы - PullRequest
0 голосов
/ 22 февраля 2020

Я пишу веб-систему, использующую flask с реакцией и избыточностью, для которой необходимо, чтобы веб-клиенты записывали условные операторы, которые можно сохранить в файле конфигурации, но также выполнить в режиме реального времени без перезапуска сервера. или другие услуги. Очевидно, что это можно сделать с помощью eval(), но, очевидно, мы не будем это использовать. Любые безопасные способы запуска пользовательских условий, которые вызывают действующие переменные для выполнения вычислений?

В качестве примера они могут захотеть выполнить стандартные условные вычисления, такие как:

if(a===1 && (b===2 || c===2)){
  //do something
}

Где a, b, c - это значения, которые передаются с сервера на клиент и динамически изменяются.


ОБНОВЛЕНИЕ в зависимости от вопроса:

Сервер предоставляет реальные время обновления сигналов тревоги, отслеживаемых сервером. Когда аварийный сигнал изменяет состояние - скажем, с отсутствия тревоги на тревогу - он отправляет новые данные клиенту. Клиентская сторона отображает эту информацию в виде списка аварийных сигналов. Список может быть отфильтрован достаточно легко, но одна проблема состоит в том, что вы можете иметь событие потока тревоги, когда ~ 1000 сигналов тревоги все приходят одновременно. У вас также есть несколько стандартных / общих событий, в которых определенная серия аварийных сигналов одновременно изменяется на определенное состояние, и это указывает на конкретную проблему / ошибку и, следовательно, конкретное исправление. Каждый пользователь уникален, поэтому он не может быть универсальным подходом для всех, и было бы полезно, если бы каждый пользователь мог установить некоторые базовые правила c, которые определяют, какое сообщение отображать, основываясь на значении любой комбинации сигналов тревоги. и их состояние тревоги. Они будут использовать форму браузера для выбора этих состояний, которые они могут отправлять на сервер. Это вставит строку в их личный файл конфигурации, хранящийся на сервере, чтобы при каждом входе в систему они автоматически имели доступ к этим вычислениям. если аварийный сигнал изменяет состояние, он отправляется клиенту, который затем автоматически выполняет вычисления в фоновом режиме, чтобы определить, нужно ли отображать сообщение.

1 Ответ

0 голосов
/ 23 февраля 2020

Похоже, что лучший подход - разрешить строки, но убедиться, что все строки анализируются с помощью супер хорошо сконструированной функции для удаления чего-либо вредоносного. Я, вероятно, буду запускать эту функцию много раз - сначала при отправке, а также перед выполнением. Если эти функции разработаны с использованием интерактивных GUI раскрывающихся кнопок и полей автозаполнения, которые создают код для пользователя (т. Е. Пользователь фактически не пишет код), это должно быть достаточно безопасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...