Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Защита моего бедненького сайта )
Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008 Откуда: Гагастан
Помог: 0 раз(а)
[+][+][+][+][+]
Здрасте, всем!
Возникло пару вопросов:
1) дайте линки на хорошие статьи про БЕЗОПАСНОСТЬ ПРИ РАБОТЕ С СЕССИЯМИ, не надо давать на мануалы.
2) кто-то из здешних модеров однажды сказал мне, что через изображение (при загрузке енго на сайт), нельзя внедрить вредоносный код! а как же EXIF-теги? А?
3) нужно регулярное выражение для проверки имени файла:
пример - md5_стока.mp3 (расширений файлов много, к одному не привяжешь).
заранее спасибон!
EuGen
Отправлено: 21 Июня, 2008 - 16:49:50
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
D1mOn
Отправлено: 21 Июня, 2008 - 17:13:17
Частый гость
Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008 Откуда: Гагастан
Помог: 0 раз(а)
[+][+][+][+][+]
Про статьи: как-то все не то... нужны статьи с секретами от проффи, например, как правильно сравнивать переменные, чтобы не получилось " "== " ", добро пожаловать! заходите все! ) вот типа таких советов
Я отдаю файл на скачку скриптом, название файла зашифровано md5 расширение любое.
Про безопасность можно читать сколь угодно много, а толку? Часто дыра в безопасности кроется вовсе не там, где Вы ожидаете...
Вообще, в Perl есть режим Taint. Благодаря нему взломать скрипт через GET/POST практически невозможно
EuGen
Отправлено: 21 Июня, 2008 - 21:26:59
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Да, но тут речь о php. Есть несколько универсальных советов, которыми, например, я, всегда пользуюсь:
0. Отключить register_globals
1. Не использовать неинициализированные переменные
2. Если переменная ожидается из $_POST - так и забирать ее оттуда, если из $_GET - то из $_GET (то есть как можно реже использовать массив $_REQUEST)
3. Всегда приводить переменные к тем типам, которого они должны быть по логике скрипта
4. Каким бы способом ни была получена переменная, экранировать ее при подстановке в запрос. Для строк - это mysql_real_escape_string или addslashes (есть ситуации, когда подходит только второе); для чисел с плавающей точкой это (double)$var, ну а для целых это (int)$var
5. В отношении данных, пришедших от пользователя, действует презумпция виновности. То есть их всегда нужно проверять на соответствие логике скрипта.
6. Вести логирование самых важных действий. (Что самое важное - решается в каждой ситуации отдельно)
7. Сначала запретить все, что можно; а затем - разрешить только то, что необходимо. Это правило распространяется как на права пользователя, работающего с БД, так и на права на файлы, которые используются в работе веб-приложения на сервере.
8. Всегда проверять файлы, загружаемые пользователем. То есть размер, по возможности - тип (не все браузеры определяют mime-тип, но чаще всего этим можно пользоваться). Ну и, конечно, is_uploaded_file
9. Все скрипты, работающие в режиме backend системы (то есть, например, те, которые являются php-демонами или скриптами, запускаемыми по cron), должны быть никак недоступны пользователям из web. Это относится и к данным, которые они генерируют. (например, логи)
10. В местах, которые доступны пользователям из web, никогда не хранить ничего, что может быть отдано веб-сервером как какой-либо контент, если это не предусматривается логикой системы. Особенно важно, чтобы старые версии файлов php не сохранялись там под именами, например, file.php.old.
11. Система всегда тестируется со всеми включенными ошибками (то есть error_reporting(2047))
12. После тестирования уровень сообщения об ошибках обязательно нужно установить в 0.
Ну вот вроде все, что вспоминается, пока что. Но может быть, еще что-то будет.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Гость
Отправлено: 21 Июня, 2008 - 21:43:51
УДАЛЁН
Позволю себе прокомментировать
Цитата:
0. Отключить register_globals
1. Не использовать неинициализированные переменные
Разумеется... Не знаю зачем вообще придумали эти опции... Неиницилизированная переменная и ручная посылка ?somevar=somevar делает бесконечно опасную дыру в безопасности (Особенно если взломщик знает, как функционирует скрипт)
Цитата:
2. Если переменная ожидается из $_POST - так и забирать ее оттуда, если из $_GET - то из $_GET (то есть как можно реже использовать массив $_REQUEST)
3. Всегда приводить переменные к тем типам, которого они должны быть по логике скрипта
4. Каким бы способом ни была получена переменная, экранировать ее при подстановке в запрос. Для строк - это mysql_real_escape_string или addslashes (есть ситуации, когда подходит только второе); для чисел с плавающей точкой это (double)$var, ну а для целых это (int)$var
Точно! Ничто не запрещает взломщику подделать форму (Тем более для этого даже не надо знать исходного кода скрипта)... А если скрипт обработает фейковые данные, может быть много проблем
Цитата:
5. В отношении данных, пришедших от пользователя, действует презумпция виновности. То есть их всегда нужно проверять на соответствие логике скрипта.
7. Сначала запретить все, что можно; а затем - разрешить только то, что необходимо. Это правило распространяется как на права пользователя, работающего с БД, так и на права на файлы, которые используются в работе веб-приложения на сервере.
8. Всегда проверять файлы, загружаемые пользователем. То есть размер, по возможности - тип (не все браузеры определяют mime-тип, но чаще всего этим можно пользоваться). Ну и, конечно, is_uploaded_file
Вот-вот! Я про это же говорил... В Perl это называется режимом Taint с "меченными" данными... Не знаю, есть ли в PHP автломатическая аналогия?
Цитата:
6. Вести логирование самых важных действий. (Что самое важное - решается в каждой ситуации отдельно)
9. Все скрипты, работающие в режиме backend системы (то есть, например, те, которые являются php-демонами или скриптами, запускаемыми по cron), должны быть никак недоступны пользователям из web. Это относится и к данным, которые они генерируют. (например, логи)
10. В местах, которые доступны пользователям из web, никогда не хранить ничего, что может быть отдано веб-сервером как какой-либо контент, если это не предусматривается логикой системы. Особенно важно, чтобы старые версии файлов php не сохранялись там под именами, например, file.php.old.
11. Система всегда тестируется со всеми включенными ошибками (то есть error_reporting(2047))
12. После тестирования уровень сообщения об ошибках обязательно нужно установить в 0.
Ну тут нечего и сказать... BackUp - защита от любого зла )
D1mOn
Отправлено: 22 Июня, 2008 - 03:50:56
Частый гость
Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008 Откуда: Гагастан
Помог: 0 раз(а)
[+][+][+][+][+]
Юджин, большое спасибо за дельные советы! Еще бы хотелось довавить, что для защиты, можно использовать константы, так их нельзя изменить.
Пример:
Юджин, но все таки мне еще нужно регулярное выражение, для проверки имени файла, переданного скрипту (Добавление)
Еще посоветуйте защиту от ДОС атак. Я подумал, может в сессии засекать время последнего действия, а потом его сравнивать с текущим, и если разница оч маленькая, то значит фтопку ) Может есть проще/круче/быстрее?
D1mOn
Отправлено: 22 Июня, 2008 - 12:16:50
Частый гость
Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008 Откуда: Гагастан
Помог: 0 раз(а)
[+][+][+][+][+]
Так! С регулярным я разобрался! Но пока разбирался, возникли еще вопросы:
надо ли мне платить за Primary и Secondary услуги у руцентра, если я беру хостинг не у них, и хостер выдает мне ДНС сервера?
EuGen
Отправлено: 22 Июня, 2008 - 12:37:12
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Насчет DOS и DDOS - атак. Это очень серьезная тема по ИБ. И не существует 100% способа защиты. Строго говоря, если иметь в достатке подконтрольных сетей, можно "положить" даже суперкластер Google.
Есть, однако, защита от тех видов атак, которые ведутся неумелыми хакерами. Вот то, что я применяю в одном из ведомых проектов (не так давно столкнулся с DOS-атаками и угрозами о том, что они будут продолжаться, если на XXX-счет не будет переведена N-я сумма $$$)
Первое - распределение нагрузки. Это использование нескольких серверов. По сути, это всего лишь увеличение мощности - против слабых DOS атак помогает. В этом помогает надежный frontend-демон nginx и репликация данных.
Второе - использование фильтрующей аппаратуры. Вообще говоря, она бывает разная, и последние образцы очень дорогостоящие (стоимость ряда моделей Cisco с фильтрацией и анализом трафика на 5-6 уровнях OSI измеряется в сотнях тысяч долларов США). Такое решение, как правило, не ставится на конкретный проект (слишком дорогое), за исключением "суперпроектов" вроде Google, оно ставится на целый датацентр, обслуживающий множество серверов. Это решение - очень эффективно, но и оно не гарантирует 100% защиты.
Третье, которые надо было бы написать еще "нулевым" - проведение стресс-тестов системы. То есть искуственно пробовать генерировать высокие нагрузки. Иногда для этого применяются системы тестирования (тоже, кстати, очень недешевые). И анализ поведения системы с последующей оптимизацией. Например, мне удалось оптимизировать после таких тестов ряд SQL запросов на 3-4 порядка по быстродействию (то есть примерно в 10 тысяч раз), но это далеко не всегда удается сделать.
И вообще, помогает знание узких мест своей системы, ведь где тонко - там и рвется.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
D1mOn
Отправлено: 22 Июня, 2008 - 13:17:57
Частый гость
Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008 Откуда: Гагастан
Помог: 0 раз(а)
[+][+][+][+][+]
Юджин, увеличение серверных мощностей: если на хостинге сидим, что можно предпринять? Заказать несколько акков у хостера? Я бы поставил сайт на собственный домашний сервер, но опять все сводится к двум проблемам:
1) Не нашел информации по проделованию такой операции
2) Боюсь выложить бабосы за дос атаки (((
Мне нужно много места, а максимум что я нашел у хостеров - 14 гигов, но этого мне хватит на 6 месяцев (((
я хз че делать, фак! (извините)
EuGen
Отправлено: 22 Июня, 2008 - 13:30:50
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Если проект сильно важный и по-настоящему серьезный, под него всегда покупается отдельный сервер или даже серверная площадка, с размещением в крупном датацентре.
(как например, мастерхост или телекомбюро), ни о каком хостинге и речи быть не может.
Деньги отдавать не нужно - если хакеры поймут, что у Вас можно взять, не отступятся.
Как поступают в таких случаях: перенаправляют письмо со всеми заголовками received ("Как есть") специалистам из соответствующих органов (а моем случае - ФСБ), отслеживают почтовый аккаунт, по нему выходят на исполнителя. Как правило, нынешние хакеры гонятся за легкими деньгами, не слишком переживая о безопасности самих себя. Но бывают и исключения.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
D1mOn
Отправлено: 22 Июня, 2008 - 13:40:14
Частый гость
Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008 Откуда: Гагастан
Помог: 0 раз(а)
[+][+][+][+][+]
Стоите, стойте, я никому свои кровные бабосы не отдам! Отдел 'К' рулит )
А если проект серьезный, но делают его не Лебедев, Попков и т.д. значит он не выжевет? А сколько сервер стоит? Вы имеете ввиду аренда или именно покупка сервера?
EuGen
Отправлено: 22 Июня, 2008 - 14:27:17
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
В зависимости от серьезности. Покупка - если очень серьезный. По ценам.. ну, к примеру, сервер новой в 2006-м конфигурации стоил 5000$.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
D1mOn
Отправлено: 22 Июня, 2008 - 14:51:06
Частый гость
Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008 Откуда: Гагастан
Помог: 0 раз(а)
[+][+][+][+][+]
Да ну нах!
Юджин, расскажите про безопасность при работе с сессиями )
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.