Понедельник, 25 Ноября 2024, 05:20

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Безопасность - важные моменты.
OgnevedДата: Среда, 10 Августа 2011, 14:42 | Сообщение # 1
был не раз
Сейчас нет на сайте
Пишем свою игру(на PHP, JS(ajax)). Наш первый опыт, потому вопросов возникает очень много.. вот один из них поднялся по поводу безопасности:
- основное требование к передаче переменных из скрипта в скрипт - передавать их через сессию или методом POST имхо как мы поняли GET ломается очень легко - проставлением нужных параметров в адресную строку, отсюда и получаются "телепортеры" и прочая "молодая хакерская нечисть".
- устанавливать везде защиту от SQL/PHP-иньекций.
- Обрабатывать тексты вводимые пользователем HTMLSPECIALCHARS чтобы написанные скрипты не включались в работу а просто выводились текстом.
Вот пока тот перечень что смогли найти.
Просмотрели "движки" браузерок с инета - во фришках там вообще куча дырок совсем логичных.
Купили движок - за 1500$ - как бы не было противно но надеялись что там будет что либо стоящее, а по факту там еще хуже чем во "фришках", код империи прошел три - четыре "хозяина", которые явно дописывали что им хотелось, при этом удаляя участки кода предыдущих.... в общем там еще хуже с безопасностью....
И вообще сделан вывод что все фришки собственно потому в сети и есть что их получили SQL/PHP-иньекцией, и собственно никто никогда не заморачивается защитой... даже в игре можно в GET подставлять переменные и портаться среди локаций...
Если есть кто либо готовый помочь с безопасностью начиная от обычного теста игры и нахождения дыр до участия в проекте как "безопасника" - welcome.


Сообщение отредактировал Ogneved - Среда, 10 Августа 2011, 14:49
FlamebergeДата: Среда, 10 Августа 2011, 15:39 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
возможно "баян" и вы это уже учли но всё-же. есть старые и не очень сайты "античат" и "хакзона". в обоих есть инфо о ручной настройке безопасности сайтов. в античате есть такая услуга под названием "аудит безопасности". берут 25к деревянных за каждый метр кода(именно кода, без картинок и стилей). если опыта в безопасности маловато - советую обратится к ним.
guerreroДата: Среда, 10 Августа 2011, 15:51 | Сообщение # 3
был не раз
Сейчас нет на сайте
Quote
- основное требование к передаче переменных из скрипта в скрипт - передавать их через сессию или методом POST имхо как мы поняли GET ломается очень легко


Передача данных методом POST ломается точно также, как и GET. Основная защита от взлома, не доверять данным, полученным от пользователя. Например, если игрок находится в точке X,Y, а отправляет данные на перемещение в точку X2,Y2, то программист должен проверить, может ли игрок переместится в эту точку (эта точка соседняя, она проходима и не занята другим игроком), если такое перемещение возможно, надо сохранить новые координаты игрока(X2,Y2), если нет - координаты игрока не изменяются. Точно также надо поступать с остальными данными.

Quote
- устанавливать везде защиту от SQL/PHP-иньекций.

Это обязательно:)
Если данные, получаемые от пользователя должны быть числом, следует их обрабатывать как
Code
$var = intval($_GET['var']);

либо, если число вещественное:
Code
$var = floatval($_GET['var']);

Если же получаемые данные другие, следует их обрабатывать функцией mysql_real_escape_string и только потом подставлять в mysql запрос.

Quote
- Обрабатывать тексты вводимые пользователем HTMLSPECIALCHARS чтобы написанные скрипты не включались в работу а просто выводились текстом.

Да, это поможет избавиться от межсайтого скриптинга, но эту функцию надо использовать с умом.

Также следует уделить особое внимание загрузке пользовательских файлов, например, аватарок. Перед сохранением файла следует проверять его расширение, MIME-заголовок, и через .htaccess запретить выполнение любых скриптов в директории, где будут храниться эти файлы.

Также советую установить следующие параметры php:
1) register_globals = Off
2) magic_quotes_gpc = Off
Эти директивы в php5.3.x считаются устаревшими, а в php6 вообще будут удалены:)
anton-garДата: Среда, 10 Августа 2011, 16:46 | Сообщение # 4
WEBmaster
Сейчас нет на сайте
Quote (Ogneved)
основное требование к передаче переменных из скрипта в скрипт - передавать их через сессию или методом POST имхо как мы поняли GET ломается очень легко - проставлением нужных параметров в адресную строку, отсюда и получаются "телепортеры" и прочая "молодая хакерская нечисть".


