Я не совсем уверен, что вы действительно хотите для вашего окончательного результата. Было бы хорошо, если бы вы опубликовали желаемый результат (даже уменьшенный). В любом случае:
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
мог потенциально быть в действительно большой проблеме если Вы eval()
'd что-то как
<?php
eval("shell_exec(\"rm -rf {$_SERVER['DOCUMENT_ROOT']}\");");
?>
это - экстремальный пример, но это, что случай Ваш сайт просто удалить. надо надеяться, Ваши полномочия не позволили бы его, но, это помогает проиллюстрировать потребность в санитизации и проверках.
не делайте этого.
у них в основном есть доступ к чему-либо, что можно сделать в PHP (осмотрите файловую систему, получите/установите любой вид переменных, открытых соединений с другими машинами вводить код для выполнения, и т.д....),
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.
Если Вы позволяете произвольному коду быть выполненным на Вашем сервере, это больше не Ваш сервер.
Дорогой бог НЕТ. Я съеживаюсь даже в заголовке. Разрешение пользователю выполнить любой вид произвольного кода похоже на передачу сервера им
Я знаю, что люди выше меня уже сказали это. Но верьте мне. Это никогда не достаточно раз, что кто-то может сказать Вам санировать свой вход.
Если Вы действительно, действительно хотите позволить пользователю выполнять некоторый код. Сделайте подмножество к командам доступным для пользователя путем создания своего рода psudo языка, который пользователь может использовать, чтобы сделать это. Алабама путь bbcode или работы скидки с цены.
Если Вы будете надеяться создавать интерпретатор PHP онлайн, то необходимо будет создать фактический интерпретатор REPL и не использовать оценку.
Иначе никогда не выполняйте произвольный пользовательский код. Когда-либо.
Не позволяйте нефильтрованному коду выполняться на Вашем сервере, период.
Если требуется создать инструмент, который допускает интерактивную демонстрацию языка, такого как инструмент, замеченный здесь: http://tryruby.hobix.com/ я работал бы над кодированием sub части языка самостоятельно. Идеально, Вы будете использовать его, чтобы продемонстрировать простые понятия новым программистам, таким образом, это будет не важно, если Вы правильно реализуете все опции.
Путем выполнения этого можно управлять входом с помощью белого списка известного приемлемого входа. Если вход не находится в белом списке, он не выполняется.
Всего наилучшего
Как уже отвечено, необходимо санировать исходные данные. Я предполагаю, что Вы могли использовать некоторый regex-filtring некоторого вида для удаления нежелательных команд, таких как "должностное лицо", и в основном каждая злонамеренная команда PHP должна предложить (или который мог быть использован), и это много.
Существует много вещей, которые Вы могли сказать.. Проблемы не характерны для PHP.
Вот простой ответ:
Любой вход к Вашей машине (или база данных) должен быть санирован.
Фрагмент кода, который Вы отправили в значительной степени, позволяет пользователю выполнить любой код, который они хотят, таким образом, это особенно опасно.
Существует довольно хорошая вводная статья об инжекции кода здесь: