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 :: Защита моего бедненького сайта )

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
D1mOn
Отправлено: 21 Июня, 2008 - 15:48:29
Post Id



Частый гость


Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008  
Откуда: Гагастан


Помог: 0 раз(а)

[+][+][+][+][+]


Здрасте, всем!
Возникло пару вопросов:
1) дайте линки на хорошие статьи про БЕЗОПАСНОСТЬ ПРИ РАБОТЕ С СЕССИЯМИ, не надо давать на мануалы.
2) кто-то из здешних модеров однажды сказал мне, что через изображение (при загрузке енго на сайт), нельзя внедрить вредоносный код! а как же EXIF-теги? А?
3) нужно регулярное выражение для проверки имени файла:
пример - md5_стока.mp3 (расширений файлов много, к одному не привяжешь).

заранее спасибон!
 
 Top
EuGen Администратор
Отправлено: 21 Июня, 2008 - 16:49:50
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Ответ на первый вопрос сразу же дает обычный поиск в google. Вот ряд ссылок:
http://www[dot]getinfo[dot]ru/article250[dot]html
http://www[dot]cubes[dot]com[dot]ua/document[dot][dot][dot]p_user_sessions4
http://www[dot]providerz[dot]ru/articles[dot][dot][dot]hp/sessions[dot]html
На второй вопрос - а кто будет интерпретировать эти теги? Они же не более чем дополнительная информация. Сильно сомневаюсь что это будет делать Ваш веб-сервер.
А в третьем вопросе вообще непонятно, что за выражение Вам нужно. Опишите, что за группу файлов вы хотите получить, поподробнее.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
D1mOn
Отправлено: 21 Июня, 2008 - 17:13:17
Post Id



Частый гость


Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008  
Откуда: Гагастан


Помог: 0 раз(а)

[+][+][+][+][+]


Про статьи: как-то все не то... нужны статьи с секретами от проффи, например, как правильно сравнивать переменные, чтобы не получилось " "== " ", добро пожаловать! заходите все! ) вот типа таких советов

Я отдаю файл на скачку скриптом, название файла зашифровано md5 расширение любое.

download.php?file=8gap0wmjpdgjap0jgm.avi (примерчег)

переменую $_GET['file'] мне и нужно проверить, что гадкий хакеренышь ) не подствил слэшики и т.д.

(Отредактировано автором: 21 Июня, 2008 - 17:24:16)

 
 Top
valenok Модератор
Отправлено: 21 Июня, 2008 - 17:27:37
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)






-----
Truly yours, Sasha.
 
My status
 Top
Гость
Отправлено: 21 Июня, 2008 - 20:35:43
Post Id


УДАЛЁН










Про безопасность можно читать сколь угодно много, а толку? Часто дыра в безопасности кроется вовсе не там, где Вы ожидаете...
Вообще, в Perl есть режим Taint. Благодаря нему взломать скрипт через GET/POST практически невозможно
 
 Top
EuGen Администратор
Отправлено: 21 Июня, 2008 - 21:26:59
Post Id


Профессионал


Покинул форум
Сообщений всего: 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.

Ну вот вроде все, что вспоминается, пока что. Но может быть, еще что-то будет.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Гость
Отправлено: 21 Июня, 2008 - 21:43:51
Post Id


УДАЛЁН










Позволю себе прокомментировать

Цитата:
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 - защита от любого зла Улыбка)
 
 Top
D1mOn
Отправлено: 22 Июня, 2008 - 03:50:56
Post Id



Частый гость


Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008  
Откуда: Гагастан


Помог: 0 раз(а)

[+][+][+][+][+]


Юджин, большое спасибо за дельные советы! Еще бы хотелось довавить, что для защиты, можно использовать константы, так их нельзя изменить.
Пример:
PHP:
скопировать код в буфер обмена
  1.  
  2. // Определяем константу, только в нашей странице
  3. define('SECURITY', true);
  4.  
  5. // И в подключаемых файлах (модулях) делаем проверку
  6. if(!defined('SECURITY')) die();
  7.  


Юджин, но все таки мне еще нужно регулярное выражение, для проверки имени файла, переданного скрипту
(Добавление)
Еще посоветуйте защиту от ДОС атак. Я подумал, может в сессии засекать время последнего действия, а потом его сравнивать с текущим, и если разница оч маленькая, то значит фтопку ) Может есть проще/круче/быстрее?
 
 Top
D1mOn
Отправлено: 22 Июня, 2008 - 12:16:50
Post Id



Частый гость


Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008  
Откуда: Гагастан


Помог: 0 раз(а)

[+][+][+][+][+]