Сессиями или "кукисами".

Quote (Ogneved)
- устанавливать везде защиту от SQL/PHP-иньекций.


А как же без этого?

Quote (Ogneved)

- Обрабатывать тексты вводимые пользователем HTMLSPECIALCHARS чтобы написанные скрипты не включались в работу а просто выводились текстом.


Это как минимум.

Добавлено (10.08.2011, 16:46)
---------------------------------------------
Если что-то не понятно ещё, то можно ко мне в "л.с" постучать.


a112Дата: Среда, 10 Августа 2011, 17:00 | Сообщение # 5
участник
Сейчас нет на сайте
Есть 2 вида взломщиков:
1. Умные.
2. Те, которые думают что они умные.
От первых защитится невозможно в принципе, т.е. если захотят - взломают. Не через сайт, так через хостинг, фтп, ssh, мыло вскроют - да много чего есть.
Со вторыми проще, но как раз от вторых 90% всех бед.
Quote
етодом POST имхо как мы поняли GET ломается очень легко

ГЕТ от ПОСТа, по сути, отличается только максимальным объёмом передаваемой информации. Никаких "защит" в них нет, они просто передают параметры.
Когда вы пишете скрипт в который пользователь передаёт данные, то нужно строго описывать все варианты данных, которые могут прийти. И неважно приходят они ГЕТом или ПОСТом.
Например обработчик того же перемещения. Думаем - могут передать что угодно, а должно быть целое положительное число. Я всегда делаю так:
Code
$var = $_GET['var']*1; -умножаем на 1. Если пришло не число - в переменной будет 0. Этой строкой мы убрали всё нехорошести, которые можно передать:)
Далее проверяем чтоб был не ноль и не отрицательное
if (($var != 0) && ($var > 0)) { // Далее проверка на, скажем, существование координат для перехода.
         $sql = "SELECT * FROM koordinaty WHERE id = $var";
         $res = mysql_query($sql) or die(mysql_error());//Вытягиваем координаты
       $num_rows = mysql_num_rows($res);
              if( $num_rows != 0 ){ //если данные есть - идём далее
       $arr = mysql_fetch_assoc($res); //Вытягиваем ассоциативный массив к примеру и с ним далее работаем

              } else //Если координат нету, тоже можем что-то написать, послать в топку или забанить или ещё чего-то.
} else //Что-то пишем или тупо хедером посылаем фтопку

Для текстовых данных достаточно будет
$data = strip_tags(trim(htmlspecialchars($data, ENT_QUOTES)));
, и то strip_tags и trim можно убрать, смотря что фильтруем.
То есть проверки, проверки и ещё раз проверки. Их много не бывает:)


топ браузерных игр

Сообщение отредактировал a112 - Среда, 10 Августа 2011, 19:28
guerreroДата: Среда, 10 Августа 2011, 17:11 | Сообщение # 6
был не раз
Сейчас нет на сайте
Quote (anton-gar)
Сессиями или "кукисами".

Я так понимаю, что ТС нужно передавать данные от пользователя к скрипту, каким образом это будет происходить через сессии?

Переменную от браузера скрипту можно передать только через POST/GET или cookies. Cookies также легко подделать(в Опере: Инструменты=> Управление cookies). Так стоит ли заморачиваться над этим?!

Также стоит задуматься над ограничениями кукисов:
1) Они являются частью http-заголовка, т.е. каждый раз, при обращении к любому скрипту, эти кукисы отправляются на сервер.
2) Ограничен размер данных кукисов - 4096 символов (это включая знак равенства и имя самой куки)

Пруф-линки не привожу, они легко гуглятся.
anton-garДата: Среда, 10 Августа 2011, 17:13 | Сообщение # 7
WEBmaster
Сейчас нет на сайте
Quote (a112)
Их много не бывает:)


Вот это точно!


OgnevedДата: Среда, 10 Августа 2011, 18:49 | Сообщение # 8
был не раз
Сейчас нет на сайте
Quote (Flameberge)
советую обратится к ним.

все бы хорошо, но доверить безопасность проекта другой компании довольно сложно - в юридическом плане.
Да и рассчитывать на другие компании не хочется, тут либо учиться самим либо брать в команду человека и учиться вместе с ним. smile
Ну как я понял, мы почти все учли???
осталось только.. дописать везде защиту...........


Сообщение отредактировал Ogneved - Среда, 10 Августа 2011, 21:27
anton-garДата: Среда, 10 Августа 2011, 23:05 | Сообщение # 9
WEBmaster
Сейчас нет на сайте
Quote (Ogneved)
тут либо учиться самим, либо брать в команду человека и учиться вместе с ним.


