Làm cách nào để ngăn chặn liên kết nóng (trộm hình ảnh trên mạng / trộm cắp băng thông) của các nguồn trên trang web của tôi?


8

Tôi đang cố gắng viết "cuối cùng" chống nóng .htaccess ...

Bạn có thể tìm thấy nhiều ví dụ / hướng dẫn / trình tạo trên mạng nhưng nhiều trong số đó là sai hoặc không đầy đủ (hoặc thậm chí cả hai).

Đây là những tính năng tôi đang tìm kiếm:

  • Phải chặn liên kết nóng cho danh sách các phần mở rộng tệp khi HTTP_REFERER là trang web nước ngoài.
  • Phải cho phép liên kết nóng cho tên miền hiện tại (duh) mà không mã hóa nó trong .htaccess.
    • Đối với tên miền hiện tại, nó phải hoạt động theo http và https.
    • Đối với tên miền hiện tại, nó phải hoạt động với www và không có www.
  • Phải có thể thêm các tên miền ngoại lệ vào các quy tắc này (như bạn bè của chúng tôi Google) và các tên miền này phải hoạt động theo http và https và với www hoặc không có www.

Đây là những gì tôi đã đạt được cho đến nay:

<IfModule mod_rewrite.c>

Options +FollowSymlinks
RewriteEngine On

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mydomain.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com/.*$ [NC]
RewriteRule \.(gif|jpe?g|png|zipx?)$ - [NC,F]

</IfModule>

Những câu hỏi của tôi:

  1. Làm thế nào để tránh mã hóa cứng mydomain.comtrong .htaccess? (Thật tuyệt vời khi có thể triển khai .htaccess này cho tất cả các tên miền của tôi mà không phải sửa đổi nó cho từng tên miền.)
  2. Trong RewriteRule của tôi, gif|jpe?g|png|zipx?tương đương với gif|jpg|jpeg|png|zip|zipxphải không? (Xin lỗi vẫn còn mới ở các biểu thức thông thường.)
  3. Bạn có thấy điều gì xấu trong .htaccess của tôi mà tôi không biết không?

Đối với # 1 tôi biết điều đó là có thể. Đoạn mã gần nhất tôi tìm thấy là đoạn mã này loại bỏ www khỏi URL mà không cần mã hóa tên miền. Có cách nào để sử dụng phương pháp này cho câu hỏi số 1 của tôi không?

RewriteCond %{HTTP_HOST} ^www\.(.+)
RewriteCond %{HTTPS}s/%1 ^(on(s)|offs)/(.+)
RewriteRule ^ http%2://%3%{REQUEST_URI} [L,R=301]

Cập nhật:

Tôi biết các giải pháp sẽ phục vụ hình ảnh thủy ấn thay vì hình ảnh thông thường. Nhưng tôi không tìm kiếm loại giải pháp này. Tôi muốn một giải pháp phổ quát (phục vụ 403 lỗi) sẽ hoạt động cho tất cả các loại tệp nhị phân (zip, exe, iso, jpg, png, gif ...).


IMHO Apache nên đi kèm với tệp cấu hình này ít nhất là một tùy chọn để bao gồm. Tôi tự hỏi liệu có nhà phát triển Apache nào sẵn sàng thêm nó nếu bạn / chúng tôi có thể đưa ra một cái không?
Chris Nava


@Tom O'Connor Đọc thú vị và tôi đồng ý với điều đó. Nhưng tập lệnh của tôi trong trường hợp của tôi sẽ được sử dụng cho các tệp nhị phân lớn (như zip, exe ...) chứ không phải hình ảnh và những thứ tương tự. Vì vậy, tôi vẫn sẽ cần phải có được một câu trả lời. Có băng thông rẻ, nhưng zip 500 MB không giống với jpg 100 KB ...
AlexV

Tôi đã không trả lời. Tôi chỉ đang chê bai;)
Tom O'Connor

Câu trả lời:


9

Bất kể bạn làm gì, bạn sẽ "lãng phí" chu kỳ CPU (để xác định xem trang web giới thiệu (trang đang thực hiện liên kết) có được ủy quyền hay không, bạn phải thực hiện một số xử lý dữ liệu yêu cầu).
Điều duy nhất bạn có thể làm là tiết kiệm băng thông trong khi lãng phí tối thiểu chu kỳ CPU.

một số ví dụ trong Tài liệu Apache thực hiện chính xác những gì bạn muốn. Cái này:

SetEnvIf Referer example\.com localreferer
<FilesMatch \.(jpg|png|gif)$>
Order deny,allow
Deny from all
Allow from env=localreferer
</FilesMatch>

dường như là ứng dụng nhất (và không yêu cầu toàn bộ trọng lượng của mod_rewrite).
Bạn có thể thêm các giới thiệu hợp lệ bổ sung với các chỉ thị SetEnvIfvà bổ sung Allow.


Không tệ, nhưng tôi cần một giải pháp không mã hóa tên miền trong htaccess (đọc kỹ câu hỏi của tôi).
AlexV

Sau đó, bạn cần một giải pháp lập trình như Oliver đề xuất (vẫn yêu cầu bạn phải mã hóa danh sách, biểu thức chính quy hoặc một số đại diện khác của các giới thiệu được phép - Nó chỉ cho phép bạn đặt nó trong một tệp rời rạc)
voretaq7

Không nhất thiết nếu bạn nhìn vào khối mã thứ 2 của tôi, bạn có thể thấy nó có thể được thực hiện ... Tôi chỉ cần điều chỉnh nó phù hợp với trường hợp của tôi ...
AlexV

Bạn có thể sử dụng logic dọn dẹp trong khối mã thứ hai của mình (hoặc ma thuật tương tự chỉ %{HTTP_HOST}để phân tích cú pháp regex ít hơn) để chèn máy chủ URL vào bộ quy tắc của bạn, điều này sẽ mua cho bạn các tên miền cục bộ (kiểm tra rộng rãi), nhưng bạn vẫn cần phải chăm chỉ -code mã giới thiệu bên ngoài "đẹp" như Google (bởi người giới thiệu, tác nhân người dùng, IP, v.v.)
voretaq7

3

Còn về cách viết quy tắc, nếu không biết người giới thiệu (bị cấm), chỉ cần gọi tệp Php nơi bạn chuyển hình ảnh dưới dạng tham số và trong tệp Php, chỉ cần đặt màu đỏ lớn: "tệp này xuất phát từ MYweBSITE.COM và không có ủy quyền chính thức để được hiển thị ở đây ".

Đối với câu hỏi của bạn, làm cho quy tắc của bạn toàn cầu. Sửa lỗi cho tôi nếu tôi sai, nhưng nếu quy tắc được khai báo trước bất kỳ vhost nào, nó sẽ được áp dụng trên tất cả các vhost (loại "quy tắc mặc định").

Và một ý tưởng khác rất đơn giản: chỉ cần chuyển hướng đến tệp Php (tại đây filter.php) sẽ tìm trong trang web được ủy quyền và trả lại tệp yêu cầu nếu mọi thứ đều ổn:

RewriteRule /(.*)\.jpg$ /filter.php?im=$2\.jpg [QSA,L]

Trong filter.phpchỉ tải động một danh sách các vhost hoặc một cái gì đó như thế:

if (isset($_SERVER['HTTP_HOST'])) {
   if ((mb_ereg('thereferers\.I\.HATE\.com',HOST) !== false) ) {
       ... your code ...
   }
}

Đó là một khả năng, nhưng tôi không muốn "lãng phí" CPU vì điều này (bằng cách sử dụng PHP). Tôi chỉ muốn phục vụ 403s. Ngoài ra với PHP, bạn phải quản lý tất cả các vấn đề bộ đệm và điều này có thể khá phức tạp.
AlexV

1

Cloudflare có thể giúp ích cho bạn: http://www.cloudflare.com

Điều này tuy nhiên chỉ hoạt động cho hình ảnh nhưng đó dường như là những gì bạn đang theo đuổi.

Bảo vệ liên kết

Tự động kích hoạt bảo vệ hotlink cho hình ảnh của bạn để ngăn chặn liên kết ngoài trang web. Các tham chiếu không nằm trong vùng và không trống sẽ bị từ chối truy cập. Phần mở rộng tệp được hỗ trợ là gif, ico, jpg, jpeg và png.

Được bảo vệ: http://mydomain.com/images/pic.jpg Để bỏ qua: http://mydomain.com/images/hotlink-ok/pic.jpg


0

câu hỏi 1:

RewriteEngine On
RewriteCond% {HTTP_REFERER}! ^ Http: // (. +)? Yoursite.com/ [NC]
RewriteCond% {HTTP_REFERER}! ^ $
RewriteRule. *. (Jpe? G | gif | bmp | png) [F]

Câu hỏi 2:

Đúng

câu hỏi 3

Tôi sẽ sử dụng một của tôi


Đối với câu hỏi 1, "yoursite.com" được mã hóa cứng nên không hữu ích.
AlexV

@AlexV: Không phải. Chỉ cần thay thế yoursite.com bằng địa chỉ mà bạn muốn ALLOW và những người giới thiệu khác sẽ không tải xuống bất kỳ hình ảnh nào
genesis

Và làm thế nào tôi cho phép mình mà không cần mã hóa nó?
AlexV

-1

Hoặc sử dụng kiến CoralCDN để cho các liên kết nóng dân gian đến nội dung trái tim của họ?

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.