set $block_sql_injections 0; if ($query_string ~ "union.select.\(") { set $block_sql_injections 1; } if ($query_string ~ "union.all.select.") { set $block_sql_injections 1; } if ($query_string ~ "concat.\(") { set $block_sql_injections 1; } if ($block_sql_injections = 1) { return 301 /; }

## Block common exploits
set $block_common_exploits 0;
if ($query_string ~ "(<|%3C).*script.*(>|%3E)") {
    set $block_common_exploits 1;
}
if ($query_string ~ "GLOBALS(=|\\\\[|\\\\%[0-9A-Z]{0,2})") {
    set $block_common_exploits 1;
}
if ($query_string ~ "_REQUEST(=|\\\\[|\\\\%[0-9A-Z]{0,2})") {
    set $block_common_exploits 1;
}
if ($query_string ~ "proc/self/environ") {
    set $block_common_exploits 1;
}
if ($query_string ~ "mosConfig_[a-zA-Z_]{1,21}(=|\\\\%3D)") {
    set $block_common_exploits 1;
}
if ($query_string ~ "base64_(en|de)code\\\\(.*\\\\)") {
    set $block_common_exploits 1;
}

if ($block_common_exploits = 1) { return 301 /; }

WEB HARDENING

Повышаем безопасность стека web-приложений

У всех построено по разному и пути конфигурационного файла могут быть как системными, так и пользовательскими. Так что прежде найдите их "locate nginx.conf"

vi /etc/nginx/nginx.conf
nano /etc/nginx/nginx.conf
nano /etc/nginx/sites-available/credit.bankrbk.kz
nginx -t
nginx -s reload

Отключить показ версии сервера nginx на всех ошибочных страницах.

В директиве server {} сайта поставить:

server_tokens off;

Настрой PHP защиту

## Скрыть версию PHP - !!!
nano /etc/php.ini
expose_php = Off
## Отключаем опасные функции
disable_functions = phpinfo, system, mail, exec
## Максимальное время исполнения скрипта
max_execution_time = 30
## Максимальное время, которое может потратить скрипт на обработку данных запроса
max_input_time = 60
## Максимальное количество памяти, выделяемое каждому скрипту
memory_limit = 8M
## Максимальный размер данных, отсылаемых скрипту с помощью метода POST
post_max_size = 8M
## Максимальный размер загружаемых файлов
upload_max_filesize = 2M
## Не показывать ошибки PHP-скриптов пользователям
display_errors = Off
## Включаем Safe Mode
safe_mode = On
## Включаем SQL Safe Mode
sql.safe_mode = On
## Позволяем выполнять внешние команды только в этом каталоге
#safe_mode_exec_dir = /путь/к/защищенному/каталогу
## Ведем логи
log_errors = On
## Запрещаем открытие удаленных файлов
allow_url_fopen = Off

## Comression
gzip on;
gzip_min_length 10240;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_proxied expired no-cache no-store private auth;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss

Настрой защиту от срыва стека. Добавь в секцию server следующие строки:

## Максимальный размер буфера для хранения тела запроса клиента
client_body_buffer_size 1K;
## Максимальный размер буфера для хранения заголовков запроса клиента
client_header_buffer_size 1k;
## Максимальный размер тела запроса клиента, прописанный в поле Content-Length заголовка. Если сервер должен поддерживать загрузку файлов, это значение необходимо увеличить
client_max_body_size 1k;
## Количество и размер буферов для чтения большого заголовка запроса клиента
large_client_header_buffers 2 1k;

Для повышения производительности добавь следующие строки:

### Таймаут при чтении тела запроса клиента
client_body_timeout 10;
### Таймаут при чтении заголовка запроса клиента
client_header_timeout 10;
### Таймаут, по истечению которого keep-alive соединение с клиентом не будет закрыто со стороны сервера
keepalive_timeout 5 5;
### Таймаут при передаче ответа клиенту
send_timeout 10;

Блокировка