Так! С регулярным я разобрался! Но пока разбирался, возникли еще вопросы:
надо ли мне платить за Primary и Secondary услуги у руцентра, если я беру хостинг не у них, и хостер выдает мне ДНС сервера?
 
 Top
EuGen Администратор
Отправлено: 22 Июня, 2008 - 12:37:12
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Насчет DOS и DDOS - атак. Это очень серьезная тема по ИБ. И не существует 100% способа защиты. Строго говоря, если иметь в достатке подконтрольных сетей, можно "положить" даже суперкластер Google.
Есть, однако, защита от тех видов атак, которые ведутся неумелыми хакерами. Вот то, что я применяю в одном из ведомых проектов (не так давно столкнулся с DOS-атаками и угрозами о том, что они будут продолжаться, если на XXX-счет не будет переведена N-я сумма $$$)
Первое - распределение нагрузки. Это использование нескольких серверов. По сути, это всего лишь увеличение мощности - против слабых DOS атак помогает. В этом помогает надежный frontend-демон nginx и репликация данных.
Второе - использование фильтрующей аппаратуры. Вообще говоря, она бывает разная, и последние образцы очень дорогостоящие (стоимость ряда моделей Cisco с фильтрацией и анализом трафика на 5-6 уровнях OSI измеряется в сотнях тысяч долларов США). Такое решение, как правило, не ставится на конкретный проект (слишком дорогое), за исключением "суперпроектов" вроде Google, оно ставится на целый датацентр, обслуживающий множество серверов. Это решение - очень эффективно, но и оно не гарантирует 100% защиты.
Третье, которые надо было бы написать еще "нулевым" - проведение стресс-тестов системы. То есть искуственно пробовать генерировать высокие нагрузки. Иногда для этого применяются системы тестирования (тоже, кстати, очень недешевые). И анализ поведения системы с последующей оптимизацией. Например, мне удалось оптимизировать после таких тестов ряд SQL запросов на 3-4 порядка по быстродействию (то есть примерно в 10 тысяч раз), но это далеко не всегда удается сделать.
И вообще, помогает знание узких мест своей системы, ведь где тонко - там и рвется.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
D1mOn
Отправлено: 22 Июня, 2008 - 13:17:57
Post Id



Частый гость


Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008  
Откуда: Гагастан


Помог: 0 раз(а)

[+][+][+][+][+]


Юджин, увеличение серверных мощностей: если на хостинге сидим, что можно предпринять? Заказать несколько акков у хостера? Я бы поставил сайт на собственный домашний сервер, но опять все сводится к двум проблемам:
1) Не нашел информации по проделованию такой операции
2) Боюсь выложить бабосы за дос атаки (((

Мне нужно много места, а максимум что я нашел у хостеров - 14 гигов, но этого мне хватит на 6 месяцев (((

я хз че делать, фак! (извините)
 
 Top
EuGen Администратор
Отправлено: 22 Июня, 2008 - 13:30:50
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Если проект сильно важный и по-настоящему серьезный, под него всегда покупается отдельный сервер или даже серверная площадка, с размещением в крупном датацентре.
(как например, мастерхост или телекомбюро), ни о каком хостинге и речи быть не может.
Деньги отдавать не нужно - если хакеры поймут, что у Вас можно взять, не отступятся.
Как поступают в таких случаях: перенаправляют письмо со всеми заголовками received ("Как есть") специалистам из соответствующих органов (а моем случае - ФСБ), отслеживают почтовый аккаунт, по нему выходят на исполнителя. Как правило, нынешние хакеры гонятся за легкими деньгами, не слишком переживая о безопасности самих себя. Но бывают и исключения.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
D1mOn
Отправлено: 22 Июня, 2008 - 13:40:14
Post Id



Частый гость


Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008  
Откуда: Гагастан


Помог: 0 раз(а)

[+][+][+][+][+]


Стоите, стойте, я никому свои кровные бабосы не отдам! Отдел 'К' рулит )

А если проект серьезный, но делают его не Лебедев, Попков и т.д. значит он не выжевет? А сколько сервер стоит? Вы имеете ввиду аренда или именно покупка сервера?
 
 Top
EuGen Администратор
Отправлено: 22 Июня, 2008 - 14:27:17
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




В зависимости от серьезности. Покупка - если очень серьезный. По ценам.. ну, к примеру, сервер новой в 2006-м конфигурации стоил 5000$.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
D1mOn
Отправлено: 22 Июня, 2008 - 14:51:06
Post Id



Частый гость


Покинул форум
Сообщений всего: 222
Дата рег-ции: Янв. 2008  
Откуда: Гагастан


Помог: 0 раз(а)

[+][+][+][+][+]


Да ну нах!

Юджин, расскажите про безопасность при работе с сессиями )
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB