Каковы проблемы безопасности оценки пользовательского кода?

Я не совсем уверен, что вы действительно хотите для вашего окончательного результата. Было бы хорошо, если бы вы опубликовали желаемый результат (даже уменьшенный). В любом случае:

library(magrittr)

from_kafka = '{"eventTime":1547831236883,"ticker":{"AAPL":{"lastTrade":146.92,"totalVolume":309985.0},"DBC":{"lastTrade":14.82,"totalVolume":7366.0},"JPM":{"lastTrade":99.56,"totalVolume":63695.0},"JNJ":{"lastTrade":127.21,"totalVolume":24515.0},"MRK":{"lastTrade":75.52,"totalVolume":41928.0},"PFE":{"lastTrade":42.57,"totalVolume":87949.0}}}'

row_raw <- jsonlite::fromJSON(from_kafka, flatten = T)

res <- row_raw %>%
  unlist %>% 
  t %>% 
  as.data.frame(., stringsAsFalse = T)

# if you wish to remove "ticker" from the df col names...
names(res) <- gsub(x = names(res), pattern = "^ticker\\.", "")

Результат:

> res
     eventTime AAPL.lastTrade AAPL.totalVolume DBC.lastTrade
1 1.547831e+12         146.92           309985         14.82
  DBC.totalVolume JPM.lastTrade JPM.totalVolume JNJ.lastTrade
1            7366         99.56           63695        127.21
  JNJ.totalVolume MRK.lastTrade MRK.totalVolume PFE.lastTrade
1           24515         75.52           41928         42.57
  PFE.totalVolume
1           87949
5
задан Community 23 May 2017 в 12:15
поделиться

9 ответов

мог потенциально быть в действительно большой проблеме если Вы eval()'d что-то как

<?php
   eval("shell_exec(\"rm -rf {$_SERVER['DOCUMENT_ROOT']}\");");
?>

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

5
ответ дан 18 December 2019 в 05:17
поделиться

не делайте этого.

у них в основном есть доступ к чему-либо, что можно сделать в PHP (осмотрите файловую систему, получите/установите любой вид переменных, открытых соединений с другими машинами вводить код для выполнения, и т.д....),

18
ответ дан 18 December 2019 в 05:17
поделиться

The eval() function is hard to sanitize and even if you did there would surely be a way around it. Even if you filtered exec, all you need to do is to somehow glue the string exec into a variable, and then do $variable(). You'd need to really cripple the language to achieve at least some sort of imaginary security.

6
ответ дан 18 December 2019 в 05:17
поделиться

Если Вы позволяете произвольному коду быть выполненным на Вашем сервере, это больше не Ваш сервер.

4
ответ дан 18 December 2019 в 05:17
поделиться

Дорогой бог НЕТ. Я съеживаюсь даже в заголовке. Разрешение пользователю выполнить любой вид произвольного кода похоже на передачу сервера им

Я знаю, что люди выше меня уже сказали это. Но верьте мне. Это никогда не достаточно раз, что кто-то может сказать Вам санировать свой вход.

Если Вы действительно, действительно хотите позволить пользователю выполнять некоторый код. Сделайте подмножество к командам доступным для пользователя путем создания своего рода psudo языка, который пользователь может использовать, чтобы сделать это. Алабама путь bbcode или работы скидки с цены.

3
ответ дан 18 December 2019 в 05:17
поделиться

Если Вы будете надеяться создавать интерпретатор PHP онлайн, то необходимо будет создать фактический интерпретатор REPL и не использовать оценку.

Иначе никогда не выполняйте произвольный пользовательский код. Когда-либо.

3
ответ дан 18 December 2019 в 05:17
поделиться

Не позволяйте нефильтрованному коду выполняться на Вашем сервере, период.

Если требуется создать инструмент, который допускает интерактивную демонстрацию языка, такого как инструмент, замеченный здесь: http://tryruby.hobix.com/ я работал бы над кодированием sub части языка самостоятельно. Идеально, Вы будете использовать его, чтобы продемонстрировать простые понятия новым программистам, таким образом, это будет не важно, если Вы правильно реализуете все опции.

Путем выполнения этого можно управлять входом с помощью белого списка известного приемлемого входа. Если вход не находится в белом списке, он не выполняется.

Всего наилучшего

2
ответ дан 18 December 2019 в 05:17
поделиться

Как уже отвечено, необходимо санировать исходные данные. Я предполагаю, что Вы могли использовать некоторый regex-filtring некоторого вида для удаления нежелательных команд, таких как "должностное лицо", и в основном каждая злонамеренная команда PHP должна предложить (или который мог быть использован), и это много.

-1
ответ дан 18 December 2019 в 05:17
поделиться

Существует много вещей, которые Вы могли сказать.. Проблемы не характерны для PHP.

Вот простой ответ:

Любой вход к Вашей машине (или база данных) должен быть санирован.

Фрагмент кода, который Вы отправили в значительной степени, позволяет пользователю выполнить любой код, который они хотят, таким образом, это особенно опасно.

Существует довольно хорошая вводная статья об инжекции кода здесь:

Википедия на инжекции кода.

4
ответ дан 18 December 2019 в 05:17
поделиться
Другие вопросы по тегам:

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