Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос безопасности при авторизации 
:(
    Опции темы
nerezus
Дата 6.2.2010, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Цитата

могу даже пару ссылок привести крупных проектов (не свои)
 Лучше на код.
Тут один из наших постоянных посетителей занимался рефакторингом переписыванием одного из ссамых популярных сайтов рунета.  Который был структурным.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Vasay
Дата 6.2.2010, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 1
Всего: 73



Цитата

Угу, а потом появляются системы с классами в 20 -30 методов с кучей свойств, не соблюдая основные правила ООА/П.
И думаешь а где здесь всё таки ООП  smile 

Это я к тому , что прав  Simpliest, всему своё время.


По-моему, прежде чем крыть крышу, нужно построить фундамент.  

Это я к тому, что прежде чем заниматься авторизацией, надо выучить язык и разобраться с общепринятыми шаблонами проектирования.


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
yngwie19
Дата 6.2.2010, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



подскажите мне пожалуйста вот на таком примере. У меня есть форма: 
Код

<form name="addNewUser" action="addNewUser.php" method="POST" enctype="multipart/form-data">
<input type="text" name="name" maxlength="30"/>
<input type="password" name="passw" maxlength="30"/>
<input type="password" name="confirm" maxlength="30"/>
<input type="text" name="email" maxlength="60"/>
<input type="text" name="icq" maxlength="9"/>
<input type="text" name="url" maxlength="60"/>
<input type="file" name="avatar"/> 
<input type="submit" name="submitForm" value="Зарегестрировать"/>'; 


Скажите, когда данные этой формы отправятся по нажатию кнопки "зарегистрировать" в обработчик addNewUser.php, какие проверки этих данных нужно выполнить, чтобы предотвратить возможность взлома? Спасибо.
PM MAIL   Вверх
Spiker
Дата 6.2.2010, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 25.5.2005
Где: Спортзал

Репутация: -2
Всего: -2



preg_match, htmlspecialchar и mysql_real_escape_string


--------------------
Даваите жить дружно! (Леопольд.) :shy67:
PM MAIL MSN   Вверх
yngwie19
Дата 7.2.2010, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Spiker, этого достаточно?
PM MAIL   Вверх
NLspieler
Дата 7.2.2010, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



yngwie19,
рассказываю по шагам.
Во-первых, на многих хостингах включены волшебные слэши.
Т.е. строка "привет" превращается в \"привет\"
что бы избежать этого, нужно либо отключить эту опцию, либо пропускать все принимаемые данные, через функцию 
Код

$_POST['passw'] = stripslashes ($_POST['passw']) ;
 
Кроме того, некоторые поля нужно пропускать при приеме через функцию trim, которая удаляет пробелы в начале и в конце.

preg_match позволяет проверить на правильность емейл, url, да и любые другие поля на соответствие правильному шаблону.


Через mysql_real_escape_string обязательно нужно пропустить все данные (ну почти все), которые попадут потом в sql запрос.

Пароль в БД лучше вообще не писать, а записать md5-hesh.

Насчет htmlspecialchar не знаю. По-моему, ее нужно применять, когда в БД вносятся текстовые комментарии.
Впринципе и другие данные можно через нее пропустить. Но вопрос это спорный.


К безопасности из приведенного списка относится только mysql_real_escape_string и в некоторой степени md5-хешь для пароля
 


Это сообщение отредактировал(а) NLspieler - 7.2.2010, 09:15
PM MAIL   Вверх
bars80080
Дата 7.2.2010, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(NLspieler @  7.2.2010,  08:12 Найти цитируемый пост)
Насчет htmlspecialchar не знаю. По-моему, ее нужно применять, когда в БД вносятся текстовые комментарии.

нет, назначение функции - форматировать специальные символы, применяемые в хтмл в соответствующие сущности. то есть её надо применять для вывода текста в браузер. к БД она никакого отношения не имеет
PM MAIL WWW   Вверх
Spiker
Дата 7.2.2010, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 25.5.2005
Где: Спортзал

Репутация: -2
Всего: -2



я лично ereg использую, у меня проверка на любой тип поля есть... как то не охота все переписовать))


--------------------
Даваите жить дружно! (Леопольд.) :shy67:
PM MAIL MSN   Вверх
yngwie19
Дата 7.2.2010, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Цитата(NLspieler @  7.2.2010,  09:12 Найти цитируемый пост)
Пароль в БД лучше вообще не писать, а записать md5-hesh.

