Защита от директен достъп

dreamteck

Registered
Здравейте на всички!

Регистрирах се тук, защото имам един проблем, с който не мога да се справя.

Правя онлайн магазин за видео уроци, снимки, тримерни модели...общи взето CGI магазин. Това означава, че потребителите получават достъп до файлове.

Проблемът е следният: да кажем имам файл domain.com/files/file.rar този файл ще е перфектно достъпен ако някой напише директния линк към него, както аз направих.

На папката с файловете съм забранил външен достъп, тоест в момента, ако кликна на някой файл, ми дава 403 Forbidden грешка. Проблмът е сега как да извлека файловете от тази папка. Опитвам се да го направя с една PHP функция, работеща подобно на това простичко обяснение:
PHP:
http://webdesign.about.com/od/php/ht/force_download.htm

Но ако кажем, че тази функция се намира в PHP файл, който е достъпен, това значи, че с подаване на правилните GET параметри например, всички файлове в папката ще са достъпни.

Та нужна ми е помощ как да защитя файловете си от директен достъп, отворен съм към всякакви подходи. Важно е обаче, освен да мога да ги даунлоудвам, да мога и да ги стриймвам. Споменах видео уроци, тоест това ще са видео файлове, които ще се стриймват директно от сайта без да се теглят.

Благодаря ви предварително за отделеното време!

Поздрави :)
 
НЕ може да даваш директен лик.
Както сам написа всеки ще може да год ръпне директно.

Защитените файлове трябва да са извън www директорията и само
скрипта да ги предлага за download.


Погледни тази тема:

http://web-tourist.net/forum/viewtopic.php?t=81229

Виж там човека се опитва да скрие изображение и да го дава оригинала само на хора които са платили.


И примерно файла трябва да е нещо от сорта на:



if(проверка дали човека има право да тегли)
{
header('Content-type:jpeg"');
readfile("images/ime_na_faila.jpg");
}
else
{echo "вие не сте оторизиран да теглите";}
 
При .rar файл май беше x-rar-compressed:

PHP:
if(проверка дали човека има право да тегли)
{
header('Content-type:application/x-rar-compressed');
readfile("images/ime_na_faila.jpg"); 
}
else 
{echo "вие не сте оторизиран да теглите";}

С пхп функцията mime_content_type можа да провериш .
 
Ако примерно провериш видео уроците тук ще видие, че те са защитени по същият начин.
Достъпни са за всички но няма директен линк към тях.

ПРавих преди време един сайт за платени видео уроци.
Ползвах същият принцип.

Ако е платил може да влезе с акаунта си и да гледа и да сваля.
Иначе ниц.
 
Благодаря ти за бързия отговор!

Аз си намерих една функция в интернет, която след това промених, за да е адекватна за моите нужди.

На сходен принцип работи...даже е същият. Файловете се свалят добре, но не съм сигурен как, ако имам плейър мога да ги стрийвам (относно видео уроците). Все още не съм изработил системата, която ще отваря видео уроците, но можеш ли да ми кажеш дали има нещо по-особено при стриймването на файлове ? Тоест ако имам вграден флаш плейър в страницата, с какви проблеми ще се сблъскам?

Благодаря!
 
Допълнение към на админ поста за типа на данни:
Ето ти един масив от CodeIgniter , който можеш да го ползваш на всякъде със типа данни стига да имаш разширението.

