301 chuyển hướng đến trang 404 hoặc đặt mã trạng thái thành 404 và ở lại trang?


9

Tôi có một số trang trên trang web của mình mà chỉ quản trị viên mới có thể truy cập và truy cập vào các trang này nếu giá trị chuỗi truy vấn nếu được tìm thấy và được đặt chính xác. Ví dụ:

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


Liên kết trên sẽ hiển thị nội dung của trang nhưng mọi thứ khác như bên dưới sẽ không:

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


Bây giờ tôi đã suy nghĩ về việc phải làm gì nếu công cụ tìm kiếm và / hoặc người dùng không phải là quản trị viên bằng cách nào đó hạ cánh trên các trang ẩn này.

Tất nhiên tôi có thể thay đổi mã trạng thái của trang thành 404 hoặc chuyển hướng 301 khác sang:

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


Giải pháp tốt nhất liên quan đến Google và SEO là gì?


6
Tôi sẽ xem xét thực hiện xác thực thực tế thay vào đó, nếu thông tin bạn đang cố gắng che giấu có bất kỳ tầm quan trọng nào. Ngoài ra, một chuyển hướng 301 về mặt ngữ nghĩa chỉ ra rằng nội dung đã được di chuyển không phải là trường hợp ở đây và do đó nó là một phản ứng không phù hợp.
Bạn

Câu trả lời:


11

Mã chính xác sẽ là 401 Không được ủy quyền

Theo thông số kỹ thuật HTTP

10.4.2 401 Không được phép

Yêu cầu yêu cầu xác thực người dùng. Phản hồi PHẢI bao gồm trường tiêu đề WWW-xác thực (phần 14.47) có chứa một thách thức áp dụng cho tài nguyên được yêu cầu. Máy khách CÓ THỂ lặp lại yêu cầu với trường tiêu đề Ủy quyền phù hợp (phần 14.8). Nếu yêu cầu đã bao gồm thông tin xác thực ủy quyền, thì phản hồi 401 cho biết rằng ủy quyền đã bị từ chối cho các thông tin đăng nhập đó. Nếu phản hồi 401 có cùng thách thức với phản hồi trước đó và tác nhân người dùng đã thử xác thực ít nhất một lần, thì người dùng NÊN được trình bày thực thể được đưa ra trong phản hồi, vì thực thể đó có thể bao gồm thông tin chẩn đoán có liên quan. Xác thực truy cập HTTP được giải thích trong "Xác thực HTTP: Xác thực truy cập cơ bản và tiêu hóa" [43].

Hay cách khác

10,4,4 403 Cấm

Máy chủ hiểu yêu cầu, nhưng từ chối thực hiện nó. Ủy quyền sẽ không giúp đỡ và yêu cầu KHÔNG NÊN lặp lại. Nếu phương thức yêu cầu không phải là CHÍNH và máy chủ muốn công khai lý do tại sao yêu cầu chưa được thực hiện, thì NÊN mô tả lý do từ chối trong thực thể. Nếu máy chủ không muốn cung cấp thông tin này cho khách hàng, mã trạng thái 404 (Không tìm thấy) có thể được sử dụng thay thế.

Cả hai đều đúng về mặt ngữ nghĩa hơn 404. Các tài nguyên tồn tại như vậy là 404không chính xác. 401nên chính xác, nhưng bạn không yêu cầu xác thực. Bảo mật bằng cách che khuất không phải là bảo mật. 403cũng đúng vì yêu cầu được hiểu, tài nguyên tồn tại nó chỉ là từ chối phục vụ yêu cầu. 404là thích hợp nếu bạn không muốn tiết lộ lý do tại sao 403đang xảy ra.

Trong mọi trường hợp 301chuyển hướng không phù hợp, tài nguyên đã không được di chuyển.


2
Google không lập chỉ mục và xóa các trang trả về 401/403 thông báo trạng thái, một câu hỏi tương tự đã được hỏi một lúc sau, bạn luôn có thể sử dụng một noindex đơn giảnchặn bằng robot.txt
Simon Hayter

1
@ WPRookie82 Về việc bảo vệ trang bằng cách giữ bí mật - bạn đang làm sai.
Cthulhu

4
bảo mật bằng cách che khuất hoàn toàn không phải là bảo mật