т.е так:
Код

$passw =  md5($_POST['passw']);

и все?

Добавлено через 5 минут и 15 секунд
Цитата(NLspieler @  7.2.2010,  09:12 Найти цитируемый пост)
Т.е. строка "привет" превращается в \"привет\"

а если проверять вводимые данные по такому шаблону:
Код

preg_match("/^\w{3,}$/",$_POST['login'])

то тогда Вам вариант можно пропустить?

Это сообщение отредактировал(а) yngwie19 - 7.2.2010, 17:09
PM MAIL   Вверх
NLspieler
Дата 7.2.2010, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Цитата(yngwie19 @  7.2.2010,  17:08 Найти цитируемый пост)
Код

$passw =  md5($_POST['passw']);

и все?

Да, этого достаточно. 
Но нужно еще и при попытке пользователя войти на сайт, сравнивать не пароль, а его md5.


md5($string) всегда равен md5($string)  не зависимо от значения $string. 
Но получить из md5 хеша исходное значение практически не возвомжно.

Таким образом мы получаем следующие плюсы: 
1) никто не сможет узнать пароль пользователя, даже имея в распоряжении базу данных.
2) md хэш всегда имеет одинаковую длинну, таким образом можно экономить место в БД, прописав в соответствующее поле эту длинну.



Цитата(Spiker @  7.2.2010,  14:38 Найти цитируемый пост)
я лично ereg использую

И зря. ereg мало того, что работает значительно медленние, так еще и не может обработать такие мощные регулярные выражения, которые допустимы в preg.
А переписать несколько регулярных выражений особого труда не составит.


Цитата(yngwie19 @  7.2.2010,  17:08 Найти цитируемый пост)
то тогда Вам вариант можно пропустить?

Если данные принимаются из формы с лишними (волшебными слэшами), то избавлятся от них нужно в обязательном порядке.

Цитата(bars80080 @  7.2.2010,  13:27 Найти цитируемый пост)

нет, назначение функции - форматировать специальные символы, применяемые в хтмл в соответствующие сущности. то есть её надо применять для вывода текста в браузер. к БД она никакого отношения не имеет

Разумется, никакого отношения к БД она не имеет, но в ряде случаев она просто не заменима.
Можно конечно записывать в БД данные как есть, а можно записать в БД уже обработанные данные, готовые к выводу.
Таким образом достигнется небольшая экономия мощностей процессора. Так как данные нужно будет пропускать через эту функцию только один раз.




PM MAIL   Вверх
nerezus
Дата 7.2.2010, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Цитата

но в ряде случаев она просто не заменима.
 А иногда незаменимы другие функции. Но как и эта, они не относятся к теме. Совсем.

Цитата

а можно записать в БД уже обработанные данные, готовые к выводу.
 Если у вас простая геста и больше, чем к выводу в html эти данные не нужны - то да.

Цитата

Таким образом достигнется небольшая экономия мощностей процессора.
 А теперь расскажите, какие ;) При том условии, что структура данной ф-ии примитивна и оверхед не будет замечен.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Spiker
Дата 7.2.2010, 23:56 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 25.5.2005
Где: Спортзал

Репутация: -2
Всего: -2



ктото пробовал делать следущее?
Код

$passw =  md5(PASSWORD(md5(PASSWORD($_POST['passw']))));

Такое вряд-ли кто-то взломает... до тех пор пока хакер не в курсе сколько раз все было зашифровано.

Это сообщение отредактировал(а) Spiker - 7.2.2010, 23:59


--------------------
Даваите жить дружно! (Леопольд.) :shy67:
PM MAIL MSN   Вверх
MoLeX
Дата 8.2.2010, 06:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Spiker, и зачем? лучше использовать соль и все


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
yngwie19
Дата 8.2.2010, 08:11 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Spiker, тогда уж так:
Код

$passw = md5(md5(PASSWORD($_POST['passw'])));

PM MAIL   Вверх
MoLeX
Дата 8.2.2010, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Код

$passw = '';
for( ;; )
    $passw = md5($_POST['passw'].$passw);


 smile  smile  smile

Добавлено через 1 минуту и 2 секунды
P.S. может хватить страдать ерундой? если уж такие параноики то следует написать свой алгоритм хеширования и радоваться жизни


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0660 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.