Предотвращение перечисления пользователей: какая логика лучше?

Я запрещаю перечисление пользователей для целей безопасности, чтобы предотвратить выявление имен пользователей при поиске идентификаторов пользователей. Вместо этого всякий раз, когда кто-то пытался узнать имя пользователя по их идентификатору, например, посещение следующего:

http://example.com?author=1 

Он перенаправит их на домашнюю страницу. После поиска я нашел два плагина, которые имеют эту функцию, но оба они используют несколько разные логики, чтобы проверить, пытается ли кто-то перечислить:

Логика №1

 if ( preg_match( '/(wp-comments-post)/', $_SERVER['REQUEST_URI'] ) === 0 && ! empty( $_REQUEST['author'] ) ) { # Redirect to homepage... } 

Логика №2

 if ( ! preg_match( '/(wp-comments-post)/', $_SERVER['REQUEST_URI'] ) && ! empty( $_REQUEST['author'] ) && ( int ) $_REQUEST['author'] ) { # Redirect to homepage... } 

Обе логики работают, но мне интересно, какой из них эффективнее и что они делают по-другому.

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

 # Redirect author page to homepage add_action( 'template_redirect', 'author_page' ); function author_page() { # If the author archive page is being accessed, redirect to homepage if ( is_author() ) { wp_safe_redirect( get_home_url(), 301 ); exit; } } 

Является ли эта функция достаточной для предотвращения перечисления пользователей? Или мне еще нужно применить одну из следующих логик выше?

Solutions Collecting From Web of "Предотвращение перечисления пользователей: какая логика лучше?"

Логика №1 проверяет возвращаемое значение функции preg_match относительно 0 и с оператором === . Это означает, что возвращаемое значение функции preg_match должно быть (int) 0 или (string) 0 . И после этого он проверяет, является ли $_REQUEST['author'] пустым или нет.

И в Logic # 2 проверяется то же самое выше, но с оператором !() (Not). И этот метод также дополнительно проверяет, что $_REQUEST['author'] является integer или нет.

Проверка типа данных $_REQUEST['author'] фактически делает логику №2 лучше, чем выше Логика №1 , я думаю. Причина, хотя тип данных не имеет значения в PHP ( PHP – свободно типизированный язык), но лучше использовать их. Он определяет конкретную базу для вашего приложения и обеспечивает некоторую основную безопасность, а также наилучшую практику.

Надейтесь, что ответ удовлетворит ваш квест.

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

В любом случае я не верю в перенаправление на случайные местоположения (почему на главной странице?). Если вы хотите «отключить» URl, выполните 404 страницы.

… и $_REQUEST является слишком широким и может инициировать перенаправление на запрос ajax и файлы cookie. Вы должны заботиться только о параметре URL, поэтому лучше всего придерживаться $_GET

Если по какой-то причине вы хотите, чтобы ваша безопасность обрабатывалась через официальный плагин с возможностью отключать страницы автора, а также параметры перенаправления 301 307 и целевую страницу, попробуйте …

Отключить страницы авторов

Я сейчас тестирую его на WP версии 4.6.1, и он работает.