Безопасность - важные моменты.
| |
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) советую обратится к ним. все бы хорошо, но доверить безопасность проекта другой компании довольно сложно - в юридическом плане. Да и рассчитывать на другие компании не хочется, тут либо учиться самим либо брать в команду человека и учиться вместе с ним. Ну как я понял, мы почти все учли??? осталось только.. дописать везде защиту...........
Сообщение отредактировал 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, хм... сессии сохраняются на протяжении посещения ВСЕГО САЙТА! Не пиши глупостей
Сообщение отредактировал 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.
|
|
| | |
maker-rus | Дата: Среда, 10 Августа 2011, 23:42 | Сообщение # 19 |
Гений
Сейчас нет на сайте
| Quote В данном случаи твои высказывания на мой счёт бессмысленны! Грамотная отмазка! Вам тоже удачи, спорить не буду. (ибо это плохо кончиться не только для меня)
|
|
| |
Ogneved | Дата: Среда, 10 Августа 2011, 23:44 | Сообщение # 20 |
был не раз
Сейчас нет на сайте
| Quote (maker-rus) Встречался: - XSS - Sql Inj. - Php inc. Давай попробуем.. мы с 15 августа запускаем ЗБТ и постораемся прикрыть все дыры... по нашему мнению.. попробуешь как игрок выделить какие либо особенности.. а там дальше посмотрим
|
|
| |
|