Здравствуйте, гость ( Авторизация | Регистрация )
30.06.2017 - 19:07
Сообщение
#1
|
|
![]() Почетный ![]() ![]() ![]() ![]() ![]() ![]() ![]() Текущее настроение: ![]() Вст. ник | Цитата Группа: Супер Стар Сообщений: 3097 Регистрация: 29.12.2009 Пользователь №: 33839 Награды: 15 Подарки: 41 Пол: М Репутация: 315
|
Ни думал, ни гадал, что когда-нибудь возьмусь за такое занятие. Во-первых, у меня не было идеи, о чём должен быть сайт. Во-вторых, я никогда не делал сайты, и у меня нет соответствующих навыков. Но тут у друга появилась идея для сайта, которая мне понравилась. А у меня начало появляться свободное время, которое нужно было использовать. Начинать что-то новое я никогда не боялся, поэтому решил начать. Тем более, что общие навыки программирования у меня есть. Сразу скажу: Идею сайта пока рассказывать не буду, не просите! Даже если просто поржать
Честно говоря, я уже начал делать сайт, и есть кое-какие наработки. Можно было, конечно, не создавать эту тему, а просто продолжать делать своё дело. Но я человек ленивый, и если не с кем пообщаться на эту тему, то работоспособность у меня почему-то снижается. А если на форуме в теме будет с кем поговорить, то это дело должно стать более захватывающим для меня и пойти веселее Обычно я веду беседы совсем на другие темы, не связанные с техникой, что может стать неожиданностью для участников, знакомых со мной на форуме. В связи с этим я считаю необходимым сделать следующее предупреждение. ПРЕДУПРЕЖДЕНИЕ: В данной теме предполагается углубленное рассмотрение информационно-алгоритмических подробностей с использованием сложных и неоднозначных для обычных людей понятий, применяемых в этой области. Это способно вызвать у неподготовленного читателя состояние трудно-идентифицируемой дезориентации, во избежание чего, во время прочтения данной темы рекомендуется не пытаться осознать сразу всё, что написано, а также рекомендуется делать перерывы и пить больше жидкости. За психическое состояние читателей автор ответственности не несёт. Продолжение следует... -------------------- Подарки: (Всего подарков: 41 ) |
|
|
|
|
|
|
![]() |
5.12.2017 - 1:37
Сообщение
#2
|
|
![]() Почетный ![]() ![]() ![]() ![]() ![]() ![]() ![]() Текущее настроение: ![]() Вст. ник | Цитата Группа: Супер Стар Сообщений: 3097 Регистрация: 29.12.2009 Пользователь №: 33839 Награды: 15 Подарки: 41 Пол: М Репутация: 315
|
Настройка NGINX. Белый список расширений файлов. Запуск только из корня.
Сразу к делу. Содержимое сайта находится в двух местах: а) в базе данных (в нашем случае это MySQL), б) в файлах. О базе данных мы поговорим в другой раз, а сейчас рассмотрим файлы. С точки зрения безопасности, все файлы сайта можно разделить на три части:
2. Динамические файлы. Это по сути программы (скрипты), которые не скачиваются, а запускаются браузером. У нас это только PHP-файлы. Название этих файлов также не является секретом, т.к. по названию происходит их запуск. А вот содержимое этих файлов по-хорошему должно быть секретом, чтобы злоумышленники не знали, как устроен сайт изнутри, и соответственно, не смогли подобрать ключик к нашему сайту. 3. Секретные материалы. Это файлы, доступ к которым нельзя давать даже по названию. Файлы конфигурации сервера, логи, статистика, скрипты операционной системы, служебные PHP-файлы, запускаемые только изнутри сервера, и другие. Первая опасность — это утечка информации. Вторая опасность — это запуск программы, которая не должна быть запущена, из-за чего может встать не только данный сайт, но и весь сервер. Соответственно, нам нужно в настройках NGINX (для каждого сайта) описать правила доступа для каждого типа файлов. 1. Сначала опишем статику: Код location ~* \.(htm|html|css|js|ico|jpg|jpeg|png|gif|mp3|msi)$ { Здесь мы с помощью регулярного выражения как раз перечисляем, с какими расширениями файлы будут доступны для скачивания браузером (что такое "регулярные выражения", читаем в Интернете, очень полезная вещь). Причём, доступны они будут из любых подкаталогов сайта.try_files $uri $uri/ =404; } 2. Теперь опишем динамику: Код location ~* ^/(\w|-|\.)+\.php$ { Здесь мы также с помощью регулярки описываем, какое должно быть имя файла. А именно, оно должно начинаться со слеша /. Затем могут идти латинские буквы, знаки подчёркивания, дефисы и точки в любом порядке и сколько угодно, но хотя бы один такой символ. И в конце обязательно .phplimit_req zone=max burst=5; include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/site1.ru.sock; } То есть, это любые PHP-файлы, но обязательно из корня сайта, ибо второй слеш в этом регулярном выражении не допускается. Я сделал так специально, чтобы PHP-файлы нельзя было вызвать из подкаталогов сайта, поскольку там у меня лежат PHP-файлы только для внутреннего пользования, не предназначенные для вызова извне. Однако, на моём сайте в одном из подкаталогов всё-таки есть PHP-файлы, вызываемые извне. И чтобы эти файлы были доступны для вызова, для них надо составить другое регулярное выражение, вот такое: Код ^/catalog/directory/file.php$ Но блок обработки файла должен быть тот же. Не другой такой же, а один общий. То есть, у нас должно получиться два блока регулярных выражений и один блок обработки. Соответственно, из каждого блока регулярных выражений файл должен отправляться в блок обработки. Делаем сначала блок обработки: Код location @php { Этот блок называется именованным, т.к. имеет имя @php. По этому имени мы и сможем к нему обращаться.limit_req zone=max burst=5; include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/site1.ru.sock; } Теперь делаем два блока регулярных выражений: Код location ~* ^/(\w|-|\.)+\.php$ { Как видите, мы использовали это имя блока обработки. Отправка файлов в именованный блок делается именно так.error_page 480 = @php; return 480; } location ~ ^/catalog/directory/file.php$ { error_page 480 = @php; return 480; } Теперь нам нужно обработать ситуацию, когда пользователь зашёл на сайт без указания файла. То есть, просто написал в браузере "site1.ru" или "site1.ru/" (без слеша и со слешем в конце). Здесь ведь нет расширения файла .php, значит, нам нужно сделать ещё одно регулярное выражение для этих двух случаев, вот такое: Код (^$|^/$) И блок у нас получится, соответственно:Код location ~* (^$|^/$) { Который тоже будет отправлять файл в блок обработки. Но возникает закономерный вопрос: Какой файл будет отправлен в обработку, если в адресной строке не указано никакого файла? Ответ прост: Файл по умолчанию, указанный в файле snippets/fastcgi-php.conf (в блоке обработки этот файл подключается к конфигурации). И какой же там указан файл по умолчанию? Смотрим в файл /etc/nginx/snippets/fastcgi-php.conf и видим строку:error_page 480 = @php; return 480; } Код fastcgi_index index.php То есть, тот файл, который обычно и используется по умолчанию. Значит, если пользователь не укажет никакой файл, то будет использоваться файл index.php, и это как раз то, что нам нужно.В результате, динамическая часть у нас получается следующая: Код location ~* (^$|^/$) { error_page 480 = @php; return 480; } location ~* ^/(\w|-|\.)+\.php$ { error_page 480 = @php; return 480; } location ~ ^/catalog/directory/file.php$ { error_page 480 = @php; return 480; } location @php { limit_req zone=max burst=5; include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/site1.ru.sock; } 3. А теперь опишем секретные файлы. Код location / { Что означает "Запретить всё!". А так как блок без регулярных выражений обрабатывается после блоков с регулярными выражениями, то это означает "Запретить всё остальное!". То есть, в блоках с регулярными выражениями мы описываем так называемый "белый список" разрешённых запросов к сайту (статика и динамика), а все остальные запросы тупо запрещаем. В результате, всё это мы собираем вместе, вставляем в файл конфигурации сайта site1.ru, и у нас получается следующий файл конфигурации:deny all; } » Кликните сюда для просмотра оффтоп текста.. « Который обеспечивает нам безопасность запросов к веб-серверу. -------------------- Подарки: (Всего подарков: 41 ) |
|
|
|
|
|
|
indеx Делаю сайт 30.06.2017 - 19:07
Создатель Галактической Империи Не впадая в
состояние трудно-идентифицируемой дез... 1.07.2017 - 19:24
indеx Цитата(Создатель Галактической Империи @ 1.07... 1.07.2017 - 21:26
The Mentalist Цитата(indеx @ 30.06.2017 - 19:07) п... 1.07.2017 - 20:42
indеx Цитата(The Mentalist @ 1.07.2017 - 20... 1.07.2017 - 21:34
Создатель Галактической Империи Цитата(indеx) И если проект связан с деньгами,
А, ... 2.07.2017 - 13:38
indеx Введение.
Как выяснилось, чтобы делать сайты, нео... 1.07.2017 - 21:21
indеx Да уж, сфера информационных технологий быстро разв... 2.07.2017 - 17:32
indеx Это я описываю прошлое, что уже сделал, и мне нужн... 2.07.2017 - 21:40
indеx В общем, начал я постепенно использовать эти инстр... 3.07.2017 - 15:06
indеx Но была ещё одна причина — это работа с базой данн... 3.07.2017 - 21:32
indеx Итак, за 350 рублей в месяц я взял VPS. Оказалось,... 4.07.2017 - 14:24
indеx Прежде чем закачивать файлы, выяснилось, что в чёр... 5.07.2017 - 18:24
льдинка Ты потом покажешь, что получилось? 15.07.2017 - 7:33
indеx Цитата(льдинка @ 15.07.2017 - 7:33) ... 16.07.2017 - 15:39
indеx Итак, продолжаем...
Значит, нам нужно было закача... 21.07.2017 - 20:10
indеx Чтобы не делать коту больно, решил продолжить сраз... 21.07.2017 - 21:57
indеx Напоминаю, что сайт, который я делаю, работал у ме... 22.07.2017 - 3:43
indеx Поэтому, если поначалу Вы не уверены в своих дейст... 23.07.2017 - 0:06
indеx Ура, сайт заработал!
Эммм... Только как-то ... 24.07.2017 - 17:39
indеx Однако, при разработке сайта менять файлы приходит... 26.07.2017 - 17:24
indеx Итак, нам нужно разобраться в этих 10 строчках. А ... 26.07.2017 - 22:56
indеx А ошибка следующая:
» Кликните сюда для прос... 27.07.2017 - 13:52
indеx Основное сообщение в тексте ошибки следующее:
КодT... 28.07.2017 - 13:53
indеx Итак, текст ошибки:
ЦитатаExpression #2 of SELECT ... 28.07.2017 - 22:20
indеx Итак, подведём промежуточные итоги...
На данный мо... 29.07.2017 - 13:38
indеx Чтобы работало несколько сайтов, нужно настроить в... 29.07.2017 - 15:43
indеx Обнаружилось, что после рестарта сервера (вместе с... 30.07.2017 - 2:36
indеx Теперь давайте настроим SSL-протоколы для наших са... 30.07.2017 - 12:41
indеx И чтобы для наших сайтов установить SSL-сертификат... 31.07.2017 - 12:55
indеx Интересно, что при получении второго сертификата (... 31.07.2017 - 15:58
indеx ...полученных SSL-сертификатов. Где же они, эти се... 31.07.2017 - 21:38
indеx Этот сертификат, бесплатно полученный нами от служ... 3.08.2017 - 0:37
indеx Всё, с SSL-сертификатами мы разобрались.
Следующий... 3.08.2017 - 15:17
indеx Опять случайно нажал какую-то кнопку
Скоро буде... 3.08.2017 - 19:23
indеx Забыли, забыли... Мы же ещё к серверу MySQL под... 6.08.2017 - 22:10
indеx Настроили-то настроили, но оказывается, все эти на... 7.08.2017 - 13:21
Айя-Софи » Кликните сюда для просмотра оффтоп текста.... 7.08.2017 - 14:57
Эллочка я в состоянии трудно-идентифицируемой дезориентаци... 7.08.2017 - 15:04
Apokaliptius Айя-Софи, Эллочка
Пожалуйста не сбивайте Indexа..... 7.08.2017 - 15:09
Айя-Софи » Кликните сюда для просмотра оффтоп текста.... 7.08.2017 - 15:13
Apokaliptius Цитата(Айя-Софи @ 7.08.2017 - 15... 7.08.2017 - 15:47
indеx Спасибо за тёплые комментарии. Очень приятно, что ... 7.08.2017 - 20:28
indеx Только что обнаружил странное поведение сайта, но ... 8.08.2017 - 23:25
indеx Выяснилось, что не работают некоторые функции сайт... 12.08.2017 - 19:41
indеx Полезный совет.
Программа PuTTY, с помощью которо... 13.08.2017 - 20:28
indеx Это был полезный совет из Интернета, который... не... 15.08.2017 - 13:06
indеx Теперь о настройке почты.
У нас на одном сервере н... 15.08.2017 - 20:33
indеx Для второго сайта site2.ru первый этап выполняем а... 16.08.2017 - 15:46
indеx Забыл сказать...
Если мы хотим иметь возможность з... 16.08.2017 - 23:29
indеx Выяснилось, что совет по сохранению конфигурации i... 17.08.2017 - 13:36
indеx Таким образом получается, что у нас в памяти серве... 18.08.2017 - 19:14
indеx Небольшая заметка.
По умолчанию PHP обрабатывает ... 17.10.2017 - 20:27
indеx Компьютерная техника обычно работает чётко, строго... 25.10.2017 - 16:03
indеx Свободное место на диске
Заметил, что свободное м... 19.12.2017 - 18:07
indеx Создание поддомена
Когда наш сайт уже работает, н... 7.03.2018 - 17:56
indеx Оказывается...
PHP может работать на сервере в дву... 9.03.2018 - 15:29
indеx Настройка сервера без сайтов
Когда нагрузка на се... 10.03.2018 - 1:03
Лиса) indеx а я очень хочу стать верстальщиком, сейчас с... 8.06.2018 - 16:51
Фарит Цитата(Лиса) @ 8.06.2018 - 16:51... 8.06.2018 - 17:09
indеx Цитата(Лиса) @ 8.06.2018 - 16:51... 8.06.2018 - 17:34
indеx Чтобы сразу увидеть результат и порадоваться перво... 8.06.2018 - 18:02
indеx Бывают случаи, когда сайт выдаёт сообщение:
Цитата... 27.08.2018 - 18:36![]() ![]() |
![]() |
| Текстовая версия | Сейчас: 12.04.2026 - 14:36 |