IPB

Здравствуйте, гость ( Авторизация | Регистрация )


> Делаю сайт, Впервые!
indеx
сообщение 30.06.2017 - 19:07
Сообщение #1


Почетный
*******

Текущее настроение:

Вст. ник | Цитата

Группа: Супер Стар
Сообщений: 3097
Регистрация: 29.12.2009
Пользователь №: 33839

Награды: 15
Подарки: 41

Пол: М


Репутация:   315  

Ни думал, ни гадал, что когда-нибудь возьмусь за такое занятие. Во-первых, у меня не было идеи, о чём должен быть сайт. Во-вторых, я никогда не делал сайты, и у меня нет соответствующих навыков. Но тут у друга появилась идея для сайта, которая мне понравилась. А у меня начало появляться свободное время, которое нужно было использовать. Начинать что-то новое я никогда не боялся, поэтому решил начать. Тем более, что общие навыки программирования у меня есть. Сразу скажу: Идею сайта пока рассказывать не буду, не просите! Даже если просто поржать ag.gif . Да и дело пока не в идее, а в приобретении навыков веб-программирования.
Честно говоря, я уже начал делать сайт, и есть кое-какие наработки. Можно было, конечно, не создавать эту тему, а просто продолжать делать своё дело. Но я человек ленивый, и если не с кем пообщаться на эту тему, то работоспособность у меня почему-то снижается. А если на форуме в теме будет с кем поговорить, то это дело должно стать более захватывающим для меня и пойти веселее az.gif . Да и ответственность появится какая-то перед участниками темы, уже так просто не бросишь, будешь стараться доводить дело до конца. Плюс, мне поначалу нужна какая-то записная книжка, в которой будут множественные технические подробности, как именно я сделал то-то и то-то, и чтобы эта информация была доступна мне как с работы, так и из офиса, ибо она может понадобиться повторно. А если эта информация будет доступна ещё и другим людям, то хуже от этого точно не будет никому. Тем более, что на форуме могут найтись участники, способные подсказать, направить, дать совет или ещё как-то помочь мне в моём начинании, что будет для меня весьма кстати. Вот поэтому я и решил создать данную тему.

Обычно я веду беседы совсем на другие темы, не связанные с техникой, что может стать неожиданностью для участников, знакомых со мной на форуме. В связи с этим я считаю необходимым сделать следующее предупреждение.
ПРЕДУПРЕЖДЕНИЕ:
В данной теме предполагается углубленное рассмотрение информационно-алгоритмических подробностей с использованием сложных и неоднозначных для обычных людей понятий, применяемых в этой области. Это способно вызвать у неподготовленного читателя состояние трудно-идентифицируемой дезориентации, во избежание чего, во время прочтения данной темы рекомендуется не пытаться осознать сразу всё, что написано, а также рекомендуется делать перерывы и пить больше жидкости. За психическое состояние читателей автор ответственности не несёт.

Продолжение следует...


--------------------
Подарки: (Всего подарков: 41 )
Подарок
Подарил(а): льдинка
Подарок
Подарил(а): Фарит
Подарок
Подарил(а): Фарит




Go to the top of the pageGo to the end of the page
 
+Quote Post
 
Start new topic
Ответов
indеx
сообщение 5.12.2017 - 1:37
Сообщение #2


Почетный
*******

Текущее настроение:

Вст. ник | Цитата

Группа: Супер Стар
Сообщений: 3097
Регистрация: 29.12.2009
Пользователь №: 33839

Награды: 15
Подарки: 41

Пол: М


Репутация:   315  

Настройка NGINX. Белый список расширений файлов. Запуск только из корня.

Сразу к делу.
Содержимое сайта находится в двух местах:
а) в базе данных (в нашем случае это MySQL),
б) в файлах.
О базе данных мы поговорим в другой раз, а сейчас рассмотрим файлы.
С точки зрения безопасности, все файлы сайта можно разделить на три части:
    1. Статические файлы. Это файлы, которые скачиваются браузером. Готовые HTML-страницы, CSS-файлы, JS-файлы, картинки, иконки, MP3 и другие. Название этих файлов и их содержимое не является секретом, а значит этими файлами можно делиться с окружающим миром.

    2. Динамические файлы. Это по сути программы (скрипты), которые не скачиваются, а запускаются браузером. У нас это только PHP-файлы. Название этих файлов также не является секретом, т.к. по названию происходит их запуск. А вот содержимое этих файлов по-хорошему должно быть секретом, чтобы злоумышленники не знали, как устроен сайт изнутри, и соответственно, не смогли подобрать ключик к нашему сайту.

    3. Секретные материалы. Это файлы, доступ к которым нельзя давать даже по названию. Файлы конфигурации сервера, логи, статистика, скрипты операционной системы, служебные PHP-файлы, запускаемые только изнутри сервера, и другие. Первая опасность — это утечка информации. Вторая опасность — это запуск программы, которая не должна быть запущена, из-за чего может встать не только данный сайт, но и весь сервер.
