23.03.2011, 08:35 | #1 |
Пользователь
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
|
Аукцион чаров!
ExAuction - Это сайт реализован для MaNGOS (планируется и Trinity Core), в него входят возможности:
- Выставлять своих персонажей на аукцион для обмена. - Смена ника, пола, (расы, фракции - требуется патч в ядро). - Смена пароля учётной записи. - Смена e-mail учётной записи. - Регистрация новой учётной записи. Последняя стабильная версия 0.29 Git Код:
git://github.com/ExDragon/ExAuction.git Последний раз редактировалось ExDragon; 01.08.2011 в 11:00. |
27.03.2011, 00:09 | #41 |
Новичок
Регистрация: 02.05.2010
Сообщений: 28
Сказал(а) спасибо: 5
Поблагодарили 8 раз(а) в 2 сообщениях
|
А еще лучше использовать библиотеку для работы с бд, DBSimple как пример. И всю логику реализовать в каком-то классе, написать методы insert, update, detete, findById, в которых будут паметризованные запросы. Потом ты сможешь повторно их использовать, возможно даже в другом проекте.
|
11.04.2011, 16:38 | #42 |
Пользователь
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
|
блин на добыло написать I will be back
я сделал ну ка знатоки, скажите свое мнение о безопасности и модульности! тут должны быть ошибки ведь я изменял структуру базы.. может что то пропустил... Смотрите первый пост ах да Код:
CREATE TABLE `auction` ( `guid` int(11) unsigned NOT NULL default '0', `account` int(11) unsigned default '0', `if_class` tinyint(3) unsigned default '0', `if_flag` tinyint(3) unsigned default '0', `if_level` tinyint(3) unsigned default '0', PRIMARY KEY (`guid`), KEY `account` (`account`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Код:
CREATE TABLE `shop` ( `key` int(11) unsigned default '0', `guid` int(11) unsigned NOT NULL default '0', `shop_guid` int(11) unsigned default '0', UNIQUE KEY `key` (`key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Код:
CREATE TABLE `news` ( `id_news` int(11) NOT NULL auto_increment, `name` tinytext NOT NULL, `body` text NOT NULL, `hide` enum('show','hide') NOT NULL default 'show', PRIMARY KEY (`id_news`) ) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8 AUTO_INCREMENT=23 ; Последний раз редактировалось ExDragon; 11.04.2011 в 16:51. |
11.04.2011, 16:43 | #43 |
MaNGOS Dev
Регистрация: 22.06.2010
Сообщений: 78
Сказал(а) спасибо: 24
Поблагодарили 71 раз(а) в 25 сообщениях
|
ExDragon, пользуйтесь транзакциями для работы с БД дабы целостность данных не пострадала. Для этого вам придется создавать таблицы, использующие InnoDB (ENGINE=InnoDB), а не MyISAM.
|
11.04.2011, 16:50 | #44 |
Пользователь
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
|
исправим
|
11.04.2011, 17:33 | #45 | |
Умный
Регистрация: 07.03.2010
Адрес: Северный Урал (60°сш, 60°вд)
Сообщений: 330
Сказал(а) спасибо: 82
Поблагодарили 399 раз(а) в 120 сообщениях
Записей в дневнике: 30
|
Цитата:
Защита от взлома отсутствует напрочь. Я, даже не логинясь, одной хитронаписаной ссылкой смогу запросто стырить персонажа. ГЕТ-ы не проверяются ВООООООООБЩЕ!!!! |
|
11.04.2011, 18:55 | #46 |
Гость
Сообщений: n/a
|
|
12.04.2011, 06:04 | #47 |
Пользователь
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
|
КАК! всё проверяется.. может вы просто увидели сообщение? это модуль простой
|
12.04.2011, 07:06 | #48 | |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Думаю тут замешана
Цитата:
|
|
12.04.2011, 07:26 | #49 |
MaNGOS Dev
Регистрация: 22.06.2010
Сообщений: 78
Сказал(а) спасибо: 24
Поблагодарили 71 раз(а) в 25 сообщениях
|
напрямую выполнять запросы базы данных и не иметь никакой защиты от SQL-инъекций... однако Пользуйтесь mysql_escape_string(), мануалы в интернете.
|
12.04.2011, 07:29 | #50 |
Пользователь
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
|
то есть любые открытые запросы должны защищаться mysql_escape_string().. учту
|
12.04.2011, 07:35 | #51 | |
MaNGOS Dev
Регистрация: 22.06.2010
Сообщений: 78
Сказал(а) спасибо: 24
Поблагодарили 71 раз(а) в 25 сообщениях
|
Цитата:
|
|
12.04.2011, 07:39 | #52 |
Пользователь
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
|
пс она бы и так не прошла
Код:
if (isset($_GET['g'])){ if ($auc->ControlGuid_User($_GET['g'])){ header("Location: http://".$_SERVER['HTTP_HOST']."/".$lk_dir."/?m=message&ge=0"); } } |
12.04.2011, 07:42 | #53 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Кто вам такое сказал.
Спешу вас расстроить, все прошло бы. header("Location: http://".$_SERVER['HTTP_HOST']."/".$lk_dir."/?m=message&ge=0") просто изменяет хедер. На основе которого браузер перенеаправляет на стрницу. Но если вручную послать HTTP запрос и получить ответ, то у нас просто будет в ответе стоять редерект. Но весь вывод будет. |
12.04.2011, 08:58 | #54 |
Пользователь
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
|
что
m=message принимает GET и просто выводит сообщение если его заменить то она выведет другое сообщение вот и всё хм что это я же его вроде менял О_0 возможно это лишние |
12.04.2011, 11:16 | #55 |
Гость
Сообщений: n/a
|
eregi - This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.
mysql_escape_string - This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged. выложил для сравнения предложенные варианты валидации email-а 1. ExDragon 2. shamun 3-4 Праведник $regemail = funcValidEmail(...); if ($regemail && $regname && ..) достаточная проверка далее по коду. скачайте DBSimple...там и транзакции есть и "правильное" закавычивание, ну или mysql_real_escape_string используйте |
Пользователь сказал cпасибо: | ExDragon (12.04.2011) |
12.04.2011, 12:17 | #56 |
Пользователь
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
|
FILTER_VALIDATE_EMAIL тоже показывает хороший результат, может его использовать? я понимаю это макрос.. его нужно писать или он есть в PHP
|
12.04.2011, 12:31 | #57 | |
Гость
Сообщений: n/a
|
Цитата:
http://php.net/manual/en/filter.filters.validate.php |
|
12.04.2011, 13:17 | #58 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Я про то что если вы написали header("Location: любой адрес.")
То это не значит что выполнение скрипта прервется. Вы не увидете результат вывода который произойдет в браузере но он точно также выводится. |
12.04.2011, 15:50 | #59 | |
Пользователь
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
|
Цитата:
пс скоро выложу новую версию с исправленными ошибками и я избавился от GET (кроме сообщений) Подскажите как сделать проверку на - введенный акк состоит из A-Z a-z 0-9 это типа eregi... тока я не пойму как их делать О_0 Последний раз редактировалось ExDragon; 12.04.2011 в 16:21. |
|
12.04.2011, 17:05 | #60 | |
Умный
Регистрация: 07.03.2010
Адрес: Северный Урал (60°сш, 60°вд)
Сообщений: 330
Сказал(а) спасибо: 82
Поблагодарили 399 раз(а) в 120 сообщениях
Записей в дневнике: 30
|
Цитата:
|
|
12.04.2011, 18:49 | #61 | |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Цитата:
|
|
12.04.2011, 19:05 | #62 |
Гость
Сообщений: n/a
|
уже ж выше писал...
НЕ НАДО использовать eregi preg_match('/^[0-9a-z]+$/i',$string) ps так коллективом и сделаем |
12.04.2011, 22:05 | #63 |
Forum bot
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
|
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. |
12.04.2011, 23:15 | #64 | |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Цитата:
..... ой пардон когда начал разбирать не совсем понял. Вообщем этот код не препятствует SQL-inj так-что если правильно передать $_GET['g'] то можно получить любые данный из базы. |
|
12.04.2011, 23:54 | #65 |
MaNGOS Dev
Регистрация: 22.06.2010
Сообщений: 78
Сказал(а) спасибо: 24
Поблагодарили 71 раз(а) в 25 сообщениях
|
|
13.04.2011, 05:15 | #66 |
Пользователь
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
|
ща сделаю регистрацию.. и покажу я убрал это вообще...
Код:
$q_acc = mysql_query('SELECT `username` FROM `account` WHERE `username` = "'.mysql_real_escape_string($_POST['regname']).'"'); if (!$acc = mysql_fetch_assoc($q_acc)){ $Tneme = true; } else { $Tneme = false; } 0.2.2 beta Смотрите первый пост уже лучше Код:
if (iconv_strlen($_POST['regpass1']) >= 6){ if ($_POST['regpass1'] == $_POST['regpass2']){ $Tpass = true; } else { $Tpass = false; $rp = 1; } } else { $Tpass = false; $rp = 2; } Код:
if ($_GET['rp'] == 1){ echo '<div class="error">Пароли не совпадают</div>'; } elseif ($_GET['rp'] == 2) { echo '<div class="error">Пароль должен состоять минимум из 6 символов</div>'; } Последний раз редактировалось NeatElves; 13.04.2011 в 10:37. |
13.04.2011, 10:03 | #67 |
Пользователь
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
|
пс модераторы, можно ли переименовать тему, это уже проект однако
|
13.04.2011, 15:19 | #69 |
Пользователь
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
|
Ну я сделал вторую версию... мне нужно знать где ошибки.. какие нибудь
так вроде всё работает и всё вроде безопасно.. Следующим шагом будет страница правки данных (пароль, маил) mail() Модуль "Новости" И дальше уже нужно тестировать на сервере... но это потом Последний раз редактировалось ExDragon; 13.04.2011 в 15:24. |
14.04.2011, 11:36 | #70 |
Пользователь
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
|
ну вот 0.2.3..
mail() следующий шаг |
14.04.2011, 12:16 | #71 | |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
sql.sql
Цитата:
__________________
SpellWork Qt4 |
|
14.04.2011, 15:47 | #72 |
Пользователь
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
|
я если честно не очень понимаю значение этих строк.. я просто скопировал их... а что не так?
|
14.04.2011, 16:02 | #73 |
Гость
Сообщений: n/a
|
|
14.04.2011, 16:38 | #74 |
Пользователь
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
|
0.2.4! исправил серьёзный баг с регистрацией/авторизацией/смены пароля
убрал AUTO_INCREMENT.. |
14.04.2011, 16:43 | #75 |
Пользователь
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
|
Код:
CREATE TABLE `auction` ( `guid` int(11) unsigned NOT NULL default '0', `account` int(11) unsigned default '0', `if_class` tinyint(3) unsigned default '0', `if_flag` tinyint(3) unsigned default '0', `if_level` tinyint(3) unsigned default '0', PRIMARY KEY (`guid`), KEY `account` (`account`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `shop` ( `key` int(11) unsigned default '0', `guid` int(11) unsigned NOT NULL default '0', `shop_guid` int(11) unsigned default '0', UNIQUE KEY `key` (`key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `news` ( `id_news` int(11) unsigned NOT NULL default '0', `author` varchar(32) default NULL, `name` tinytext NOT NULL, `min` text NOT NULL `full` text NOT NULL `date` timestamp NOT NULL default '0000-00-00 00:00:00', `hide` enum('show','hide') default 'show', PRIMARY KEY (`id_news`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Последний раз редактировалось ExDragon; 14.04.2011 в 16:53. |
15.04.2011, 09:22 | #77 | |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Цитата:
|
|
Пользователь сказал cпасибо: | ExDragon (15.04.2011) |
15.04.2011, 16:29 | #78 |
Пользователь
Регистрация: 02.02.2011
Сообщений: 58
Сказал(а) спасибо: 17
Поблагодарили 0 раз(а) в 0 сообщениях
|
проблема с базой.. а точней с индексами..
Код:
CREATE TABLE `news` ( `id_news` int(11) unsigned NOT NULL default '0', `author` varchar(32) default NULL, `name` tinytext NOT NULL, `min` text NOT NULL `full` text NOT NULL `date` timestamp NOT NULL default '0000-00-00 00:00:00', `hide` enum('show','hide') default 'show', PRIMARY KEY (`id_news`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Проблема состоит в том что каждая новая новость начинается с нуля Код:
`id_news` int(11) unsigned NOT NULL default '0' PRIMARY KEY (`id_news`) |
15.04.2011, 18:54 | #80 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
Так ты убрал автоинкремент) я просто показал на то что он у тебя с 23 начинался)) зачем его убирать надо было? Поставил бы с 1 и все.
__________________
SpellWork Qt4 |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
премейд чаров | Fedia22 | Корзина | 3 | 08.10.2010 15:29 |
Конвертер базы чаров trinity->mangos | Blocker | Корзина | 1 | 09.03.2010 17:45 |