كيفية حماية الملفات القابلة للتنزيل في دليل عن بُعد من مستخدمي غير premium (في PHP؟)

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

سؤال

أنا أقوم بإنشاء قسم "Premium" من موقعي وإيم في حاجة إلى منح تنزيل الوصول إلى الملفات في جهاز تحكم عن بُعد مباشرة (على خادم مختلف) ، للمستخدمين الذين لديهم امتيازات خاصة (الحسابات المخزنة في MySQL DB). يتم ترميز موقعي في PHP/MySQL ، لذا فإن حل PHP سيكون رائعًا.

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

المحلول

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

يمكنك استدعاء الملف download.php

تمرير معلمات عبر ملفات تعريف الارتباط أو الحصول على أو نشر أو جلسة أو أيهما تتحقق من الامتيازات.

بمجرد التحقق من بيانات الاعتماد ، يمكنك إرسال رأس مناسب.

إذا كانت صورة ، فسيكون الرأس header("Content-type: image/jpeg");

أفترض أنك تملك أيضًا هذا الخادم البعيد.

بعض الروابط المفيدة:

أنواع MIME

وظيفة رأس PHP

نصائح أخرى

كما قال PXL ، تحتاج إلى التحقق من التفويض ثم إخراج نوع MIME الصحيح كرأس HTML (كما قال: header("Content-type: image/jpeg");)

أيضًا ، بمجرد الانتهاء من ذلك ، ستحتاج إلى إخراج المحتويات الفعلية للملف وحجمه (بالبايت) على هذا النحو:

header("Content-Length: ".filesize("FILENAME")*1.001);
/* The *1.001 puts a nice buffer on the filesize, I read about it online.
Browsers will stop downloading exactly at the Content-Length, but if they go
over, it's not a big deal at all. */
readfile("FILENAME");
die();

فقط تأكد من تخزين الملف في دليل لا يمكن الوصول إليه من الويب.

أنا معتاد على القيام بذلك في ASP.NET حيث تم بناؤه ، ولكن هذا مقالة - سلعة يبدو أن يكرر وضعك الدقيق.

هذا ما سأفعله:

  1. صمم php-soap-sever على الخادم البعيد B الذي يحمل الملفات.

  2. عندما يقوم المستخدم بتنزيل تنزيل على الخادم الرئيسي الخاص بك ، قم بتوصيل خادم الصابون على B واحتفظ بتذكرة للمستخدم الذي يحدد IP-Address ومعرف/مسار الملف للتنزيل.

  3. سيقوم الخادم B الآن بإنشاء TicketId (والذي يجب أن يكون صالحًا فقط لفترة محدودة) لهذا التنزيل وإعادته إلى A.

  4. الخادم A يعيد توجيه المستخدم إلى الخادم B الذي يقوم بتزويد TicketID كمعلمة GET

  5. يتحقق الخادم B الآن ما إذا كانت التذكرة قد تم استخدامها بالفعل أو انتهت صلاحيتها أو إذا كان المستخدم يأتي من IP الخاطئ. إذا لم يطبق أي منهم الملف وتمييز التذكرة كما هو مستخدم.

ملاحظة: على الخادم B لا تحافظ على تشغيل PHP أثناء تقديم الملف ولكن استخدم X-Sendfile Header في حين أن. وإلا فقد يتوقف التنزيل بعد وقت تنفيذ PHP Max.

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