Если брать человека в команду, то профессионала, и спрашивать, если хочешь сам этому научиться, а не учится вместе с ним +)


OgnevedДата: Среда, 10 Августа 2011, 23:16 | Сообщение # 10
был не раз
Сейчас нет на сайте
ну все знать не возможно... потому так или иначе придется учиться
maker-rusДата: Среда, 10 Августа 2011, 23:19 | Сообщение # 11
Гений
Сейчас нет на сайте
Quote
Я так понимаю, что ТС нужно передавать данные от пользователя к скрипту, каким образом это будет происходить через сессии?

Если вы внимательно читали или знаете php... В чем у меня уже появились сомнения.
ТО в сессиях данные передаются так:
Code

session_start(); // старт сессий
$_SESSION['название переменной'] = "значение";
// Например надо вывести имя.
$_SESSION['name'] = 'Test';
echo $_SESSION['name'];

Подробнее тут...
Я в принципе могу помочь... Но я не профи в безопасности php...


Сообщение отредактировал maker-rus - Среда, 10 Августа 2011, 23:23
anton-garДата: Среда, 10 Августа 2011, 23:25 | Сообщение # 12
WEBmaster
Сейчас нет на сайте
Quote (guerrero)

Я так понимаю, что ТС нужно передавать данные от пользователя к скрипту, каким образом это будет происходить через сессии?


Читайте внимательней! И только потом начинайте возмущаться!
Quote (Ogneved)
из скрипта в скрипт


maker-rusДата: Среда, 10 Августа 2011, 23:27 | Сообщение # 13
Гений
Сейчас нет на сайте
anton-gar, хм... сессии сохраняются на протяжении посещения ВСЕГО САЙТА! Не пиши глупостей smile

Сообщение отредактировал maker-rus - Среда, 10 Августа 2011, 23:28
anton-garДата: Среда, 10 Августа 2011, 23:29 | Сообщение # 14
WEBmaster
Сейчас нет на сайте
Quote (maker-rus)
anton-gar, хм... сессии сохраняются на протяжении посещения ВСЕГО САЙТА! Не пиши глупостей


Согласен! А в чём глупость - обоснуй, я про сохранения сессий вообще не говорил!!!!




Сообщение отредактировал anton-gar - Среда, 10 Августа 2011, 23:33
maker-rusДата: Среда, 10 Августа 2011, 23:36 | Сообщение # 15
Гений
Сейчас нет на сайте
Quote
А в чём глупость - обоснуй, я про сохранения сессий вообще не говорил!!!!

Quote
Читайте внимательней! И только потом начинайте возмущаться!
Quote (Ogneved)
из скрипта в скрипт

Извини, а куда они по твоему сохраняются?! Это ты считаешь умным высказыванием?!
OgnevedДата: Среда, 10 Августа 2011, 23:37 | Сообщение # 16
был не раз
Сейчас нет на сайте
Quote (maker-rus)
Я в принципе могу помочь... Но я не профи в безопасности php...

вот тут именно нужно кто сталкивался и знает о защите хотя бы минимальный набор требований но готов постоянно повышать свой уровень знаний
maker-rusДата: Среда, 10 Августа 2011, 23:40 | Сообщение # 17
Гений
Сейчас нет на сайте
Ogneved, хм 4 год за спиной в работе с php.
Встречался:
- XSS
- Sql Inj.
- Php inc.
anton-garДата: Среда, 10 Августа 2011, 23:41 | Сообщение # 18
WEBmaster
Сейчас нет на сайте
maker-rus, желательно просматривать контекст полностью, а не только ответ, думаю, посмотрев, вы поймёте про что я говорил...
В данном случаи твои высказывания на мой счёт бессмысленны!
Удачи!


maker-rusДата: Среда, 10 Августа 2011, 23:42 | Сообщение # 19
Гений
Сейчас нет на сайте
Quote
В данном случаи твои высказывания на мой счёт бессмысленны!

Грамотная отмазка!
Вам тоже удачи, спорить не буду. (ибо это плохо кончиться не только для меня)
OgnevedДата: Среда, 10 Августа 2011, 23:44 | Сообщение # 20
был не раз
Сейчас нет на сайте
Quote (maker-rus)
Встречался:
- XSS
- Sql Inj.
- Php inc.

Давай попробуем.. мы с 15 августа запускаем ЗБТ и постораемся прикрыть все дыры... по нашему мнению.. попробуешь как игрок выделить какие либо особенности.. а там дальше посмотрим
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг