Каков наилучший способ скрыть файл на сервере?
Я собираюсь создать систему размещения изображений в PHP. Я задавался вопросом, как мне скрыть свои изображения от пользователей, чтобы их можно было получить только через специальный URL-адрес.
Мне нужно обсудить все методы, которые включают htaccess.
я бы предпочел, чтобы вместо того, чтобы PHP-процесс отправлял файлы и ресурсы сервера hog в течение длительного времени при отправке содержимого. создайте скрипт, который копирует файл в каталог со случайным именем, а затем просто отправляет этот файл пользователю и еще один скрипт очистит этот каталог после заданных интервалов .. если время создания старше 30 минут .. удалить .. таким образом u минимизировать u просто нужен процесс apache, чтобы отправить обратно файл вместо процесса apache + php.
Поместите файлы за пределы относительного корня и используйте сценарий, например showimage.php, чтобы захватить файл за пределами веб-сайта и передать его пользователю. Код будет выглядеть примерно так:
$len = filesize($filename); header("Content-type: image/jpeg"); header("Content-Length: $len"); header("Content-Disposition: inline; filename=\"$new_filename\""); readfile($filename);
Кроме того, поскольку вы запускаете скрипт, вы можете выполнять аутентификацию / авторизацию в скрипте. Это позволяет вам установить правило modRewrite, такое как:
RewriteRule ^images/(.*)$ /showimage.php?file=$1
так что ваши файлы изображений можно разделить на:
www.domain.com/images/somefile.jpg
www.domain.come/showimage.php?file=somefile.jpg
Вы пишете небольшой скрипт php, который читает файл изображения и отправляет его клиенту. Сценарий PHP может проверять его параметры и файлы cookie, а изображение сохраняется где-то вне корня документа.
Просто не сохраняйте свои изображения в корневом каталоге. Используйте php-файл для управления доступом. Когда вы хотите показать файл, сделайте что-нибудь вроде:
Поместите их в каталог в один конец от вашего корня документа. Затем используйте файл .htaccess, чтобы захватить их:
RewriteBase / RewriteRule ^(.+?)\.jpg$ ../imgs/$1.jpg
Я думаю, что лучшим способом было бы зашифровать его.
Сокрытие PHP
В общем случае внесение неясности ненамного улучшает защищённость системы. Но бывают случаи, когда следует использовать малейшую возможность.
Несколько несложных методик могут помочь вам скрыть PHP , что усложняет работу потенциального взломщика, который пытается найти брешь в вашей системе. Установив опцию expose_php в off в конфигурационном файле php.ini , вы уменьшите количество доступной хакеру информации.
Ещё одна методика заключается в настройке веб-сервера таким образом, чтобы он обрабатывал файлы с различными расширениями как PHP -скрипты. Это можно указать как в .htaccess файлах, так и конфигурационном файле Apache. В таком случае вы сможете использовать при написании кода нестандартные расширения:
Пример #1 Маскировка PHP под другие языки программирования
# Теперь PHP-скрипты могут иметь те же расширения, что и другие языки программирования AddType application/x-httpd-php .asp .py .pl
Пример #2 Использование неизвестных расширений для PHP-скриптов
# Теперь PHP-скрипты могут иметь неизвестные типы файлов AddType application/x-httpd-php .bop .foo .133t
Также можно спрятать его под видом HTML -кода, что приведёт к потере производительности, так как все HTML -файлы будут обрабатываться PHP :
Пример #3 Маскировка PHP-файлов под HTML
# Теперь PHP-скрипты выглядят как обыкновенный HTML AddType application/x-httpd-php .htm .html
Чтобы достичь желаемого эффекта, вы должны переименовать все ваши PHP -скрипты в соответствии с выбранным вами расширением. Описанное в этом разделе документации повышение безопасности через сокрытие является небольшой превентивной мерой при малых затратах.
User Contributed Notes 26 notes
So far I haven’t seen a working rewriter of /foo/bar into /foo/bar.php, so I created my own. It does work in top-level directory AND subdirectories and it doesn’t need hardcoding the RewriteBase.
# Rewrite /foo/bar to /foo/bar.php
RewriteRule ^([^.?]+)$ %.php [L]
# Return 404 if original request is /foo/bar.php
RewriteCond % «^[^ ]* .*?\.php[? ].*$»
RewriteRule .* — [L,R=404]
# NOTE! FOR APACHE ON WINDOWS: Add [NC] to RewriteCond like this:
# RewriteCond % «^[^ ]* .*?\.php[? ].*$» [NC]
The session name defaults to PHPSESSID. This is used as the name of the session cookie that is sent to the user’s web browser / client. (Example: PHPSESSID=kqjqper294faui343o98ts8k77).
To hide this, call session_name() with the $name parameter set to a generic name, before calling session_start(). Example:
Set INI directive «expose_php» to «off» will also help.
You can spoof your PHP to ASP.NET by using:
error_reporting ( 0 );
header ( «X-Powered-By: ASP.NET» );
?>
adding MultiViews to your apache Options config
lets you hide/omit .php in the url without any rewriting, etc.
You can see if somebody’s using PHP just by adding the following to the end of the URL:
?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
If the page is using PHP, this will show the PHP credits.
Setting expose_php to Off in php.ini prevents this.
The idea of hiding the X-Powered-By in PHP is a flawed attempt at establishing security. As the manual indicates, obscurity is not security. If I were exploiting a site, I wouldn’t check what scripting language the site runs on, because all that would matter to me is exploiting it. Hiding the fact that you use [x] language isn’t going to prevent me from bypassing poor security.
To hide PHP, you need following php.ini settings
ServerSignature Off
(min works, but I prefer off)
I think the best way to hide PHP on Apache and Apache itself is this:
httpd.conf
————-
# .
# Minimize ‘Server’ header information
ServerTokens Prod
# Disable server signature on server generated pages
ServerSignature Off
# .
# Set default file type to PHP
DefaultType application/x-httpd-php
# .
Now hacker knows only that you are using Apache.
In response to the previous messages, for apache, there is a easier way to set files without «.» to be executed by PHP, just put this in a «.htaccess» file :
It’s a good idea to «hide» PHP anyway so you can write a RESTful web application.
RewriteEngine On
RewriteRule ^control/([^/]+)/(.*)$ sitecontroller.php?control=$1&query=$2
You then use a function like the following as a way to retrieve data (in a zero indexed fashion) from the $_GET superglobal.
function myGET () $aGet = array();
if(isset( $_GET [ ‘query’ ])) $aGet = explode ( ‘/’ , $_GET [ ‘query’ ]);
>
return $aGet ;
>
?>
This is only a really basic example of course — you can do a lot with Mod Rewrite and a custom ‘GET’ function.
# Redirect external .php requests to extensionless url
RewriteCond % ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://example.com/folder/$1 [R=301,L]
# Resolve .php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [L]
PS. If you want to use pretty URLs (i.e. hide your .php extensions) AND you have safe-mode=on, the previous example (ForceType) won’t work for you. The problem is that safe-mode forces Apache to honor trailing characters in a requested URL. This means that:
would still be processed by the home script in our doc root, but for:
apache would actually look for the /home/contact_us.html file in our doc root.
The best solution I’ve found is to set up a virtual host (which I do for everything, even the default doc root) and override the trailing characters handling within the virtual host. So, for a virtual host listening on port 8080, the apache directives would look like this:
DocumentRoot /web/doc_root
Alias /home «/web/doc_root/home.php»
AcceptPathInfo On
Some people might question why we are overriding the trailing characters handling (with the AcceptPathInfo directive) instead of just turning safe-mode=off. The reason is that safe mode sets global limitations on the entire server, which can then be turned on or left off for each specific virtual host. This is the equivilent of blocking all connections on a firewall, and then opening up only the ones you want, which is a lot safer than leaving everything open globally, and assuming your programmers will never overlook a possible security hole.
Как скрыть PHP код на сервере при условии что надо его править?
Есть PHP скрипты, классы, конфиги. Все это добро взаимосвязано, мне нужно дать доступ к серверу человеку чтобы он работал (запускал под рутом) с этими скриптами, при этом меняя только файлы конфигов, и чтобы не было возможности посмотреть исходный код.
Нашел разные обсфукаторы бесплатные превращающие код в нечто такое
ldc_aa08cb10($xol_e8b7be43[0],$xol_e8b7be43[1]);$krc_5bf7f45b[]=$uic_c59361f8;>catch(Exception $wky_efda7a5a)
1. Как быть, если файлы конфигов имеют названия переменных и получается что при обсфукации основного рабочего кода переменные имеют другие названия? Не заставлять же каждый раз пользователя прогонять через обсфукацию поправленный конфиг? Пока что такой вариант видится единственным.
2. Есть ли возможность внутри сервера под Ubuntu как-то ограничить возможность копирования или просмотра или скачивания определенных файлов или сделать какие-то другие методы защиты-скрытия, но при этом с возможность запуска этого кода. Была мысль спрятать код где-нибудь в недрах папок файловой системы, обозвав рандомными названиями, а запускать как-нибудь через симлинки по названию файлов или что-нибудь в таком духе. Возможно ли?
3. Вариант не предоставлять root доступ к серверу, а осуществлять запуск через браузер, дать доступ только к FTP для заливки конфига в отдельную папку. Но тут есть ряд моментов — все скрипты выполняются вплоть до недели, и должны быть выполнены под root. Как это решить?
Как скрыть содержимое директории на сайте
Наверняка, Вы уже знаете, что при обращении к каталогу открывается файл по умолчанию (как правило, index.php, index.html или index.htm). Однако, что происходит, если такого файла не существует? По умолчанию показывается содержимое каталога, что, безусловно, не очень хорошо. Поэтому в этой статье я покажу самый простой способ, как можно скрыть содержимое каталога на сайте.
Первым делом откройте, либо создайте, если его нет, файл .htaccess в корне своего сайта. Теперь добавьте туда всего одну строку:
После этого все директории сайта, в которых нет index-файла, будут скрыты от пользователя.
Хочется отметить, что это не единственный способ скрыть содержимое каталога на сайте. Очень часто применяется способ загрузки пустого index-файла. То есть в каждую директорию, которую надо скрыть от пользователя, мы загружаем пустой файл, например, index.html. Таким образом, при обращении к директории пользователь не увидит ничего, кроме белого экрана.
Это два, на мой взгляд, самых лучших способа сокрытия содержимого директории на сайте. Я, лично, пользуюсь первым способом, так как он проще, но, возможно, Вам по тем или иным причинам захочется воспользоваться вторым.
Создано 31.08.2011 14:35:35
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 7 ):
Здравствуйте,я хотел использовать .htacces для запрета копирования фото.я читал .htacces нужно вложить в папку с фото.А что там нужно написать,не в курсе.И хотелось бы одну страницу исключить из запрета.Как это можно зделать?
Пробовал использовать order deny,allow deny from all allow from 127.0.0.1 но снимки исчезают,блокировка правой кнопки мышки не работает для мобильных браузеров,может знаете специальный код?
понятно,но почему-то background в мобмльных не работает,спасибо.
htaccess с deny from all вообще нельзя добавлять в директорию с изображениями, которые выводятся на сайте.
Михаил,вопрос не столь значительный,а можно в .htaccess создать стиль background для изображений?Или сам файл .htaccess в папке уже уничтожает фото?пробовал оставить файл .htaccess пустым, изображения тоже отсутствовали.
Вопрос некорректный, а htaccess ничего не уничтожает.