![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| sugee |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: 1 Всего: 4 |
Привет всем. Есть у меня одна небольшая просьба.
Вот начал форум писать, закончил вроде систему регистрации-авторизации, но есть сомнения... Насколько всё это надёжно, какие есть дыры в безопасности, что нужно исправить или улучшить? Посмотреть и потестировать можно здесь http://restoran-kaz.ho.com.ua/forum/ Исходный код я присоединил, так что сами скрипты я сюда постить не буду, покажу только структуру БД
Для авторизации используется таблица members. Код я подробно прокомментировал, особо меня интересует вот этот момент
Я основывался на алгоритме описанном вот здесь http://vingrad.ru/PHP-PHPSCRIPTS-002849, но насколько эффективно у меня эта идея реализована? Я не вводил ограничений на браузер или на IP, но хотел по возможности исключить возможность подмены куки. P.S. Естественно дальше всё будет усложняться, поскольку будут разные уровни доступа: админы, модераторы, обычные пользователи. Присоединённый файл ( Кол-во скачиваний: 25 )
forum.rar 9,37 Kb |
||||
|
|||||
| smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 7 Всего: 259 |
Мне кажется что те скрипты что ты выложил не отвечают тем, что реально есть.
Потому что в выложенный есть дырка в авторизации. На сайте же она не проявляется. Добавлено @ 18:35 Или у тебя magic_quotes включены |
|||
|
||||
| smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 7 Всего: 259 |
А не
Я просто запрос неверно составлял После правильного пустило под админом Создал тему "В форуме дырка" mysql_real_escape_string не забывай |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: 1 Всего: 4 |
smartov, ладно, авторизацию мою ты сломал, может расскажешь где та дырка, которой ты воспользовался?
Да нет, только что самую свежую версию закачал на сервак и её же здесь выложил. Добавлено @ 19:04 Только это? |
|||
|
||||
| smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 7 Всего: 259 |
||||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: 1 Всего: 4 |
Так, это я поправил. Про mysql_real_escape_string я конечно знал, но
не понимал до конца. Буду разбираться. |
|||
|
||||
| madFobos |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 7.12.2005 Репутация: 1 Всего: 3 |
1. Если posted - это дата, то лучше использовать тип DATETIME или TIMESTAMP вместо INTEGER
2. Все char лучше заменить на varchar (в твоем конкретном случае БД будет меньше места занимать) 3. И совет на будущее, не называй идентификаторы таблиц одинакого (postid), потом запутаешься... Лучше сделай header_id и message_id. Хотя я вобще недопонял в твоей структуре через какую переменную идет связь таблицы header и message (надеюсь не postid) |
|||
|
||||
| sugee |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: 1 Всего: 4 |
Вообще-то именно через postid. Вот так я выбираю сообщение из базы
Причём хотя это поле я первоначально задумывал как AUTO_INCREMENT (оно и сейчас AUTO_INCREMENT), но я в него вставляю предварительно вычисленное значение, которое не совпадает ни с одним из уже существующих postid. Абсурд конечно, но работает. Я просто не придумал другого способа связать header и message. Так что AUTO_INCREMENT у поля postid можно смело убрать, он не нужен но вроде и не мешает.
Я как-то уже привык хранить TIMESTAMP в поле типа INT. |
||||||
|
|||||||
| -=Ustas=- |
|
|||
![]() Ustix IT Group ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2222 Регистрация: 21.1.2005 Где: Краснодар Репутация: 32 Всего: 69 |
И правильно делаешь ;) -------------------- В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм. ----- |
|||
|
||||
| smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 7 Всего: 259 |
sugee,
p.s. Не знаю обращал ли кто твое внимание, но у тебя код практически нечитаемый из-за отсутствия форматирования. Потом сам же не сможешь прочитать. Очень советую почитать вот это: http://pear.php.net/manual/en/standards.php (пройди по всем ссылкам) Эти стандарты форматирования можно сказать классические. |
|||
|
||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: 1 Всего: 4 |
А я, между прочим, на этот раз старался уделять внимание форматированию. Значит недостаточно. Хорошо, почитаю стандарты - пройдусь по коду ещё раз.
Нагуглил интересный факт, оказывается mysql_escape_string и mysql_real_escape_string не экранируют '%' и '_'. В SQL это любая строка и любой одиночный символ. |
|||
|
||||
| smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 7 Всего: 259 |
||||
|
||||
| madFobos |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 7.12.2005 Репутация: 1 Всего: 3 |
В таком случае нужно оставлять AUTOINCREMENT только у одной таблицы (в данном случае думаю у header). И не придется делать лишних вычислений (СУБД ведь для этого и создаются, чтобы делать работу за программистов
Спорный вопрос, особенно при использовании MySQL ближе к пятому. Там куча функций для работы с датами, которые к типу INT не применить никак... К тому же При TIMESTAMP можно вобще о дате не забоиться при вставке (и апдейте при желании)... |
|||
|
||||
| sugee |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: 1 Всего: 4 |
Блин точно ведь, как я сам не додумался! А не додумался, потому что забыл о существовании функции mysql_insert_id(). А я смотри что делал
Это сообщение отредактировал(а) sugee - 24.5.2006, 22:38 |
||||
|
|||||
| sugee |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 12.6.2005 Репутация: 1 Всего: 4 |
К тому же у меня могла бы получиться коллизия, в случае если бы два юзера одновременно добавили сообщение. Могли бы получиться два поста с одинаковым postid. Хотя поскольку поля postid всё-таки AUTO_INCREMENT, мускул не пропустил бы два одинаковых значения. Один из одновременно выполняющихся инсертов просто бы не прошёл. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |