Форум программистов, компьютерный форум, киберфорум
Безопасность сайтов и серверов
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 1
Регистрация: 04.10.2019
Сообщений: 40
1

Как обеспечить безопасность приложению на php?

14.04.2020, 13:38. Просмотров 357. Ответов 5
Метки нет (Все метки)

Привет всем. Есть веб приложение, написанное на php. Везде навтыкал ловушек, которые как в мои внутренние логи пишут входящие и после валидации данные из обработчиков форм. Не используются GET запросы, исключительно POST. Хотелось поинтересоваться у опытных людей, что еще можно сделать для улучшения безопасности?
Что у меня есть:
У меня есть:
1. обработка полей, по удалению из них всяких символов функцией trim
2. Поиск и удаление внутри не нужных полей всяких спец символов replace
3. Берется исключительно изначально задуманная длина поля (как ограничено в HTML форме)
4. И наконец использую бинды mysqli например:
PHP
1
2
3
4
5
...
$stmt = $mysqli->prepare('INSERT INTO test (name1,  name2,  name3) VALUES (?,?,?)');
$stmt->bind_param('sss', $name1, $name2, $name3);
$stmt->execute();
...
Вот уважаемые форумчане, недавно заметил атаку, попалась на мои "Ловушки" и увидел что пытаются сделать sql инъекции и так же просто спамят запросами.... забивают папку tmp причем запросы есть и частные и не очень... Естественно меняется IP... Хотелось бы узнать ваше мнение как можно избавиться от подобных запросов. Обратился к оператору, они включили фильтр, запросы прекратились, но тогда и не работают запросы от платежных систем (они подтверждают факт оплаты), выдал список IP адресов с которых платежка шлет ответы, сказали передали отделу администрирования и уже 4ый день тишина, запросы то прекращаются то вновь возобновляются. Подскажите что лучше сделать в такой ситуации?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2020, 13:38
Ответы с готовыми решениями:

обеспечить безопасность данных
Вот задача. Есть офис 20 компов. вин хр - пиратки. Стоит сетевая 1с (офиц), выходить надо в нее...

Обеспечить безопасность файла?
Вопрос к админам и программерам: можно ли средствами Windows сделать так, чтобы какой-то файл,...

PHP как оконное приложение, безопасность
Если писать работу с MySQL для клиентской части (подключение, запись/чтение) возможно ли утянуть...

безопасность. как предусмотреть защиту на php
Здраствуйте. Пишу систему для монитора мнений сотрудников+ чат между ними. У меня есть вопросы по...

5
15 / 11 / 4
Регистрация: 12.10.2019
Сообщений: 35
14.04.2020, 17:36 2
По порядку.

Во-первых, "1. обработка полей, по удалению из них всяких символов функцией trim" - trim() по своей сути предназначена для удаления пробелов и разных не отображаемых символов из начала и конца строки. Использование данной функции рекомендовано, но не имеет никакого отношения к безопасности.

Во-вторых, "2. Поиск и удаление внутри не нужных полей всяких спец символов replace" - это ошибочный путь по постановке задачи. НИКОГДА не исправляйте входные данные! Входные данные можно проверять или обрабатывать, но не чистить. Помимо того, что Вы просто создадите ненужную нагрузку на сервер, велика вероятность, что Ваша очистка будет или не полной, или обходимой с использованием сложных конструкций. Поэтому, если Вы знаете, что значение параметра не соответствует тому, что задумано, Вам нужно просто выдавать соответствующую ошибку, желательно с указанием проблемы (чтобы не озадачивать криворуких посетителей).

В-третьих, помимо SQL инъекций есть еще атаки типа cross-site scripting (XSS). Если Вы затем выдаете введенные данные на страницах, их нужно либо обрабатывать функцией htmlentities(), либо, при обнаружении в данных тегов или JS кода отклонять ввод.

