كيفية منع الارتباط العميق بالملفات على موقع الويب الخاص بي

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

سؤال

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

على سبيل المثال، هذا عنوان من موقع الويب الخاص بي:

http://sy-stu.org/stu/publicfiles/stdlibrary/exam.zip.

عندما يضغط أي شخص على ذلك، سيبدأ تشغيل عملية التنزيل مباشرة.

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

المحلول

إذا كنت تستخدم PHP، فيمكنك الحصول على برنامج نصي يربط المستخدم بالتنزيل ولكن فقط إذا كان $_SERVER['HTTP_REFERER'] هو من موقعك. إذا لم يكن الأمر كذلك إعادة توجيه إلى موقعك.

نصائح أخرى

يستضيف موقعك بواسطة خادم ويب Apache، لذلك يجب أن تكون قادرا على القيام بما يلي في موقع HttpD.conf الخاص بموقعك (أو كتلة المضيف الافتراضية)

RewriteEngine On
RewriteCond   %{HTTP_REFERER} !^$
RewriteCond   %{HTTP_REFERER} !^http://(www\.)?yourdomain\.com/  [NC]
RewriteRule   ^/PublicFiles/  /page-about-direct-links.html

هذا يقول أساسا:

  1. قم بتشغيل المحرك MOD_REWRITE
  2. إذا كان إحالة HTTP غير فارغ ...
  3. ولا يحتوي على اسم نطاقي (مع أو بدون "www.") ...
  4. إعادة توجيه أي طلبات لأي شيء بموجب / publicfiles / إلى /page-about-direct-links.html

يمكن العثور على مزيد من المعلومات حول mod_rewrite هنا: MOD_REWRITE - Apache HTTP Server

لا تقدم رابطا مباشرا للملف الذي تخدمه. قم بتوفير برنامج نصي يرسل المحتوى من خلال البرنامج النصي بمجرد الضغط على الزر "إرسال".

قم بعمل بحث ويب لإرسال الملفات من خلال CGI.

هنا هو رابط أنيق وجدته عبر الإنترنت:هنا

لماذا لا تجعل الروابط ديناميكية وغير مباشرة، على سبيل المثال:

على الصفحة X: (ثابت)

<a href="Y">SuperNeat Program</a>

في الصفحة Y: (تم إنشاؤه ديناميكيا)

Click here to download 
<a href="Z.php?timestamp={timestamp}&counter={counter}&hash={hash}">
SuperNeat Program</a>

واستبدال الطوابع الزمنية W / الوقت الحالي في MSEC منذ عام 1970، عداد = عداد الذي تزداد فيه مرة واحدة لكل تنزيل، Hash = MD5 Hash من CONCACATENATE (الطابع الزمني، العداد، الملح السري) حيث الملح السري = أي رمز مفضل لديك سرا.

ثم في صفحة z.php، يمكنك فقط إعادة حساب التجزئة من العداد والطوابع الزمني في سلسلة الاستعلام، والتحقق من أنه يطابق التجزئة في سلسلة الاستعلام، وأن الطابع الزمني هو حديثة (على سبيل المثال من 30 دقيقة أو 60 دقيقة أو 60 دقيقة أو ما من أي وقت مضى). إذا كان كذلك، فقم بإخدمة الملف المعني. إذا لم يكن الأمر كذلك، رمي رسالة خطأ. هذا يمنح شخصا ما لفترة زمنية قصيرة فقط للارتباط المباشر لملفك. إذا كنت لا ترغب في ذلك، فابحث عن قيم العداد المستلمة في سلسلة z.php Query ولا تقبلها أكثر من مرة.

أنا لست على الإطلاق خبير ويب، لكنني كنت أفكر في المؤشر التالي -

إذا كنت تستخدم ASP.NET هل يمكن لمعالجات HTTP أو الوحدات التي تم تكوينها على مستوى موقع موقع الويب (الكثير من المعلومات حول تلك الموجودة على الويب، نظرت إليها مؤخرا لبعض الأعمال، إليك واحدة شرط علي سبيل المثال.

تتمثل الفكرة في اعتراض الطلب قبل أن تصل إلى الملف المستهدف وإعادة توجيهه إلى الصفحة التي ترغب في إظهارها؛ على سبيل المثال - إذا كان شخص ما يرغب في التصفح إلى عنوان URL الذي نشرته ("http://sy-stu.org/stu/publicfiles/stdlibrary/exam.zip.") اعتراض هذه المكالمة، استخدم بعض البحث للعثور على الصفحة التي ترغب في عرضها وإعادة توجيه الطلب هناك؛ أنا تخمين المستخدمين بعد ارتباط لن يكون منزعجا جدا (ما لم يفعلوا" حفظ الهدف باسم "، والذي من شأنه يؤديهم إلى حفظ بعض HTML وليس ZIP).

ومع ذلك، هناك بعض "فتحات" في خطتي - كيف يمكنك بالفعل تقديم رابط يعمل من صفحتك الخاصة؟ أعتقد أنه يمكنك التمييز بين الطلبات القادمة من موقع الويب الخاص بك وتلك التي تأتي من الآخرين الذين يمكنك التحقق من المعالج / الوحدة النمطية عن طريق فحص كائن الطلب.

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