PHP: разъяснение по очистке json $ _POST - PullRequest
0 голосов
/ 15 декабря 2018

После того, как пользователь отправил сообщение формы, я по сути делаю это: Очистите JSON с помощью php , чтобы очистить мой ввод json_decoded.

json_decode создает объект, который я передаю пользовательскому методу класса:

$body = json_decode($_POST['body']);
$form_id = $_POST['form_id'];

$errors = $this->validate_form( $form_id, $body, $options ); 

В $ this-> validate_form я немедленно выполняю валидацию аналогично решениям в ссылке выше.

Есть ли пробел в безопасности при назначении декодированных json, form_id переменным во время выполнения и последующей передаче этих значений в пользовательский метод, даже если первым делом после них выполняется санация?

Т.е. есть ли какой-нибудь эксплойт, такой как причудливый json-кодированный call_user_func и т. Д., Который можно реализовать здесь, просто передавая значения / сохраняя значения времени выполнения?

edit: (также просто чтобы уточнить, я неделать что-то явно ужасное после того, как call_user_func($form_id);)

1 Ответ

0 голосов
/ 15 декабря 2018

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

Некоторыми примерами опасных операций являются eval() (выполняет произвольный код), * ​​1005 * (гдеимя функции происходит из пользовательского ввода), extract() (создает переменные из массива) и вставляет параметры в строки запросов SQL (используйте параметризованные запросы для предотвращения SQL-инъекций).Вы также можете столкнуться с проблемами XSS, если включите пользовательский ввод в вывод HTML без его очистки или кодирования.

...