1
Việc sử dụng 401 cho các phương thức xác thực khác với HTTP Basic hoặc Digest auth (hoặc các lược đồ xác thực tương thích RFC2617 khác) đã được thảo luận ở đây trước đây ; ý kiến ​​của tôi tại thời điểm mà tôi vẫn đứng đó là nó có thể hoạt động trên thực tế, nhưng nó không thực sự hợp lệ theo thông số HTTP và trong mọi trường hợp, 403 hoặc thậm chí 404 sẽ thích hợp hơn.
Ilmari Karonen

1
Tôi đồng ý với các ý kiến ​​khác rằng 401 Không được phép là không phù hợp theo thông số HTTP.
Stephen Ostermiller

1

Vì đây là trang dành cho quản trị viên, có hoặc không có tham số "khóa", các trang không thể và không nên được lập chỉ mục. Do đó, trang web dành cho người không phải quản trị viên có thể gửi mã trạng thái 404 và bạn có thể giữ nguyên URL đó. Không chuyển hướng, vì bạn nói với Google rằng trang đã được di chuyển, nhưng sau đó đến một trang không tồn tại.

Đây là cách Google làm điều đó là tốt. Xem điều gì xảy ra khi bạn truy cập trang giả: http://www.google.com/analytics/asdsas


Một điều chỉnh nhỏ cho bài viết trên của tôi, http://www.example.com/404-errortồn tại, đó là một loại trang 404 toàn cầu của toàn bộ trang web để tôi không bị chuyển hướng đến một trang không thoát.
WPRookie82

@ WPRookie82: Theo như bất kỳ ai ngoại trừ bạn và máy chủ web của bạn có liên quan, không có sự khác biệt giữa một trang không tồn tại và một trang hiện có trả về phản hồi 404.
Ilmari Karonen

1

Mã phản hồi HTTP đúng về mặt ngữ nghĩa cho tình huống này sẽ là 403 Bị cấm :

Máy chủ hiểu yêu cầu, nhưng từ chối thực hiện nó. Ủy quyền sẽ không giúp đỡ và yêu cầu KHÔNG NÊN lặp lại. Nếu phương thức yêu cầu không phải là CHÍNH và máy chủ muốn công khai lý do tại sao yêu cầu chưa được thực hiện, thì NÊN mô tả lý do từ chối trong thực thể. Nếu máy chủ không muốn cung cấp thông tin này cho khách hàng, mã trạng thái 404 (Không tìm thấy) có thể được sử dụng thay thế.

(Mặc dù định nghĩa của phản ứng 403 nói rằng "ủy quyền sẽ không giúp đỡ", IMO này nên được hiểu như ám chỉ đặc biệt để xác thực HTTP Basic / Digest , mà mã trạng thái 401 trái phép nên được sử dụng để thay thế. Vì bạn đang không sử dụng một trong những phương thức xác thực đó, 403 là mã trạng thái phù hợp trong trường hợp của bạn.)


Tuy nhiên, sử dụng một mã số 403 tình trạng tiết lộ (hoặc ít nhất là mạnh mẽ ngụ ý) thực tế rằng có một trang với URL đó, mặc dù các Máy chủ từ chối cung cấp nó. Vì đây là điều mà bạn có thể muốn che giấu khỏi những kẻ xâm nhập tiềm năng, tiêu chuẩn HTTP / 1.1 cho phép trả lại rõ ràng mã trạng thái 404 Không tìm thấy ( nhấn mạnh của tôi):

Máy chủ không tìm thấy bất cứ thứ gì khớp với URI yêu cầu. Không có dấu hiệu nào được đưa ra cho dù điều kiện là tạm thời hay vĩnh viễn. Mã trạng thái 410 (Đã qua) NÊN được sử dụng nếu máy chủ biết, thông qua một số cơ chế có thể định cấu hình bên trong, rằng tài nguyên cũ không có sẵn vĩnh viễn và không có địa chỉ chuyển tiếp. Mã trạng thái này thường được sử dụng khi máy chủ không muốn tiết lộ chính xác lý do tại sao yêu cầu bị từ chối hoặc khi không có phản hồi nào khác được áp dụng.

Tất nhiên, để làm cho việc che giấu đó có hiệu quả, trang lỗi 404 bạn trả về cần phải xuất hiện giống hệt với những gì bạn trả lại cho các trang không tồn tại thực tế . Nếu không, nó sẽ chỉ đánh lừa những kẻ tấn công ngu ngốc và bình thường nhất. (Nếu mục tiêu của bạn chỉ là để các trang nằm ngoài chỉ mục của Google, thì phản hồi 403 cũng sẽ làm điều đó.)


