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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> правильно ли я проверяю логин? 
:(
    Опции темы
begin
Дата 30.10.2007, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Использую на сайте авторизацию из форума phpbb (он тоже там установлен).
Проблема в том, что список запрещенных имен в настройках форума не работает. Поэтому не получается запретить использовать в логине при регистрации на форуме символы одинарной кавычки и символы треугольных скобок.
А так как я использую логин пользователя в очень многих местах моих скриптов остальных сервисов сайта, то, чтобы лишний раз подстраховаться от sql-инъекций и xss я просто хочу запретить пользователям с такими именами пользоваться остальными сервисами сайта (об этом я уже предупредил всех вежливо в тексте соглашения при регистрации на форуме).

Итак, во всех скриптах, использующих логин, я буду проверять логин с помощью следующего условия:
Код

if ((mysql_real_escape_string($username)!==$username) || (htmlspecialchars($username)!==$username))
{
echo 'ваш логин содержит недопустимые символы';
}

Но что-то мне подсказывает, что эта проверка все равно пропустит "плохие" логины  smile 
И вообще, правильно ли я проверяю логин, может стоит по другому это делать?
PM MAIL   Вверх
webevt
Дата 30.10.2007, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(begin @  30.10.2007,  20:20 Найти цитируемый пост)
if ((mysql_real_escape_string($username)!==$username) || (htmlspecialchars($username)!==$username))

не понял вот этого ;)

Код

$CheckLoginRegExp = "/[a-zA-Z]+[а-яА-Я]+/";
$CheckLoginSpecial = "/[\}\{\']+/";
if (
       ( preg_match ( $CheckLoginRegExp, $username ) ) or
       ( preg_match ( $CheckLoginSpecial, $username ) ) or
   )
{
   echo 'ваш логин содержит недопустимые символы';
}

Вот проверка логина..Выдаст ошибку, если в нике будет использована и латиница и кирилица одновременно ( $CheckLoginRegExp ), или если в нике будут символы ' } {

P.S. Не понял, что значит "трехуголные скобки" ;)
   
PM MAIL   Вверх
begin
Дата 30.10.2007, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Треугольные скобки я имел ввиду эти: <>
Я думаю, будет правильнее найти в скриптах phpbb место, где проверяется логин при регистрации нового пользователя, и вставить там эту проверку.
Осталось найти то место..  smile 

Кто-нибудь может подсказать где это?
Я опасаюсь, что если сейчас сам полезу, могу убить форум. А ведь там уже куча пользователей...

PM MAIL   Вверх
SelenIT
Дата 30.10.2007, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



Цитата(begin @  30.10.2007,  20:20 Найти цитируемый пост)
чтобы лишний раз подстраховаться от sql-инъекций и xss

begin, не надо "лишний раз подстраховываться", тем более от того и другого одновременно - это невозможно, да и вредно. Наоборот, нужно локализовать каждую уязвимость отдельно, закрыть ее надежным специализированным средством и впредь ничего не бояться.

XSS возможен только при выводе - думаю, найти все места, где выводится логин, и поставить там htmlspecialchars (если его еще нет) не проблема даже вручную. Вставка же логина в SQL-запрос, по хорошему, нужна только в одном месте - самой авторизации (ну, может, еще в фильтре для поиска, как на этом форуме), во всех других местах в грамотно сделанной системе используется заведомо безопасный id юзера и "переподстраховываться" нет никакого смысла.

Так что рекомендую не высасывать проблемы из пальца и "не лечить перхоть гильотиной", делая доступность серсивов для юзеров зависимой от весьма странного и нелогичного критерия...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
flashaa
Дата 30.10.2007, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В одной из своих задач я весь введенный юзером ввод (кроме паролей, т.к. они нигде не оторбражаются) обрабатывал с помощью htmlspecialchars() c параметром ENT_QUOTES и в таком виде вставлял в БД. 
По-моему достаточно оптимальный вариант. Да, хтмл-код в базе не нужен, но и вреда от него нет. А проверок меньше. Могу ошибаться, но кажется IPB также хранит пользовательский ввод сразу в html, по крайней мере текст сообщений.

Добавлено @ 23:51
Цитата(webevt @  30.10.2007,  22:24 Найти цитируемый пост)
$CheckLoginRegExp = "/[a-zA-Z]+[а-яА-Я]+/";
$CheckLoginSpecial = "/[\}\{\']+/";
if (
       ( preg_match ( $CheckLoginRegExp, $username ) ) or
       ( preg_match ( $CheckLoginSpecial, $username ) ) or
   )
{
   echo 'ваш логин содержит недопустимые символы';
}

Имена, в которых хотя бы один первый символ - кириллица, (остальные могут быть и латиницей) пройдут.
Чтобы проверить именно выражение "использование кириллицы и латиницы", можно составить 2 регулярки для латиницы и кириллицы.

Это сообщение отредактировал(а) flashaa - 31.10.2007, 00:05
PM MAIL   Вверх
SelenIT
Дата 31.10.2007, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



flashaa, между HTML в базе и результатом htmlspecialchars в базе есть существенная разница. Предложенный вариант оптимален для единственного случая - когда информация не используется ни для чего иного, кроме вывода на экран.

Кроме того, у beginа вопрос об изменении представления логина в базе и не стоит - логины уже есть от форума, он лишь боится, что они "чего-нибудь ему испортят" в других местах...

Это сообщение отредактировал(а) SelenIT - 31.10.2007, 00:10


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
flashaa
Дата 31.10.2007, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Проверить только кириллица или только латиница можно и одним выражением, вот так:
/(^[a-z]+$|^[а-я]+$)/i

SelenIT, согласен, что можно разделить очистку и форматирование сообщений на два этапа. При вводе очистка, при выводе - форматирование. Форматирование сразу может быть реализовано. Но это может помешать допустим если изменятся настройки форматирования.
Скажем, изначально в тексте "активировались" ссылки, теперь после вставки в базу у нас уже будет полностью обработанный код, правила оформления которого с точки зрения html нам уже проблематично изменить. Но в случае с логинами пользователей(о которых изначально шла речь),  ведь кроме вывода нам ничего не будет требоваться?

Это сообщение отредактировал(а) flashaa - 31.10.2007, 00:14
PM MAIL   Вверх
Akina
Дата 31.10.2007, 00:21 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Гм... а если после ввода юзером логина в базу помещать urlencode($login) и далее в коде везде использовать именно его? и соответственно при выводе на экран делать urldecode?
Какая тебе по сути разница, в каком виде все это валяется в БД - в оригинальном или как-то преобразованном? лишь бы было однозначное соответствие в обе стороны...
И плевать на скобки да кавычки...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
SelenIT
Дата 31.10.2007, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



flashaa, Akina, запись логина в базу у beginа уже реализована - в форуме, и
Цитата(begin @  30.10.2007,  22:52 Найти цитируемый пост)
Я опасаюсь, что если сейчас сам полезу, могу убить форум. А ведь там уже куча пользователей...


Akina, чем urlencode при вводе и urldecode при выводе принципиально лучше, чем mysql_real_escape_string при вводе и htmlspecialchars при выводе? Так и так ведь везде руками прописывать, к тому же второе после urldecode все равно понадобится, иначе риск XSS остается. А вот если понадобится, например, сортировать пользователей по русским буквам без учета регистра, наличие в базе результата "левых" преобразований существенно усложнит жизнь...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0570 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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