Там должен так или иначе избежать этой проблемы безопасности в Lua?

Я использовал функцию «unescape» в Jquery. Вы можете прочитать его в https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/unescape

Функция unescape () вычисляет новую строку, в которой шестнадцатеричные escape-последовательности заменяются символом, который он представляет. Экранирующие последовательности могут быть введены с помощью функции, такой как escape. Обычно decodeURI или decodeURIComponent предпочтительнее unescape.

blockquote>

Пожалуйста, попробуйте это, надеюсь, это поможет. Thnx

var requestURL = 'https://secure.toronto.ca/cc_sr_v1/data/swm_waste_wizard_APR?limit=1000';
  var request = new XMLHttpRequest();
  request.open('GET', requestURL);
  request.responseType = 'json';
  request.send();
  request.onload = function() {
    var data = request.response;
    var title_ = $("

").html(data[0].title).text(); var body_ = $("

").html(data[0].body).text(); //$('#body').append($.parseHTML(unescape(data[0].body))); $('#title').append(title_); $('#body').append(body_); }


Необходимо добавить / добавить данные [i] к элементам. Не установить значение (например, ht)

6
задан Robert Gould 28 November 2008 в 09:11
поделиться

6 ответов

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

См., что Lua Живет Демонстрация для примера игры в песочнице. Источники доступны здесь.

Ваша определенная проблема с таблицами метаданных решена установкой a __metatable поле:

Если Вы устанавливаете a __metatable поле в таблице метаданных, getmetatable возвратит значение этого поля, тогда как setmetatable повысит ошибку.

– Roberto Ierusalimschy, Программирующий в Lua 1-й выпуск, 13.3 - Определенные Библиотекой Метаметоды

Например:

> mt = { __metatable = true }                                                   
> t = {}
> setmetatable(t, mt)
> setmetatable(t, mt)
stdin:1: cannot change a protected metatable
stack traceback:
 [C]: in function 'setmetatable'
 stdin:1: in main chunk
 [C]: ? 

Так, все, что необходимо сделать:

getmetatable("").__metatable = true
8
ответ дан 8 December 2019 в 12:23
поделиться

Если у Вашего хакера есть способность добавить код, и необходимо позволить тому коду называть вещи как os.exit, то Вам в значительной степени не повезло так или иначе.

Можно ограничить функции, которые их код может вызвать, все же. Это зависит от того, что Вы все еще хотите, чтобы пользовательский код смог сделать. См. документ для setfenv и Google для "lua песочница"

6
ответ дан 8 December 2019 в 12:23
поделиться

Эта проблема безопасности обычно иллюстрируется с этим предложением, сказанным "Фордом-Префектом" в блестящих книгах Автостопом по галактике: Это скорее включило быть с другой стороны этого воздухонепроницаемого люка

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

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

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

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

Я не уверен, почему у Вас есть проблема, так как Вы, вероятно, уже знаете о песочницах: можно удалить опасные функции как io.exit, и можно удостовериться, что переопределенные функции - только те, которые в глобальной таблице пользователя, т.е. функции Lua, используемые внутренне приложением, останутся неповрежденными.
В любом случае, если хакер может назвать os.exit непосредственно, факт, в который он может выстрелить сам в ногу путем нагнетания невинной функции, которую он будет использовать позже, его проблема.
Около, это - проблема, только если Вы выполняете функции пользователя на своем сервере, например: если хакер уничтожает свою систему, снова, это - его проблема!
Теперь, существует также проблема распределения опасного кода: Вам решать ограничить питание пользовательских сценариев. В конце концов, это - то, что браузеры делают с JavaScript.

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

Я не вижу возможности переопределить upper как проблема. Способность видеть os.exit проблема.

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

Создание состояний Lua так быстро и легко, это не вызовет проблем.

Другой вещью, которой Вы могли бы остерегаться, являются вечные циклы. При создании 'сторожевого таймера', который уничтожает сценарий после, скажем, 10000 инструкций проводят приблизительно 10 строк кода C. Я могу отправить Вас демонстрационный, если Вам нужно.

1
ответ дан 8 December 2019 в 12:23
поделиться

У меня нет решения (я не использую Lua, я просто интересуюсь им издалека), но что Вы, после назван "песочницей". Google для песочницы Lua, я нашел несколько на вид интересных страниц тем путем. Например: http://lua-users.org/wiki/SandBoxes.

0
ответ дан 8 December 2019 в 12:23
поделиться
Другие вопросы по тегам:

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