هل إذا كان ($ إحالة! = "MySite.com") ليست وسيلة جيدة لمنع المواقع الأخرى لربط صوري أو SWF؟

StackOverflow https://stackoverflow.com/questions/918363

  •  06-09-2019
  •  | 
  •  

سؤال

أحيانا أرى صورة لا يتم تقديمها عندما ينظر المستعرض إلى www.somesite.com/some_image.jpg - سيقول أنك بحاجة إلى إلقاء نظرة على الصورة من داخل صفحة.

(مثل عند استخدام البحث عن صورة Google والنظر في بعض النتائج)

لذلك أعتقد أن خادمهم يستخدم شيئا مثل

# pseudo code
if ($referer not contain "mywebsite.com") then not serve the image / swf

ولكن هذا ربما ليس وسيلة جيدة منذ http_referer غير موثوق؟ لذلك سينتهي بعض المستخدمين بعدم رؤية الصورة أو SWF عند فقدان معلومات المركاف؟

هل كانت مفيدة؟

المحلول

أو حتى أفضل إذا كان لديك حق الوصول إلى استخدام ملف .htaccess يمكنك القيام بما يلي:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?example.com/.*$ [NC]
RewriteRule \.(gif|jpg|js|css|cur|png|jpeg)$ - [F]

أو إذا كنت ترغب في رؤية صورة مختلفة، فقم بما يلي:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?example.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ http://www.example.com/angryman.gif [R,L]

نصائح أخرى

يمكن أن تكون موثوقة، ولكن بعض جدران الحماية تجردها حتى تفعل

// psuedo code
if ($referer does not contain "example.com" and $referer is set and $referer is not equal to "") then do not serve image

تماما كما تذهب آخر، أعتقد أنه أكثر متعة بشكل كبير للسماح للمحافظة الساخنة بشكل عرضي حتى تحصل على بعض المهرج دفع الآلاف من الطلبات يوميا (دون أي رابط حقيقي). ما فعلته بعد ذلك هو إعادة توجيه الصورة إلى شيئا ما بالكامل مختلف.

التفكير الماعز. فقط nastier.

إنه ليس مثاليا، ولكن ربما يكون أفضل من لا شيء إذا كان يمكن أن يمنع 80٪ من الجمهور، الذين لن يعرفوا كيفية الاستئناف الخاص بك، من الاستيلاء على صورتك. يجب أن تحتوي أيضا على مجلد الصور الخاص بك تحت مجلدات تسمى بشكل عشوائي وإعادة تسميةها بشكل دوري لمنع الارتباط المباشر.

أود ترقية هذا الرقم إلى 99. شيء٪. لن يكون لجميع الناس تقريبا وكلاء يتداخلون مع سلاسل الإحالة.

ولكن نعم، إنه تافهة لتعيين الإحالة مع wget (وآخرون).

Rest Header هو مجرد نص، لذلك يمكن مزوره في طلب HTTP. كما هو مذكور في تعليق سابق، يجب أن تهتم بالغالغال الغالبية العظمى من الناس.

على غرار هنري واتسون، كنت أفكر في

# pseudo code
if($referer not empty and $referer not contain "mywebsite.com") then don't serve it. 

فحص مزدوج الحالات 3:
المركض فارغ ==> خدم
المركض غير فارغ ويحتوي على "mywebsite.com" ==> خدم
المركض غير فارغ وليس Contian "mywebsite.com" ==> لم يخدم

ثم يرى الشخص الذي يقوم بالصلة الثابت أنه لا يعمل على ربط بهذه الطريقة وتغييره على الفور.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top