301 mengalihkan ke 404 halaman atau mengatur kode status ke 404 dan tetap di halaman?

9

Saya memiliki sejumlah halaman di situs web saya yang hanya dapat diakses oleh administrator dan akses ke halaman-halaman ini diberikan jika nilai querystring jika ditemukan dan ditetapkan dengan benar. Sebagai contoh:

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


Tautan di atas akan menampilkan konten halaman tetapi hal lain seperti di bawah tidak akan:

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


Sekarang saya berpikir tentang apa yang harus dilakukan jika mesin pencari dan / atau pengguna non-admin entah bagaimana mendarat di halaman tersembunyi ini.

Tentu saja saya bisa mengubah kode status halaman menjadi 404 atau 301 redirect ke:

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


Apa solusi terbaik untuk Google dan SEO?

WPRookie82
sumber
6
Saya akan mempertimbangkan menerapkan otentikasi yang sebenarnya, jika informasi yang Anda coba sembunyikan sama pentingnya. Selain itu, 301 redirect secara semantik menunjukkan bahwa konten telah pindah yang tidak terjadi di sini dan karenanya merupakan respons yang tidak pantas.
Anda

Jawaban:

11

Kode yang benar adalah 401 Tidak Diotorisasi

Sesuai spesifikasi HTTP

10.4.2 401 Tidak Resmi

Permintaan membutuhkan otentikasi pengguna. Respons tersebut HARUS menyertakan bidang tajuk WWW-Otentikasi (bagian 14.47) yang berisi tantangan yang berlaku untuk sumber daya yang diminta. Klien MUNGKIN mengulangi permintaan dengan bidang tajuk Otorisasi yang sesuai (bagian 14.8). Jika permintaan sudah menyertakan kredensial Otorisasi, maka respons 401 menunjukkan bahwa otorisasi telah ditolak untuk kredensial tersebut. Jika respons 401 berisi tantangan yang sama dengan respons sebelumnya, dan agen pengguna telah mencoba otentikasi setidaknya satu kali, maka pengguna HARUS disajikan entitas yang diberikan dalam respons, karena entitas itu mungkin menyertakan informasi diagnostik yang relevan. Otentikasi akses HTTP dijelaskan dalam "Otentikasi HTTP: Otentikasi Dasar dan Akses Intisari" [43].

atau sebagai alternatif

10.4.4 403 Dilarang

Server mengerti permintaan itu, tetapi menolak untuk memenuhinya. Otorisasi tidak akan membantu dan permintaan TIDAK HARUS diulang. Jika metode permintaan itu bukan KEPALA dan server ingin mengumumkan kepada publik mengapa permintaan itu belum terpenuhi, itu HARUS menggambarkan alasan penolakan di entitas. Jika server tidak ingin membuat informasi ini tersedia untuk klien, kode status 404 (Tidak Ditemukan) dapat digunakan sebagai gantinya.

Keduanya secara semantik lebih benar daripada 404. Sumber daya ada sehingga 404tidak benar. 401harus benar, tetapi Anda tidak memerlukan otentikasi. Keamanan oleh ketidakjelasan bukanlah keamanan. 403juga benar karena permintaan dipahami, sumber daya yang ada itu hanya menolak untuk melayani permintaan. 404sesuai jika Anda tidak ingin mengungkapkan mengapa 403ini terjadi.

Dalam kasus apa pun 301pengalihan tidak sesuai, sumber daya tidak bergerak.


sumber
2
Google tidak mengindeks dan menghapus halaman yang mengembalikan 401/403 pesan status, pertanyaan serupa ditanyakan kembali beberapa kali atau Anda selalu dapat menggunakan noindex sederhana dan memblokir menggunakan robots.txt
Simon Hayter
1
@ WPRookie82 Tentang melindungi halaman dengan merahasiakannya - Anda salah melakukannya.
Cthulhu
4
keamanan oleh ketidakjelasan sama sekali bukan keamanan
1
Penggunaan 401 untuk metode otentikasi selain dari HTTP Basic atau Digest auth (atau skema auth kompatibel RFC2617 lainnya) telah dibahas di sini sebelumnya ; Pendapat saya pada saat itu, yang masih saya pertahankan, adalah bahwa hal itu mungkin berhasil dalam praktiknya, tetapi itu tidak benar-benar valid sesuai dengan spesifikasi HTTP, dan dalam hal apa pun, 403 atau bahkan 404 akan lebih disukai.
Ilmari Karonen
1
Saya setuju dengan komentar lain bahwa 401 Tidak Sah tidak sesuai dengan spesifikasi HTTP.
Stephen Ostermiller
1

