301 переспрямування на сторінку 404 або встановлення коду статусу на 404 і залишитися на сторінці?


9

На моєму веб-сайті є ряд сторінок, на які доступні та доступні лише адміністратори, якщо значення запиту, якщо їх знайдено та правильно встановлено, надається лише адміністраторам. Наприклад:

http://www.mydomain.com/show-daily-statistics?key=abc


Наведене вище посилання відображатиме вміст сторінки, але нічого іншого, як наведено нижче, не буде:

http://www.mydomain.com/show-daily-statistics


Тепер я думав про те, що робити, якщо пошукові системи та / або користувачі, які не є адміністратором, якимось чином приземляться на ці приховані сторінки.

Звичайно, я можу або змінити код статусу сторінки на 404, або 301 переспрямувати на:

http://www.mydomain.com/404-error


Що найкраще рішення щодо Google та SEO?


6
Я б замість цього застосував справжню автентифікацію, якщо інформація, яку ви намагаєтесь приховати, взагалі має якесь значення. Крім того, перенаправлення 301 семантично вказує на те, що зміст перемістився, що тут не так, і тому це невідповідна відповідь.
Ви

Відповіді:


11

Правильний код буде 401 Не авторизовано

Відповідно до специфікацій HTTP

10.4.2 401 Несанкціоновано

У запиті потрібна автентифікація користувача. Відповідь ОБОВ'ЯЗКОВО включатиме поле заголовка WWW-Authenticate (розділ 14.47), що містить виклик, застосовний до запитуваного ресурсу. Клієнт МОЖЕ повторити запит у відповідному полі заголовка Авторизація (розділ 14.8). Якщо запит вже включав облікові дані авторизації, відповідь 401 вказує на те, що авторизація відхилена для цих даних. Якщо відповідь 401 містить такий самий виклик, що і попередня відповідь, і користувальницький агент вже намагався перевірити автентифікацію хоча б один раз, тоді користувачеві ПОТРІБНО представити сутність, яку було надано у відповіді, оскільки ця сутність може містити відповідну діагностичну інформацію. Автентифікація доступу до HTTP пояснюється у розділі "Підтвердження HTTP: основна та дайджест аутентифікації" [43].

або альтернативно

10.4.4 403 Заборонено

Сервер зрозумів запит, але відмовляється його виконувати. Авторизація не допоможе, і запит НЕ повинен повторюватися. Якщо метод запиту не був HEAD і сервер бажає оприлюднити, чому запит не був виконаний, він ДОЛЖЕН описувати причину відмови в організації. Якщо сервер не бажає надавати цю інформацію клієнту, замість цього може використовуватися код статусу 404 (Не знайдено).

І те й інше семантично правильніше, ніж 404. Ресурс існує 404не так правильно. 401має бути правильним, але ви не потребуєте автентифікації. Безпека від невідомості - це не безпека. 403також правильно, оскільки запит розуміється, ресурс існує, він просто відмовляється обслуговувати запит. 404підходить, якщо ви не хочете розкривати, чому 403це відбувається.

У будь-якому випадку 301переадресації не підходять, ресурс не перемістився.


2
Google не проводить індексацію та видаляє сторінки, що повертають повідомлення про статус 401/403, подібне питання було задано ще раз назад, або ви завжди можете використовувати простий noindex та блокувати за допомогою robots.txt
Simon Hayter

1
@ WPRookie82 Про захист сторінки, зберігаючи її в таємниці - ви робите це неправильно.
Cthulhu

4
безпека від невідомості зовсім не є безпекою

1
Використання 401 для методів аутентифікації, відмінних від HTTP Basic або Digest auth (або інших схем аутентифікації, сумісних з RFC2617), тут вже обговорювалося раніше ; Моя думка на той час, яку я все ще стояв, полягає в тому, що це може працювати на практиці, але це не дійсно відповідно до специфікації HTTP, і що в будь-якому випадку, 403 або навіть 404 було б кращим.
Ільмарі Каронен

1
Я погоджуюся з іншими коментарями про те, що 401 Несанкціоноване є недоцільним згідно зі специфікацією HTTP.
Стівен Остерміллер

1

Оскільки це сторінка для адміністраторів, з параметром «ключ» або без нього, сторінки не можуть і не повинні індексуватися. Тому веб-сторінка для не-адміністратора може надіслати 404 код статусу, а ви можете залишити ту саму URL-адресу неушкодженою. Не переспрямовуйте, оскільки ви повідомляєте Google, що сторінка перейшла, але потім на сторінку, яка не існує.

Так це робить і Google. Подивіться, що станеться, коли ви переходите на манекенову сторінку: http://www.google.com/analytics/asdsas


Існує одна невелика поправка до моєї вище публікації, http://www.example.com/404-errorце свого роду глобальна сторінка 404 усього веб-сайту, тому я не можу переадресовувати на неіснуючу сторінку.
WPRookie82

@ WPRookie82: Що стосується будь-кого, окрім вас та вашого веб-сервера, немає різниці між неіснуючою сторінкою та існуючою сторінкою, яка повертає відповідь 404.
Ільмарі Каронен

1

Семантично правильний код відповіді HTTP для цієї ситуації буде 403 Заборонено :

Сервер зрозумів запит, але відмовляється його виконувати. Авторизація не допоможе, і запит НЕ повинен повторюватися. Якщо метод запиту не був HEAD і сервер бажає оприлюднити, чому запит не був виконаний, він ДОЛЖЕН описувати причину відмови в організації. Якщо сервер не бажає надавати цю інформацію клієнту, замість цього може використовуватися код статусу 404 (Не знайдено).

(Хоча визначення відповіді 403 говорить про те, що "авторизація не допоможе", під IMO це слід розуміти як посилання на специфічну автентифікацію HTTP Basic / Digest , для якої слід використовувати код стану 401 Несанкціонований . Оскільки ви не використовуєте будь-який із цих методів аутентифікації, 403 - це відповідний код статусу у вашому випадку.)


Однак, використовуючи код 403 стану показує (або принаймні сильно має на увазі) той факт , що це сторінка з цим URL, навіть якщо сервер відмовляється доставити його. Оскільки це щось, що ви хочете приховати від потенційних зловмисників, стандарт HTTP / 1.1 явно дозволяє замість цього повернути код статусу 404 Not Found ( мій акцент ):

Сервер не знайшов нічого, що відповідає Request-URI. Не вказується, чи є стан тимчасовим чи постійним. Код стану 410 (Зникло) ПОТРІБНО використовуватись, якщо сервер через якийсь внутрішньо налаштований механізм знає, що старий ресурс постійно недоступний і не має адреси переадресації. Цей код статусу зазвичай використовується, коли сервер не бажає виявити, чому саме в запиті відхилено, або коли інша відповідь не застосовується.

Звичайно, щоб зробити таке приховування взагалі ефективним, сторінка з помилками 404, яку ви повертаєте, повинна виглядати ідентично тому, що ви повертаєте на фактично неіснуючі сторінки. В іншому випадку це лише обдурить найбезглуздіших і найбільш випадкових нападників. (Якщо ваша мета - просто утримати сторінки поза індексом Google, відповідь 403 зробить це так само добре.)


Як щодо інших можливих відповідей, запропонованих у вашому запитанні, та інших відповідей?

Як я вже зазначав, я не вірю, що відповідь 401 тут доречна. Це може спрацювати на практиці, якщо більшість браузерів та пошукових систем будуть ставитись до будь-якого неправильного або невпізнаного коду відповіді серії 4 xx так, як якщо б це був 404, але він все ще не дійсний відповідно до специфікації HTTP, і немає жодної практичної причини віддати перевагу цьому понад 403 або 404.

Що стосується використання переадресації 301 (або 302) на окрему сторінку "404 помилка", це жахлива практика, поширена неохайними навчальними посібниками mod_rewrite, і не має абсолютно ніяких функцій викупу в порівнянні з поверненням відповіді 404 безпосередньо:

  • Для відвідувачів це заплутано, оскільки URL-адреса, яку вони намагалися відвідати, замінюється URL-адресою сторінки помилок. Таким чином, вони бачать повідомлення про те, що вони дійшли до неіснуючої сторінки, але не було легко помітного вказівки на те, якою була сторінка, яку вони намагалися відвідати, і тому не можуть легко спробувати будь-які стратегії відновлення, такі як виправлення явних помилок в URL-адресі, або скопіюйте та вставте його в Google або на Wayback Machine.

  • Це може заплутати пошукові системи, особливо якщо ваша сторінка 404 заборонена в robots.txt або якщо вона неправильно повертає відповідь на 200 ОК замість реального коду статусу 404 ( "soft 404" ), що може спричинити появу вашої сторінки 404 у пошуку результати для випадкових пошукових термінів.

  • Це спричиняє (невелику кількість) додаткове навантаження на ваші сервери, збільшує час відгуку відвідувачів і потенційно сповільнює пошукові системи, що сканують ваш сайт, оскільки кожен запит на неіснуючу (або приховану) сторінку тепер включає додатковий HTTP-раунд, поїздка.

  • Це не має ніякої користі для SEO, оскільки будь-який "сік для посилань" зі сторінок, перенаправлених на сторінку 404, втрачається в будь-якому випадку.

(Звичайно, одна ситуації , коли ви робите хоче використовувати 301 редирект замість 404 відповіді , коли сторінка фактично була переміщена, і ви можете перенаправити відвідувач на правильне місце. Але це не той випадок обговорюється тут.)


Нарешті, я хотів би повторити почуття, висловлені в багатьох коментарях тут, що просто "приховування" сторінок вашого адміністратора, як це, не є адекватною заміною правильної автентифікації на основі пароля . Однак, якщо у вас вже створена захищена система аутентифікації, приховування сторінок може бути корисним як додатковий шар, хоч і досить слабкий, як захист у глибині підходу.


Я нарешті вирішив обрати те, що ви запропонували у другій частині. Хто потрапить на сторінку без дійсного ключа, він побачить мою звичайну сторінку 404, і я, звичайно, повертаю код статусу 404 у процесі.
WPRookie82

1

Я б використав noindex,nofollow,noarchiveтег у заголовку сторінок, на яких ви хочете вийти з пошуку.

Я виявив, що noarchiveтег, як правило, досить швидко витягує речі з пошуку, тоді як noindexможе зупинити його в пошуку, але якщо його вже там, то вам потрібно вимити його з результатів пошуку.

Щодо питання доступу адміністратора, інші хлопці тут уже давали поради щодо безпеки, які рекомендую перевірити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.