Касательно защиты от флудов и нагрузки, вызванной атаками. Здесь гарантированных решений нет. В общем случае есть две рекомендации. Первое - можно включить облачную защиту. Это - то, что сделали Вы. При этом Вам всегда придется опираться на хостинг, с вытекающими проблемами. Второе - оптимизировать работу Вашего веб-приложения. В частности, не пытаться обработать запрос, если Вам ясно, что он злонамеренный. Как только видите, что на вход идет что-то не то, выдавайте ошибку.

Касательно связи с биллингами. Для такой проблемы есть стандартное решение: разместить скрипты, обрабатывающие запросы от биллинга, на отдельный субдомен или, предпочтительно, домен, желательно, с отдельным айпишником. При этом Вы сможете просто ограничить доступ к этому отдельному домену в фаерволе, или, в крайнем случае, в конфиге апача. Соответственно, запросы к этому вхосту не будут перегружать сервер, а на основном домене Вы можете поставить облачную защиту.
1
0 / 0 / 1
Регистрация: 04.10.2019
Сообщений: 40
14.04.2020, 17:52  [ТС] 3
Спасибо за развернутый ответ. Можете пояснить по поводу htmlentities()... Уже не вспомню в каком то блоге читал, что эта функция бесполезна... Так ли это? И да... нет полей типа комментариев, выводится только конкретным запросом из БД на страницу типа таблички и всё такое, то что вводится в формах не выводится на страницах.
0
15 / 11 / 4
Регистрация: 12.10.2019
Сообщений: 35
14.04.2020, 18:16 4
Касательно htmlentities(). С ней нужно уметь работать и при этом помнить о трех вещах. Во-первых, она обеспечивает защиту только в режиме ENT_QUOTES, т.е., когда она кодирует и двойные, и одиночные кавычки. Во-вторых, она не кодирует обратный слеш. Соответственно, если Вам по каким-то причинам нужно разрешить во вводе обратный слеш, то после обработки ввода функцией htmlentities() Вам еще потребуется вручную заменить обратный слеш на его HTML-представление. В-третьих, важно помнить о кодировках ввода. Вообще, в современной жизни лучше почти всегда работать с UTF-8, но, если по каким-то соображениям Вам необходимо работать с конкретной кодировкой типа KOI8-R, ее потребуется указать в вызове данной функции.

Добавлено через 7 минут
Кроме того, бывают особые ситуации, когда данная функция вообще не поможет. Например, если Вы выдаете ввод внутри существующего на странице блока Javascript типа

var i=<?php echo $i; ?>;

или если, например, по какой-то причине Вы вставляете непроверенный ввод внутрь поля href.

Вообще, при работе с любым инструментом требуется обдуманный подход.
1
0 / 0 / 1
Регистрация: 04.10.2019
Сообщений: 40
14.04.2020, 20:25  [ТС] 5
а подготовленные запросы типа
PHP
1
2
3
4
5
...
$stmt = $mysqli->prepare('INSERT INTO test (name1,  name2,  name3) VALUES (?,?,?)');
$stmt->bind_param('sss', $name1, $name2, $name3);
$stmt->execute();
...
Полностью защищают от SQL инъекций или есть способы обхода?
0
15 / 11 / 4
Регистрация: 12.10.2019
Сообщений: 35
14.04.2020, 21:22 6
Насколько я понимаю ситуацию, данная конструкция защищает от инъекций при условии отсутствия уязвимостей в реализации клиентской библиотеки MySQLi.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.04.2020, 21:22

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

PHP и безопасность
Уважаемые знатоки, внимание вопрос. Перед запуском сайта в интернете, опасно ли оставлять...

Безопасность в php
Добрый вечер. Задумался о безопасности в php. К примеру есть такая функция для фильтрации данных:...

безопасность php-кода
Добрый день! Интересует такой вопрос: вот я размещаю свой php-код. Как мне его обезопасить от...

Безопасность php and ajax
ajax вызывает php script передет и получает параметры. В php проверка доступа делается через...

Безопасность сессии PHP
Добрый день, недавно начал изучать PHP. Сперва решил сделать простую логин страничку. Возник вопрос...

Безопасность PHP приложения.
Добрый вечер. Настал тот день и тот час, когда мою систему на PHP нужно выложить в сеть. Система...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.