Как проверить логин регулярным выражением.

yok

Новичок
Добрый всем день.
Скажите пожалуйста, достаточно ли вот такой проверки, (сначала конечно trim на всякий случай),
if( !preg_match("/^([-_a-zA-Z0-9]){5,10}$/",$login))
здесь я разрешил только буквы английские, цифры и тире и _.
В количестве от 5 до 10.
Извините скорректирую, предполагается проверка логина, для последующего сохранения в базе.
И вот думаю, можно ли обмануть функцию, если передать там кавычки, спецсимволы или что еще.
Нужно ли мне до регулярного , какие либо использовать, чтобы регулярное не споткнулось, типа htmlspecialchars()
??????
И вообще регулярное споткнуться может если ввести злонамеренный код??

И немного не по теме, в базе я сохраняю хеш пароля, если пароль до 10 символов, то у него md5 там длинная цифра, сколько обычно используется длина ??? varchar(?)
Делаю сам, впервые, образцов не видел, может я не правильно подхожу к сохранению пароля в базе.??
 

fixxxer

К.О.
Партнер клуба
про злонамеренный код читай в журнале "хакер" а приличным людям мозги не пудри =)

смотри.
если ты пишешь что-либо в обычный .txt который потом открываешь блокнотом, что может быть "злонамеренное"? ничего.

потому что это plain text, и у него нет никакого специального формата.

теперь возьмем например html - это язык разметки, имеющий свой формат. то есть все делится на данные и теги грубо говоря. все что тебе нужно - чтобы данные оставались данными, а теги - тегами, и не перемешались. htmlspecialchars и делает именно это - преобразует plain text данные в html данные.

то же самое - mysql_real_escape_string при формировании sql. ровно по аналогии.

и естественно применять преобразования в html надо в контексте использования html (то есть при его генерации), sql - при генерации sql запросов.

и это не кто-то там злонамеренный а ты дурак если позволяешь данным быть проинтерпретированным как код или инструкции.

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

длина md5 фиксированная, посчитать буковки сможешь сам надеюсь )

-~{}~ 09.03.10 10:39:

проще говоря, если у меня фамилия "foo'; drop database users'" или "'<script>", то это моя фамилия, а не sql или html =)

и если такое не допускается то это вопрос соглашений а не безопасности. вопрос безопасности это корректное приведение данных к синтаксису языка.
 

yok

Новичок
Ну извини fixxxer.
Если я отвлек тебя, мог бы не отвечать.

FRIE решает задачу, как новичек, ну и я тоже, многого не знаю(и опыта главное), вот и пытаюсь найти ответы.

А вопрос был конкретно - сможет ли споткнуться регулярное, именно РЕГУЛЯРНОЕ, не последующая отдача в запрос sql или же другое.. Опыта нет и понимание вопроса размытое, вот и спрашиваю.

Кстати FRIE, еще видел рекомендации о проверке referer. Может кто скажет необходима ли эта проверка.

fixxxer, за -посчитать буковки- спасибо, значит я на правильном пути, но может есть и мнения.
Всем спасибо.
 

Фанат

oncle terrible
Команда форума
Ты просто не понял ответа.
Попробуй перечитать его, пока не поймешь.
Это был очень подробный, правильный и вежливый ответ. Один из самых правильных ответов, какие ты вообще за свою жизнь получишь.
Ты пытаешься найти ответы? Так здесь они на все вопросы, которые ты задал, и которые еще только будешь задавать потом.
Поэтому его надо читать очень внимательно и вдумчиво.
Если у тебя возникнут вопросы по прочитанному, можешь их задать.
А если у тебя возникли претензии к прочитанному, то это твоя проблема, и ее срочно надо решать

И обязательно запомни. Слово новичок пишется через букву "О".
 

yok

Новичок
Ясно, спасибо.

А насчет вопроса о РЕГУЛЯРНОМ???
Существует ли практика слома регулярного.
Может такого вопроса и не существует. Конечно можно и проверить длину и в 10 символов злокод вряд ли будет, но всеже.
Понимаете о чем я?? Как работает регулярное и есть ли для него проблемы. ?? Если такой вопрос не поднимался и никто не слышал , то значит такой практики нет.
Значит можно спать спокойно, хотя темное пятно остается.
Вот почему хотелось бы мнение знающего человека, о механизме обработки регулярного, и слабых местах.
 

fixxxer

К.О.
Партнер клуба
У тебя в корне неверный образ мышления.

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

Если тебе будет так спокойнее: пока ты не используешь модификатор /e, можешь не беспокоиться о злобных чтецах журнала хакер. :)
 
Сверху