Вчера я поделился сообщением о том, как использовать, wp_remote_getно не указал альтернативную функцию: wp_safe_remote_get. Первоначальная цель состояла в том, чтобы использовать первый пост, чтобы показать:
- Что исходная функция принимает,
- Как использовать оригинальную функцию,
- Что возвращает исходная функция,
- Как выглядит реализация make.
И тогда я собирался взглянуть на wp_safe_remote_get. Но есть проблема: у меня есть умные друзья. Вскоре после того, как я опубликовал пост, я получил ответ от Роя :
Спасибо, Рой! (Обязательно скажите ему «Привет!». 🙂
А если серьезно, то продолжение вчерашнего поста именно такое: wp_safe_remote_get. И как определить разницу между двумя функциями и когда вы будете использовать одну вместо другой.
wp_safe_remote_get
Прямо из документов API мы узнаем :
Эта функция идеальна, когда HTTP-запрос отправляется на произвольный URL-адрес. URL-адрес проверяется, чтобы избежать перенаправления и подделки запросов.
Как и его аналог, он принимает URL-адрес и ряд аргументов, которые могут указывать, как выполняется запрос.
Кроме того, как и wp_remote_get, он также возвращает массив данных ответа или экземпляр, WP_Errorесли запрос не выполнен.
Использование этой функции ничем не отличается от использования предыдущей, но возникает вопрос:
Когда мы используем одно вместо другого? В частности, когда мы используем wp_remote_getвместо wp_safe_remote_get?
Прочитайте источник
Когда вы сталкиваетесь с такой ситуацией, первое, что лучше всего сделать, это прочитать исходный текст:
Если вы прочитаете приведенные выше ссылки, вы заметите, что последний отклоняет «небезопасные URL-адреса», которые определяются wp_http_validate_url с помощью серии расширенных проверок.
Но все же, что я использую?
Это по-прежнему оставляет вопрос без ответа, не так ли? Я думаю, что легко сделать общее заявление о том, что вы всегда должны использовать wp_safe_remote_get (или wp_safe_remote_post, если уж на то пошло).
Хотя все проекты разные.
Например, если вы работаете над подключаемым модулем, который будет использоваться только во внутренней сети, и у вас есть контроль, скажем, над белым списком URL-адресов, которые могут быть переданы в функцию, то вы можете использовать первый вариант.
Однако, если вы предоставляете последнюю пользователям, всегда используйте безопасную версию функции.
Короче говоря
Мое эмпирическое правило таково (и оно похоже на санитарную обработку):
Если пользователи будут взаимодействовать с функцией, убедитесь, что они взаимодействуют с максимально безопасной версией кода.
В противном случае слишком многое находится под угрозой.