Уязвимость коммерческого проекта из-за использования прямых ссылок
Ну, об этой уязвимости уже много писано, однако все-таки проигнорировать данный предмет было бы неправильно...
Одной из основ онлайн бизнеса, построенного на продаже информационных товаров (в смысле файлов электронных книг, mp3, флэш-видео и т.п.) является закрытый доступ к приватным материалам особой ценности. И даже если какую-то часть этих приватных материалов Вы в качестве бонуса отдаете своим подписчикам в подарок, то, наверное, за это Вы хотите, чтобы они соблюдали определенные правила, например, не давали прямую ссылку для скачивания материалов Вашей рассылки, а предлагали подписаться и прочитать информационный выпуск полностью, не так ли?
Но, на практике, только малая часть людей добровольно следует просьбам и правилам, мягко упоминаемым в диспозитивной форме, типа: "Будьте любезны, если Вас не затруднит, не давайте прямых ссылок на файлы выпуска, лучше дайте ссылку на сам выпуск, пожалуйста!", гораздо эффективней, когда юзер просто не имеет возможности крысятничать, и потому следует столь же вежливым, но уже императивным правилам вашего сайта.
На самом деле, как всегда это и бывает, все, что нужно сделать, чтобы доступ к любому файлу Вашего информационного выпуска рассылки, был возможен только из интернет страницы самого выпуска, это добавить в html-код страницы маленький скрипт:
http://click.e-professional.net/antipirates/urlaliaser.html.
Это свободно распространяемый яваскрипт "Url Aliaser" в некоторой доработке Вашего покорного слуги...
Принцип работы скрипта очень простой:
Вы кладете в папку с html-страницей выпуска файл urlAliaser.js, а в коде самой страницы добавляете между тегами <head> и </head> следующий код:
В коде скрипта указываются страницы, с которых разрешен прямой доступ к алиасеру - это для того, чтобы сделать возможным прямой доступ к алиас-ссылке, например, из другого выпуска Вашей рассылки.
Для того, чтобы добавить разрешенную страницу, просто добавьте с новой строки код validreferrals[i]="название страницы.htm", где i - номер по порядку.
Преимущество приведенного выше скрипта в том, что он будет работать где угодно, даже на бесплатном хостинге, а также в том, что позволяет адресовать юзера, пришедшего с внешнего ресурса, на ту страницу, на которой данная ссылка должна располагаться.
Однако, есть и более простой вариант защиты от внешних ссылок на Ваш ресурс - создание специальной директивы в .htaccess
В случае использования данного метода, отредактируйте или добавьте в корневую папку сайта файл .htaccess следующего содержания:
RewriteEngine on
# Если юзер зашел с сайта, а не ввел url-адрес вручную,
RewriteCond %{HTTP_REFERER} !^$
# и если это не сайт http://e-professional.net,
RewriteCond %{HTTP_REFERER} !^http://(www.)?e-professional\.net/.*$ [NC,OR]
# и не сайт http://htaccess.net.ru,
RewriteCond %{HTTP_REFERER} !^http://(www.)?htaccess\.net\.ru/.*$ [NC]
# и не страница free-download.html (любого домена),
RewriteCond %{HTTP_REFERER} !.*/free-download\.html$
# то указываем к каким файлам ему запрещен доступ, и на какую страницу его адресовать...
RewriteRule .(css|mov|swf|dcr|exe|rar|avi|zip)$ index.html
Теперь разберемся чуть подробнее...
# Если юзер зашел с сайта, а не ввел url-адрес вручную,
RewriteCond %{HTTP_REFERER} !^$
Данная директива означает, что если человек зашел не по ссылке с другого домена, а ввел url-адрес вручную, то мы его не блокируем. Это сделано для того, чтобы не сбить с толку Ваших подписчиков и клиентов, которые могут скопировать ссылку себе на компьютер и воспользоваться ею немного позже.
# и если это не сайт http://e-professional.net,
RewriteCond %{HTTP_REFERER} !^http://(www.)?e-professional\.net/.*$ [NC,OR]
# и не сайт http://htaccess.net.ru,
RewriteCond %{HTTP_REFERER} !^http://(www.)?htaccess\.net\.ru/.*$ [NC]
Здесь Вы указываете сайты, с которых доступ к Вашим файлам открыт. В примере
свободный доступ к файлам разрешен с двух доменов: e-professional.net и htaccess.net.ru.
Если Вы хотите сделать доступ только со своего сайта (со своего домена), то уберите первую строку с адресом домена и оставьте только вторую.
Важно, чтобы в последней строке с разрешенным доменом в конце между квадратными скобками было прописано только "NC".
Если, наоборот, Вы захотите сделать больше доменов, с которых доступ разрешен, то скопируйте по аналогии первую строку с разрешенным доменом, и вставьте ее вперед ПЕРЕД остальными. Директива в квадратных скобках в конце строки должна выглядеть так:
[NC,OR]
Вот пример:
RewriteCond %{HTTP_REFERER} !^http://(www.)?ВАШ_САЙТ\.ru/.*$ [NC,OR]
# и если это не сайт http://e-professional.net,
RewriteCond %{HTTP_REFERER} !^http://(www.)?e-professional\.net/.*$ [NC,OR]
# и не сайт http://htaccess.net.ru,
RewriteCond %{HTTP_REFERER} !^http://(www.)?htaccess\.net\.ru/.*$ [NC]
Обратите внимание, что перед всеми точками в адресе домена ставится обратный слеш (\).
# и не страница free-download.html (любого домена),
RewriteCond %{HTTP_REFERER} !.*/free-download\.html$
А приведенная выше директива очень интересна тем, что Вы можете указать не имя разрешенного домена, а имя разрешенной страницы. В этом случае, если ссылка на файл будет находится на странице, например, free-download.html любого сайта, то с нее юзер спокойно скачает файл без каких-либо проблем.
# то указываем к каким файлам ему запрещен доступ, и на какую страницу его адресовать...
RewriteRule .(css|mov|swf|dcr|exe|rar|avi|zip)$ index.html
Ну и последняя директива - файлы, которые мы защищаем от несанкционированного
доступа - (css|mov|swf|dcr|exe|rar|avi|zip), и страница, на которую адресуются
непрошенные гости - index.html
Также с помощью .htaccess можно очень эффектно защитить Ваш коммерческий продукт на продающем мини-сайте. Так, если Вы уверены, что на страницу успешной оплаты Ваш магазин не пустит юзера иначе, как после успешной оплаты (простите за тавтологию), Вы можете задать директиву, позволяющую скачать файл с информационным продуктом только по ссылке с этой страницы:
RewriteEngine on
# Указываем url-адрес страницы, с которой файл можно скачать...
# В примере: http://e-professional.net/pay.html
RewriteCond %{HTTP_REFERER} !^http://(www.)?e-professional\.net/pay.html$
[NC]
# Указываем имя файла, на который данная директива распространяется...
(в примере: filename.zip)
# Указываем страницу, на которую адресуем непрошенного гостя... (в примере: index.html)
RewriteRule filename.zip$ index.html
Файл с приведенными директивами кладем в одну папку с защищаемым файлом или в корень сайта...
Олег Маслюк
|