Điều gì về các câu trả lời có thể khác được đề xuất trong câu hỏi của bạn và các câu trả lời khác?

Như tôi đã lưu ý trước đó, tôi không tin rằng một phản hồi 401 là phù hợp ở đây. có thể hoạt động trên thực tế, trong chừng mực vì hầu hết các trình duyệt và công cụ tìm kiếm sẽ đối xử với bất kỳ mã phản hồi sê-ri 4 xx không đúng hoặc không được nhận dạng như là 404, nhưng nó vẫn không hợp lệ theo thông số HTTP và không có lý do thực tế nào để thích nó trên 403 hoặc 404.

Đối với việc sử dụng chuyển hướng 301 (hoặc 302) đến một trang "lỗi 404" riêng biệt, đó là một thực tiễn khủng khiếp được lan truyền bởi các hướng dẫn mod_rewrite cẩu thả và hoàn toàn không có tính năng đổi thưởng so với trả lại trực tiếp phản hồi 404:

  • Thật khó hiểu cho khách truy cập, vì URL mà họ đang cố truy cập bị thay thế bởi URL của trang lỗi. Do đó, họ thấy một thông báo nói rằng họ đã truy cập một trang không tồn tại, nhưng không có dấu hiệu dễ thấy nào về trang mà họ đang cố truy cập và vì vậy không thể dễ dàng thử bất kỳ chiến lược khôi phục nào như sửa bất kỳ lỗi chính tả rõ ràng nào trong URL, hoặc sao chép và dán nó vào Google hoặc Wayback Machine.

  • Nó có thể gây nhầm lẫn cho các công cụ tìm kiếm, đặc biệt là nếu trang 404 của bạn không được phép trong tệp robots.txt hoặc nếu nó trả về không đúng phản hồi 200 OK thay vì mã trạng thái 404 thực ( "mềm 404" ), có khả năng khiến trang 404 của bạn xuất hiện trong tìm kiếm kết quả cho các cụm từ tìm kiếm ngẫu nhiên.

  • Nó gây ra (một lượng nhỏ) tải thêm trên máy chủ của bạn, tăng thời gian phản hồi cho khách truy cập và có khả năng làm chậm công cụ tìm kiếm thu thập dữ liệu trang web của bạn, vì mọi yêu cầu cho một trang không tồn tại (hoặc bị che giấu) hiện đều có thêm một vòng HTTP chuyến đi.

  • Nó không có lợi ích SEO, vì bất kỳ "liên kết nước trái cây" nào từ các trang được chuyển hướng đến một trang 404 đều bị mất.

(Tất nhiên, một trong những tình huống mà bạn làm muốn sử dụng một chuyển hướng 301 thay vì một phản ứng 404 là khi trang thực sự đã di chuyển, và bạn có thể chuyển hướng người truy cập vào vị trí đúng của nó. Tuy nhiên, đó không phải là trường hợp thảo luận ở đây.)


Cuối cùng, tôi muốn nhắc lại tình cảm, được thể hiện trong nhiều bình luận ở đây, rằng chỉ "che giấu" các trang quản trị của bạn như thế này không phải là sự thay thế thích hợp cho xác thực dựa trên mật khẩu thích hợp . Điều đó nói rằng, nếu bạn đã có một hệ thống xác thực an toàn được thiết lập, việc ẩn các trang có thể hữu ích như một lớp bổ sung, mặc dù là một lớp khá yếu, theo cách tiếp cận chuyên sâu .


Cuối cùng tôi đã quyết định chọn cho những gì bạn đề nghị trong phần thứ hai. Bất cứ ai hạ cánh trên trang mà không có khóa hợp lệ sẽ thấy trang 404 thông thường của tôi và tất nhiên tôi sẽ trả lại mã trạng thái 404 trong quy trình.
WPRookie82

1

Tôi sẽ sử dụng một noindex,nofollow,noarchivethẻ trong phần đầu của các trang bạn muốn thoát khỏi tìm kiếm.

Tôi đã phát hiện ra rằng noarchivethẻ có xu hướng đưa mọi thứ ra khỏi tìm kiếm khá nhanh, trong khi đó noindexcó thể khiến nó dừng tìm kiếm, nhưng nếu nó đã được đưa ra khỏi đó, thì bạn cần phải loại bỏ nó khỏi kết quả tìm kiếm.

Đối với câu hỏi truy cập quản trị viên, những người khác ở đây đã đưa ra một số lời khuyên về bảo mật mà tôi khuyên bạn nên kiểm tra.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.