location ~* "(/\\\\.)" { deny all; }
location ~ /\\\\. { deny all; }
### Исключения для тех кто использует free SSL сертификаты
location ~* "(/\\\\.well-known\\\\/acme-challenge)" { allow all; }
### Психоз и параноя мы же такие да?
location ~* "(eval\\\\()"  { deny all; }
location ~* "(127\\\\.0\\\\.0\\\\.1)"  { deny all; }
location ~* "([a-z0-9]{2000})"  { deny all; }
location ~* "(javascript\\\\:)(.*)(\\\\;)"  { deny all; }
location ~* "(base64_encode)(.*)(\\\\()"  { deny all; }
location ~* "(GLOBALS|REQUEST)(=|\\\\[|%)"  { deny all; }
location ~* "(<|%3C).*script.*(>|%3)" { deny all; }
location ~ "(\\\\\\\\|\\\\.\\\\.\\\\.|\\\\.\\\\./|~|`|<|>|\\\\|)" { deny all; }
location ~* "(boot\\\\.ini|etc/passwd|self/environ)" { deny all; }
location ~* "(thumbs?(_editor|open)?|tim(thumb)?)\\\\.php" { deny all; }
location ~* "(\\\\'|\\\\")(.*)(drop|insert|md5|select|union)" { deny all; }
location ~* "(https?|ftp|php):/" { deny all; }
location ~* "(=\\\\\\\\\\\\'|=\\\\\\\\%27|/\\\\\\\\\\\\'/?)\\\\." { deny all; }
location ~* "/(\\\\$(\\\\&)?|\\\\*|\\\\"|\\\\.|,|&|&amp;?)/?$" { deny all; }
location ~* "(\\\\{0\\\\}|\\\\(/\\\\(|\\\\.\\\\.\\\\.|\\\\+\\\\+\\\\+|\\\\\\\\\\\\"\\\\\\\\\\\\")" { deny all; }
location ~* "(~|`|<|>|:|;|%|\\\\\\\\|\\\\s|\\\\{|\\\\}|\\\\[|\\\\]|\\\\|)" { deny all; }
location ~* "/(=|\\\\$&|_mm|(wp-)?config\\\\.|cgi-|etc/passwd|muieblack)" { deny all; }
location ~* "(&pws=0|_vti_|\\\\(null\\\\)|\\\\{\\\\$itemURL\\\\}|echo(.*)kae|etc/passwd|eval\\\\(|self/environ)" { deny all; }
location ~* "\\\\.(aspx?|bash|bak?|cfg|cgi|dll|exe|git|hg|ini|jsp|log|mdb|out|sql|svn|swp|tar|rdf)$" { deny a

ll; }
location ~* "/(^$|mobiquo|phpinfo|shell|sqlpatch|thumb|thumb_editor|thumbopen|timthumb|webshell)\\\\.php" { deny all; }

Безопасность

set $block_sql_injections 0;
    if ($query_string ~ "union.*select.*\\\\(") {
        set $block_sql_injections 1;
    }
    if ($query_string ~ "union.*all.*select.*") {
        set $block_sql_injections 1;
    }
    if ($query_string ~ "concat.*\\\\(") {
        set $block_sql_injections 1;
    }
    if ($block_sql_injections = 1) { return 301 /; }

    ##  Block common exploits
    set $block_common_exploits 0;
    if ($query_string ~ "(<|%3C).*script.*(>|%3E)") {
        set $block_common_exploits 1;
    }
    if ($query_string ~ "GLOBALS(=|\\\\[|\\\\%[0-9A-Z]{0,2})") {
        set $block_common_exploits 1;
    }
    if ($query_string ~ "_REQUEST(=|\\\\[|\\\\%[0-9A-Z]{0,2})") {
        set $block_common_exploits 1;
    }
    if ($query_string ~ "proc/self/environ") {
        set $block_common_exploits 1;
    }
    if ($query_string ~ "mosConfig_[a-zA-Z_]{1,21}(=|\\\\%3D)") {
        set $block_common_exploits 1;
    }
    if ($query_string ~ "base64_(en|de)code\\\\(.*\\\\)") {
        set $block_common_exploits 1;
    }

if ($block_common_exploits = 1) {
    return 301 /;
}