Intereting Posts

Нужно ли нам проверять, санировать или фильтровать простые числовые суперглобалы (cookie и post)?

Я пишу плагин, в котором хранятся временные данные UNIX в куки-файлы браузера, а также используется переменная $ _POST на основе простой формы, которая отправляет идентификационный номер текущего сообщения WordPress.

После прочтения нескольких статей и сообщений о дезинфекции и валидации в WordPress и PHP я не нашел такой сделки много или вообще с обработкой данных cookie таким образом, хотя я прочитал заявления (на этом самом сайте), похоже, простая переменная $ _POST, установленная программно через скрытое поле, вероятно, не нуждается в проверке или экранировании.

ПЕЧЕНЬЕ

Используя JSON, плагин устанавливает и декодирует три файла cookie, все из которых содержат простые массивы с ключом Post-ID, а значение datetime UNIX – как значение. В дополнение к сравнению друг с другом в условных выражениях иногда иногда преобразуются и отображаются данные.

Теперь, на NetBeans, я получаю сообщение «Do not Access Superglobal COOKIE Array Directly» каждый раз, когда код использует переменную COOKIE, даже когда я просто проверяю, установлено ли это следующим образом:

if (isset($_COOKIE['new_session'])) { //stuff } 

(Да, я знаю, что вы также можете включить $ _SESSION для WordPress, если хотите использовать подключаемый модуль или другой код – я решил против этого маршрута, но мне все же можно было убедить меня передумать, если кто-то даст мне основания для Сделай так!)

Я также получаю предупреждение, когда я извлекаю данные – например, здесь:

 $prev_visit = json_decode( stripslashes( $_COOKIE['prev_visit'] ), true ); 

EDIT: время доступа к UNIX обращается как значение из результирующего массива $prev_visit . Итак, чтобы получить $prev_visit[$id] время, мы используем $prev_visit[$id] , причем $ id является WP Post-ID, полученным прямо или косвенно (во втором случае через переменную $ _POST, как показано ниже) из get_the_ID (), и служит как ключ.

ПОЧТОВАЯ ПЕРЕМЕНА

Что касается данных $ _POST, он создается, как я уже сказал, с помощью простой формы: пользователь нажимает кнопку, скрытый ввод отправляет идентификационный номер WordPress Post в качестве значения «отметьте все прочитанное». Ключевые строки:

 $id = get_the_ID(); 

и в PHP, создающем кнопку / форму:

 $mark-all-read-button .= '<input type="hidden" name="mark-all-read" value="' . $id . '" />'; 

При следующем обновлении (действие добавлено в «init») мы проверяем, установлено ли значение 'mark-all-read' , и, если это так, мы используем $ id для установки ключей для вышеупомянутых файлов cookie [EDIT:] как в более общем примере выше. (Это то, что я подразумевал под «косвенным» использованием идентификатора #, полученного через get_the_ID ().)

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

ВОПРОС

Итак, нужно ли нам проверять и / или дезинфицировать суперглобалы, как указано выше, и если да, то как именно?

Solutions Collecting From Web of "Нужно ли нам проверять, санировать или фильтровать простые числовые суперглобалы (cookie и post)?"

Не прочитав вопрос, как раз из названия, ответ ДА. Любые входные данные из внешнего мира должны быть проверены и дезинфицированы, если это необходимо, и это включает в себя то, что сервер получает тот факт, что он мог быть сгенерирован в форме, которую вы создали, не имеет значения. Входу никогда не следует доверять.

Теперь о внутренней согласованности. После того, как вы уже проверили и обработали поля ввода, вы должны проверить, что данные имеют смысл в контексте, который вы собираетесь обработать. Если вы ожидаете сообщение об отправке сообщения, вам нужно проверить не только то, что он существует, но и что это не страница. Это на самом деле просто еще один аспект проверки … и чем раньше вы это сделаете в своем коде, и более подробно ваше сообщение об ошибке станет проще, чем ваша жизнь будет.

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