Что использовать в качестве array_import / var_import для сортировки экспортируемого массива? - PullRequest
2 голосов
/ 03 мая 2011

У меня есть строка. Это строка, отправленная пользователем. (И вы никогда не должны доверять тому, что пользователь отправил.)

Если в строке существуют определенные (не небезопасные) символы, она должна стать многомерным массивом / деревом. Сначала я попробовал сплиты, регулярные выражения и циклы. Слишком трудно. Я нашел очень простое решение с несколькими простыми str_replace, и в результате получается строка , которая выглядит как определение массива. Например:

array('body', array('div', array('x'), array(), array('')), array(array('oele')))

Это глупый массив, но его очень легко создать. Теперь эта строка должна стать этим массивом. Я использую eval() для этого, и мне это не нравится. Так как он отправлен пользователем (и должен иметь возможность содержать что угодно), в этой строке могут быть любые вызовы функций.

Итак, вопрос на миллион долларов: существует ли какой-нибудь var_import или array_import, который создает массив из строки и ничего больше не делает (как таинственные, опасные вызовы exec и т. Д.) )

Да, я пробовал php.net, и ни одна из вышеперечисленных _import функций не существует.

То, что я ищу, является полной противоположностью var_import, потому что строка, которую я имею в качестве входных данных, выглядит точно так же, как строка var_export выведет.

Любые другие предложения, чтобы сделать его более безопасным, чем eval, также приветствуются! Но я не отказываюсь от текущего метода (он слишком прост).

1 Ответ

0 голосов
/ 07 мая 2011

Использование

array('body', array('div', array('x'), array(), array('')), array(array('oele')))

в качестве входных данных, я заменил некоторые символы, чтобы сделать ее допустимой строкой JSON, и импортировал ее через json_decode.

Работает отлично. Если присутствуют некоторые недопустимые символы, json_decode сработает над ними (и не выполнит никакого опасного кода).

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