PHP:
$mimes = array(	'hqx'	=>	'application/mac-binhex40',
				'cpt'	=>	'application/mac-compactpro',
				'csv'	=>	array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel'),
				'bin'	=>	'application/macbinary',
				'dms'	=>	'application/octet-stream',
				'lha'	=>	'application/octet-stream',
				'lzh'	=>	'application/octet-stream',
				'exe'	=>	array('application/octet-stream', 'application/x-msdownload'),
				'class'	=>	'application/octet-stream',
				'psd'	=>	'application/x-photoshop',
				'so'	=>	'application/octet-stream',
				'sea'	=>	'application/octet-stream',
				'dll'	=>	'application/octet-stream',
				'oda'	=>	'application/oda',
				'pdf'	=>	array('application/pdf', 'application/x-download'),
				'ai'	=>	'application/postscript',
				'eps'	=>	'application/postscript',
				'ps'	=>	'application/postscript',
				'smi'	=>	'application/smil',
				'smil'	=>	'application/smil',
				'mif'	=>	'application/vnd.mif',
				'xls'	=>	array('application/excel', 'application/vnd.ms-excel', 'application/msexcel'),
				'ppt'	=>	array('application/powerpoint', 'application/vnd.ms-powerpoint'),
				'wbxml'	=>	'application/wbxml',
				'wmlc'	=>	'application/wmlc',
				'dcr'	=>	'application/x-director',
				'dir'	=>	'application/x-director',
				'dxr'	=>	'application/x-director',
				'dvi'	=>	'application/x-dvi',
				'gtar'	=>	'application/x-gtar',
				'gz'	=>	'application/x-gzip',
				'php'	=>	'application/x-httpd-php',
				'php4'	=>	'application/x-httpd-php',
				'php3'	=>	'application/x-httpd-php',
				'phtml'	=>	'application/x-httpd-php',
				'phps'	=>	'application/x-httpd-php-source',
				'js'	=>	'application/x-javascript',
				'swf'	=>	'application/x-shockwave-flash',
				'sit'	=>	'application/x-stuffit',
				'tar'	=>	'application/x-tar',
				'tgz'	=>	array('application/x-tar', 'application/x-gzip-compressed'),
				'xhtml'	=>	'application/xhtml+xml',
				'xht'	=>	'application/xhtml+xml',
				'zip'	=>  array('application/x-zip', 'application/zip', 'application/x-zip-compressed'),
				'mid'	=>	'audio/midi',
				'midi'	=>	'audio/midi',
				'mpga'	=>	'audio/mpeg',
				'mp2'	=>	'audio/mpeg',
				'mp3'	=>	array('audio/mpeg', 'audio/mpg', 'audio/mpeg3', 'audio/mp3'),
				'aif'	=>	'audio/x-aiff',
				'aiff'	=>	'audio/x-aiff',
				'aifc'	=>	'audio/x-aiff',
				'ram'	=>	'audio/x-pn-realaudio',
				'rm'	=>	'audio/x-pn-realaudio',
				'rpm'	=>	'audio/x-pn-realaudio-plugin',
				'ra'	=>	'audio/x-realaudio',
				'rv'	=>	'video/vnd.rn-realvideo',
				'wav'	=>	array('audio/x-wav', 'audio/wave', 'audio/wav'),
				'bmp'	=>	array('image/bmp', 'image/x-windows-bmp'),
				'gif'	=>	'image/gif',
				'jpeg'	=>	array('image/jpeg', 'image/pjpeg'),
				'jpg'	=>	array('image/jpeg', 'image/pjpeg'),
				'jpe'	=>	array('image/jpeg', 'image/pjpeg'),
				'png'	=>	array('image/png',  'image/x-png'),
				'tiff'	=>	'image/tiff',
				'tif'	=>	'image/tiff',
				'css'	=>	'text/css',
				'html'	=>	'text/html',
				'htm'	=>	'text/html',
				'shtml'	=>	'text/html',
				'txt'	=>	'text/plain',
				'text'	=>	'text/plain',
				'log'	=>	array('text/plain', 'text/x-log'),
				'rtx'	=>	'text/richtext',
				'rtf'	=>	'text/rtf',
				'xml'	=>	'text/xml',
				'xsl'	=>	'text/xml',
				'mpeg'	=>	'video/mpeg',
				'mpg'	=>	'video/mpeg',
				'mpe'	=>	'video/mpeg',
				'qt'	=>	'video/quicktime',
				'mov'	=>	'video/quicktime',
				'avi'	=>	'video/x-msvideo',
				'movie'	=>	'video/x-sgi-movie',
				'doc'	=>	'application/msword',
				'docx'	=>	array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip'),
				'xlsx'	=>	array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip'),
				'word'	=>	array('application/msword', 'application/octet-stream'),
				'xl'	=>	'application/excel',
				'eml'	=>	'message/rfc822',
				'json' => array('application/json', 'text/json')
			);
 
dreamteck каза:
Благодаря ти за бързия отговор!

Аз си намерих една функция в интернет, която след това промених, за да е адекватна за моите нужди.

На сходен принцип работи...даже е същият. Файловете се свалят добре, но не съм сигурен как, ако имам плейър мога да ги стрийвам (относно видео уроците). Все още не съм изработил системата, която ще отваря видео уроците, но можеш ли да ми кажеш дали има нещо по-особено при стриймването на файлове ? Тоест ако имам вграден флаш плейър в страницата, с какви проблеми ще се сблъскам?

Благодаря!

НЕ.
Няма да имаш проблеми . Поне аз нямах.


Плеърът ти ще взима файловете от дадени линкове и ще ги плейва за гледане.
Применро плеърът ти ще взима от файла:
http://neston.net/145.flv

ТИ обаче ще смениш този линк с :
http://neston.net/player.php?flv=145

И плеърът ти ще го плеуйва само ако потребителят отговаря на изискванията /платил, логнал се, с права сза достъп и т.н./

Аз даже го бях направил автоматично след като платят през paypal да им
пуска права да ги гледат.
 
Благодаря ви много и на двамата. Масивът ще е много полезен определено.

А сега за плейъра:
Ами мисълта ми е, ако потребителят не е платил, изобщо да не се показва плейъра на страницата, а самия видео клип ще си е в защитената папка.

Въпроса ми беше, ако след като потребителя плати и сървъра му покаже плейъра, който чете файла http://domain.com/videofile.mp4 (без да минава през някакъв отделен PHP файл, който контролира свалянето) дали ще може да го стриймне тоя файл, след като файлът е в папка с ограничен достъп. Правата на папката са 750 - тоест няма никакви публични права.
 
dreamteck каза:
Благодаря ви много и на двамата. Масивът ще е много полезен определено.

А сега за плейъра:
Ами мисълта ми е, ако потребителят не е платил, изобщо да не се показва плейъра на страницата, а самия видео клип ще си е в защитената папка.

Въпроса ми беше, ако след като потребителя плати и сървъра му покаже плейъра, който чете файла http://domain.com/videofile.mp4 (без да минава през някакъв отделен PHP файл, който контролира свалянето) дали ще може да го стриймне тоя файл, след като файлът е в папка с ограничен достъп. Правата на папката са 750 - тоест няма никакви публични права.

ТИ не може да стриймваш файл в защитена директория.
Ако обаче това мине през php файл ще стане.
ТОест за да плейне плеъра този файл то той трябва да може да се тегли.
Другият вариант е този който казах.
МЕждинен php файл, който го чете и подава на браузера.
 

Back
Горе