Karena ini adalah halaman untuk administrator, dengan atau tanpa parameter "kunci", halaman tidak dapat dan tidak boleh diindeks. Oleh karena itu halaman web untuk non-admin dapat mengirim 404 kode status, dan Anda dapat membiarkan URL yang sama tetap utuh. Jangan mengalihkan, karena Anda memberi tahu Google bahwa halaman telah dipindahkan, tetapi kemudian ke halaman yang tidak ada.

Inilah cara Google melakukannya juga. Lihat apa yang terjadi ketika Anda membuka halaman dummy: http://www.google.com/analytics/asdsas

dm-cowok
sumber
Ada satu koreksi kecil untuk posting saya di atas, http://www.example.com/404-errorada, itu adalah semacam halaman global 404 dari seluruh situs web sehingga saya tidak akan diarahkan ke halaman yang tidak keluar.
WPRookie82
@ WPRookie82: Sejauh menyangkut siapa pun kecuali Anda dan server web Anda, tidak ada perbedaan antara halaman yang tidak ada dan halaman yang sudah ada yang mengembalikan respons 404.
Ilmari Karonen
1

Kode respons HTTP yang semantik benar untuk situasi ini adalah 403 Forbidden :

Server mengerti permintaan itu, tetapi menolak untuk memenuhinya. Otorisasi tidak akan membantu dan permintaan TIDAK HARUS diulang. Jika metode permintaan itu bukan KEPALA dan server ingin mengumumkan kepada publik mengapa permintaan itu belum terpenuhi, itu HARUS menggambarkan alasan penolakan di entitas. Jika server tidak ingin membuat informasi ini tersedia untuk klien, kode status 404 (Tidak Ditemukan) dapat digunakan sebagai gantinya.

(Meskipun definisi dari respons 403 mengatakan bahwa "otorisasi tidak akan membantu", IMO ini harus dipahami sebagai merujuk secara khusus ke otentikasi HTTP Basic / Digest , di mana kode status 401 yang tidak sah harus digunakan sebagai gantinya. Karena Anda tidak menggunakan salah satu dari metode otentikasi tersebut, 403 adalah kode status yang sesuai dalam kasus Anda.)


Namun, dengan menggunakan kode status 403 mengungkapkan (atau setidaknya sangat menyiratkan) fakta bahwa ada adalah halaman dengan URL yang, meskipun server menolak untuk menyampaikan hal itu. Karena ini adalah sesuatu yang Anda mungkin ingin sembunyikan dari pengganggu potensial, standar HTTP / 1.1 secara eksplisit memungkinkan kode status 404 Tidak Ditemukan dikembalikan sebagai gantinya ( penekanan milik saya):

Server belum menemukan sesuatu yang cocok dengan Permintaan-URI. Tidak ada indikasi yang diberikan apakah kondisinya sementara atau permanen. Kode status 410 (Hilang) HARUS digunakan jika server mengetahui, melalui beberapa mekanisme yang dapat dikonfigurasi secara internal, bahwa sumber daya lama tidak tersedia secara permanen dan tidak memiliki alamat penerusan. Kode status ini biasanya digunakan ketika server tidak ingin mengungkapkan dengan tepat mengapa permintaan ditolak, atau ketika tidak ada respons lain yang berlaku.

Tentu saja, untuk membuat penyembunyian seperti itu sama sekali efektif, halaman kesalahan 404 yang Anda kembalikan harus tampak sama dengan apa yang Anda kembalikan untuk halaman yang sebenarnya tidak ada. Kalau tidak, itu hanya akan menipu penyerang paling bodoh dan paling kasual. (Jika tujuan Anda hanya untuk menjaga halaman dari indeks Google, respons 403 juga akan melakukannya.)


