Как да ограничим достъпа до WordPress Uploads папката само за логнати потребители

Ограничяване достъпа до WordPress uploads

Редакция: след като публукувах статията и в reddit поличих коментари и изглежда това решение може лесно да бъде хакнато. Статията ще има продължение.

Редакция 2: Изглежда, че за да се постигне качествена защита трябва да използваме и системен WordPress плъгин. За повече информация разгледайте връзката по-долу.

http://orbisius.com/products/wordpress-plugins/orbisius-wp-media-protector/

Когато качвате файлове в WordPress те биват записвани в папката wp-content/uploads.

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

 

Следващите инструкции трябва да се добавят в началото на .htaccess файла, който се намира в директорията, в която е инсталиран WordPress. Ако няма такъв файл, създайте го. Ако сте активирали Permalinks той ще трябва да е там.

Вариант 1: Пълно ограничение: Ограничаване достъпа до всички файлове, които се намират в WordPress uploads папката.

# Protect all files within the uploads folder
<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{HTTP_COOKIE} !.*wordpress_logged_in.*$ [NC]
	RewriteCond %{REQUEST_URI} ^(.*?/?)wp-content/uploads/.* [NC]
	RewriteRule . http://%{HTTP_HOST}%1/wp-login.php?redirect_to=%{REQUEST_URI} [L,QSA]
</IfModule>

Вариант 2: Частично ограничение: Ограничаване достъпа до файлове с определени разширения, които се намират в WordPress uploads папката.

# Protect only some files within the uploads folder
<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{HTTP_COOKIE} !.*wordpress_logged_in.*$ [NC]
	RewriteCond %{REQUEST_URI} ^(.*?/?)wp-content/uploads/.*\.(?:gif|png|jpe?g|pdf|txt|rtf|html|htm|xlsx?|docx?|mp3|mp4|mov)$ [NC]
	RewriteRule . http://%{HTTP_HOST}%1/wp-login.php?redirect_to=%{REQUEST_URI} [L,QSA]
</IfModule>

Бележка: Тези инструкции работят само Вашият хостинг ползва Apache уеб сървър.
Как работи?

Модулът Apache mod_rewrite проверява дали има бисквитка, която съдържа в името си “wordpress_logged_in”. Ако не съществува такава, това означава, че потребителят не е влезнат в системата. Следващата проверка е дали потребителят е заявил достъп до файл, който са намира в WordPress wp-content/uploads.

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

Бележка: WordPress’ използва php константа с име LOGGED_IN_COOKIE, която съдържа цялото име на бисквитката

Видео обяснение на статията.

Част 2 (видео)

Връзки по темата

Go359 - Oнлайн Магазини

Go359.com е платформа за електронна търговия, с която можете да си създадете безплатен електронен магазин бързо и лесно.

This entry has 0 replies

Comments open

Leave a reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Please, enter user/email:
Please, enter user/email:
Безплатен онлайн магазин от Go359.com