Так вот, управлением доступа к файлам занимается веб-сервер, в нашем случае это NGINX.
Соответственно, нам нужно в настройках NGINX (для каждого сайта) описать правила доступа для каждого типа файлов.

1. Сначала опишем статику:
Код
    location ~* \.(htm|html|css|js|ico|jpg|jpeg|png|gif|mp3|msi)$ {
        try_files $uri $uri/ =404;
        }
Здесь мы с помощью регулярного выражения как раз перечисляем, с какими расширениями файлы будут доступны для скачивания браузером (что такое "регулярные выражения", читаем в Интернете, очень полезная вещь). Причём, доступны они будут из любых подкаталогов сайта.

2. Теперь опишем динамику:
Код
    location ~* ^/(\w|-|\.)+\.php$ {
        limit_req zone=max burst=5;
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/site1.ru.sock;
        }
Здесь мы также с помощью регулярки описываем, какое должно быть имя файла. А именно, оно должно начинаться со слеша /. Затем могут идти латинские буквы, знаки подчёркивания, дефисы и точки в любом порядке и сколько угодно, но хотя бы один такой символ. И в конце обязательно .php
То есть, это любые PHP-файлы, но обязательно из корня сайта, ибо второй слеш в этом регулярном выражении не допускается. Я сделал так специально, чтобы PHP-файлы нельзя было вызвать из подкаталогов сайта, поскольку там у меня лежат PHP-файлы только для внутреннего пользования, не предназначенные для вызова извне.

Однако, на моём сайте в одном из подкаталогов всё-таки есть PHP-файлы, вызываемые извне. И чтобы эти файлы были доступны для вызова, для них надо составить другое регулярное выражение, вот такое:
Код
^/catalog/directory/file.php$

Но блок обработки файла должен быть тот же. Не другой такой же, а один общий. То есть, у нас должно получиться два блока регулярных выражений и один блок обработки. Соответственно, из каждого блока регулярных выражений файл должен отправляться в блок обработки. Делаем сначала блок обработки:
Код
    location @php {
        limit_req zone=max burst=5;
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/site1.ru.sock;
        }
Этот блок называется именованным, т.к. имеет имя @php. По этому имени мы и сможем к нему обращаться.
Теперь делаем два блока регулярных выражений:
Код
    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 ~* (^$|^/$) {
        error_page 480 = @php;
        return 480;
        }
Который тоже будет отправлять файл в блок обработки. Но возникает закономерный вопрос: Какой файл будет отправлен в обработку, если в адресной строке не указано никакого файла? Ответ прост: Файл по умолчанию, указанный в файле snippets/fastcgi-php.conf (в блоке обработки этот файл подключается к конфигурации). И какой же там указан файл по умолчанию? Смотрим в файл /etc/nginx/snippets/fastcgi-php.conf и видим строку:
Код
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 / {
        deny all;
        }
Что означает "Запретить всё!". А так как блок без регулярных выражений обрабатывается после блоков с регулярными выражениями, то это означает "Запретить всё остальное!". То есть, в блоках с регулярными выражениями мы описываем так называемый "белый список" разрешённых запросов к сайту (статика и динамика), а все остальные запросы тупо запрещаем. В результате, всё это мы собираем вместе, вставляем в файл конфигурации сайта site1.ru, и у нас получается следующий файл конфигурации:
» Кликните сюда для просмотра оффтоп текста.. «
Который обеспечивает нам безопасность запросов к веб-серверу. rs.gif


--------------------
Подарки: (Всего подарков: 41 )
Подарок
Подарил(а): льдинка
Подарок
Подарил(а): Фарит
Подарок
Подарил(а): Фарит




Go to the top of the pageGo to the end of the page
 
+Quote Post

Сообщений в этой теме
- 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   Настройка NGINX. Белый список расширений файлов. З...   5.12.2017 - 1:37
- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




> Статистика
Board Stats

Подарок форуму

10 евро

100 евро

10000 евро

1000000eur

  


Текстовая версия Сейчас: 12.04.2026 - 14:36