Bagaimana dengan kemungkinan tanggapan lain yang disarankan dalam pertanyaan Anda dan jawaban lainnya?

Seperti yang saya sebutkan sebelumnya, saya tidak percaya bahwa respons 401 sesuai di sini. Ini mungkin bekerja dalam praktik, sejauh sebagian besar browser dan mesin pencari akan memperlakukan kode respons 4 xx seri salah format atau tidak dikenal seolah-olah itu adalah 404, tetapi itu masih tidak valid sesuai dengan spesifikasi HTTP, dan tidak ada alasan praktis untuk lebih menyukainya lebih dari 403 atau 404.

Mengenai penggunaan 301 (atau 302) redirect ke halaman "404 error" yang terpisah, itu adalah praktik yang mengerikan yang disebarkan oleh tutorial mod_rewrite yang ceroboh, dan sama sekali tidak memiliki fitur penukaran dibandingkan dengan mengembalikan respons 404 secara langsung:

  • Ini membingungkan pengunjung, karena URL yang mereka coba kunjungi diganti dengan URL halaman kesalahan. Dengan demikian, mereka melihat pesan yang mengatakan bahwa mereka telah mencapai halaman yang tidak ada, tetapi tidak ada indikasi yang mudah terlihat dari apa halaman yang mereka coba kunjungi, dan karena itu tidak dapat dengan mudah mencoba strategi pemulihan seperti memperbaiki kesalahan ketik yang jelas di URL, atau salin dan tempel ke Google atau Wayback Machine.

  • Ini dapat membingungkan mesin pencari, terutama jika halaman 404 Anda tidak diijinkan di robots.txt , atau jika itu salah mengembalikan 200 respons OK daripada kode status 404 nyata ( "soft 404" ), berpotensi menyebabkan halaman 404 Anda muncul di pencarian hasil untuk istilah pencarian acak.

  • Ini menyebabkan (sejumlah kecil) beban tambahan pada server Anda, meningkatkan waktu respons kepada pengunjung dan berpotensi memperlambat mesin pencari merayapi situs Anda, karena setiap permintaan untuk halaman yang tidak ada (atau disembunyikan) sekarang melibatkan putaran HTTP tambahan- perjalanan.

  • Ini tidak memiliki manfaat SEO, karena "jus tautan" dari halaman yang dialihkan ke halaman 404 tetap hilang.

(Tentu saja, salah satu situasi di mana Anda lakukan ingin menggunakan 301 redirect bukan respon 404 adalah ketika halaman sebenarnya telah pindah, dan Anda dapat mengarahkan pengunjung ke lokasi yang benar. Tapi itu tidak terjadi dibahas di sini.)


Akhirnya, saya ingin menggemakan sentimen, yang diungkapkan dalam banyak komentar di sini, bahwa hanya "menyembunyikan" halaman admin Anda seperti ini bukan pengganti yang memadai untuk otentikasi berbasis kata sandi yang tepat . Yang mengatakan, jika Anda sudah memiliki sistem otentikasi yang aman diatur, menyembunyikan halaman mungkin berguna sebagai lapisan tambahan, meskipun yang cukup lemah, dalam pendekatan pertahanan mendalam .

Ilmari Karonen
sumber
Saya akhirnya memutuskan untuk memilih apa yang Anda sarankan di bagian kedua. Siapa pun yang mendarat di halaman tanpa kunci yang valid akan melihat halaman 404 reguler saya dan saya tentu saja mengembalikan kode status 404 dalam proses.
WPRookie82
1

Saya akan menggunakan noindex,nofollow,noarchivetag di bagian atas halaman yang ingin Anda hilangkan dari pencarian.

Saya telah menemukan bahwa noarchivetag cenderung mengeluarkan sesuatu dari pencarian dengan sangat cepat, sedangkan tag noindexmungkin menghentikannya untuk mencari, tetapi jika sudah ada di luar, maka Anda perlu membuangnya dari hasil pencarian.

Adapun pertanyaan akses admin, orang-orang lain di sini telah memberikan beberapa saran tentang keamanan yang saya sarankan untuk check out.

Andrew Martin
sumber