Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проверка данных, введённых пользователем
 
 автор: sasha1133   (12.02.2010 в 02:48)   письмо автору
 
 

Какие существуют методы проверки данных, введённых пользователем (желательно с исходным кодом)? Как проверить, что все символы например латинские? Вообще правильно будет делать первичную проверку на JavaScript и ещё одну на php?

  Ответить  
 
 автор: Slo_Nik   (12.02.2010 в 03:15)   письмо автору
 
   для: sasha1133   (12.02.2010 в 02:48)
 

проверить можно при помощи empty(), isset()б на наличие латинских символов можно использовать регулярные выражения

  Ответить  
 
 автор: neadekvat   (12.02.2010 в 07:16)   письмо автору
 
   для: sasha1133   (12.02.2010 в 02:48)
 

Наличие введенных данных проверять лучше конструкцией if (empty($..)) {//ошибка} т.к. скорее всего данные будет приходить из формы через и в $_POST будет существовать элемент (isset пройдет успешно), но значение будет отсутствовать.

Про проверку логина - ищите в разделе регулярных выражений, там на любой вкус и цвет уже собрано.

Первичная проверка на яваскрипте - это нормально, т.к. пользователю без лишних перезагрузок страницы укажут и подскажут (удобно), и затем проверить на php, т.к. у некоторых скрипты отключины (да и в любом случаи, на php проверка должна быть всегда)

  Ответить  
 
 автор: sim5   (12.02.2010 в 08:31)   письмо автору
 
   для: neadekvat   (12.02.2010 в 07:16)
 

>т.к. у некоторых скрипты отключины

Да если и включены, все равно это сервис - ничего не стоит обойти его, потому и нужна проверка именно на сервере.

  Ответить  
 
 автор: Trianon   (12.02.2010 в 08:32)   письмо автору
 
   для: neadekvat   (12.02.2010 в 07:16)
 

>Первичная проверка на яваскрипте - это нормально, т.к. пользователю без лишних перезагрузок страницы укажут и подскажут (удобно), ...

Верно.

>и затем проверить на php,

...поскольку уровень JS не в Вашем, как программиста, явном подчинении, он лишь носит рекомендательный характер.
Пользователь может его проигнорировать, изменить клиентский код, исключить его вообще, сформировав весь набор входных параметров самостоятельно. Поэтому на уровне php всё равно требуется независимый от JS контроль всех параметров входа php-скрипта.

  Ответить  
 
 автор: sasha1133   (12.02.2010 в 12:39)   письмо автору
 
   для: Trianon   (12.02.2010 в 08:32)
 

Спасибо)
а вообще какая должна быть примерная последовательность проверки на сервере (к примеру передаются данные для настроек, которые потом будут записаны в текстовый файл - логин, пароль, настройки MySQL)?

PS. Правильно ли я делаю, что храню логин и пароль в таком файле :


<?php die; ?>
lox
c4ca4238a0b923820dcc509a6f75849b
1


То есть логин как он есть, потом мд5 пароля и потом длина пароля в символах.

  Ответить  
 
 автор: Рома   (12.02.2010 в 12:52)   письмо автору
 
   для: sasha1133   (12.02.2010 в 12:39)
 

длину пароля хранить не нужно

  Ответить  
 
 автор: Trianon   (12.02.2010 в 13:04)   письмо автору
 
   для: sasha1133   (12.02.2010 в 12:39)
 

Длину пароля рядом с хешем хранить зачем?
Чтобы по хешу пароль проще подбирать было?

  Ответить  
 
 автор: oliss   (12.02.2010 в 13:59)   письмо автору
 
   для: sasha1133   (12.02.2010 в 12:39)
 

В таблице хранить :
1 Имя пользователя
2 Хэш пароля (в случае если пользователь его забыл то выслать новый временный)
3 майл (чтобы знать куда высылать )
4 уникальный ключ(он нужен для куки которая ставится ,пользователю на определённое время)
5 время последней авторизации пользователя
в куку пишем :
ключ
имя пользователя
время действия куки

читаем куку,проверяем уникальный ключ,имя,время по БД:
если время для ключа просрочено,то просим пользователя по новой авторизоваться и обновляем в бд и куке ключ и время
ключ можно составить из md5(имени пользователя .юзер агента.времени последней авторизации)
IP -- можно тоже вогнать в ключ, но не желательно, т.к у многих IP динамические ,или одинаковые, кто входит с мобильных
кроме проверки по бд можно осуществить проверку самой куки
если ключ(куки) ! = md5(имя(из БД).время (из БД).$_SERVER['HTTP_USER_AGENT']) это не наш ,пусть авторизуется или регистрируется или(ну сами придумайте)
даже если уведут куку ,то авторизоваться с помощью её будет невозможно

можно ещё хакерам усложнить жизнь :
При удачной авторизации или при наличие правильной куки запустить сессию с переменной Ключом и Именем пользователя ,ключ можно составить из md5( $_SERVER['HTTP_USER_AGENT'].IP.session_id() ) и проверять если ключ (сессия)!= md5( $_SERVER['HTTP_USER_AGENT'].IP.session_id() ), то это не наши люди, даже если PHPSESSID
уведут,то всё равно не смогут используя её ,войти вместо данного пользователя

  Ответить  
 
 автор: sasha1133   (12.02.2010 в 19:45)   письмо автору
 
   для: oliss   (12.02.2010 в 13:59)
 

А чем плохо в текстовом файле хранить логин и хэш?

  Ответить  
 
 автор: oliss   (12.02.2010 в 22:40)   письмо автору
 
   для: sasha1133   (12.02.2010 в 19:45)
 

Одни ездят на Мерседесе, другие на Запорожце. И то, и то машина ,кому что надо,и что нравиться.

  Ответить  
 
 автор: Trianon   (12.02.2010 в 22:49)   письмо автору
 
   для: oliss   (12.02.2010 в 22:40)
 

тут корректнее сравнивать автомобиль и метро.
При чем метро - SQL сервер.
Одно дело когда ты пишешь обработку данных сам (и едешь сам) и другое - когда пользуешься услугами сервиса (и когда едешь - тоже на чьем-то транспортном сервисе)

  Ответить  
 
 автор: oliss   (12.02.2010 в 23:38)   письмо автору
 
   для: Trianon   (12.02.2010 в 22:49)
 

Ага,ещё и давишься в часы пик.

  Ответить  
 
 автор: Trianon   (12.02.2010 в 23:51)   письмо автору
 
   для: oliss   (12.02.2010 в 23:38)
 

Ну так и на реальном MySQL сервере подчас давка устраивается.
Никогда не видели "Сервер MySQL перегружен - повторите попытку через 5 минут. "?
Это же вопрос количественных отличий, а не качественных.
И в мерс можно напихаться как сельдьми в банку.
Что на картинках из разного забугорья прекрасно видно.

  Ответить  
 
 автор: sasha1133   (13.02.2010 в 00:08)   письмо автору
 
   для: Trianon   (12.02.2010 в 23:51)
 

Не понимаю логику сравнения, особенно про мерс и запорожец. Не проще ли написать плюсы и минусы? Например я вижу в текстовом файле 1 плюс - это возможность зайти в админку и уже потом настроить подключение к базе данных. Чем плохо? Если есть минусы текстового файла (с расширением php и с первой строкой <?php die(); ?>, чтобы ничего не выводилось в браузер при попытке к нему обратиться), то напишите какие, буду благодарен.

  Ответить  
 
 автор: oliss   (13.02.2010 в 01:02)   письмо автору
 
   для: sasha1133   (13.02.2010 в 00:08)
 

В этом вся соль!
Вам дали разные варианты решения.
Ваша задача САМОМУ выбрать экспериментальным путём ,что Вам больше подходит.

  Ответить  
 
 автор: Николай2357   (13.02.2010 в 01:19)   письмо автору
 
   для: sasha1133   (13.02.2010 в 00:08)
 

Вам бы определиться самому сначала или более кореектно поставить вопрос.
Так что же нужно - обеспечить паролированный доступ в "админку" или Вам нужны
>методы проверки данных, введённых пользователем
?
Если первое, то да, файл надежнее и менее нагрузочно. Ежели второе, то опять же зависит от числа пользователей. Если их 5-10, это одно. А если 500000 -~, то другое.

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

  Ответить  
 
 автор: sasha1133   (13.02.2010 в 14:40)   письмо автору
 
   для: Николай2357   (13.02.2010 в 01:19)
 

Ясно, спасибо) Мне для админки файл. Для пользователей буду базу создавать (если придётся)

  Ответить  
 
 автор: sasha1133   (20.02.2010 в 13:00)   письмо автору
 
   для: sasha1133   (12.02.2010 в 02:48)
 

PS. Появился вопрос. Чтобы не создавать новую тему, спрошу здесь:

я знаю только пару функций для обработки строк, например

htmlspecialchars()
mysql_escape_string()

и то, не совсем знаю, что они делают =)
может подскажите какие нибудь наиболее полезные функции для обработки строк? описание я сам найду. Попалась сегодня какая то функция nl2br, которая заменяет \n на <br />, вот мне бы побольше такого рода функций)

  Ответить  
 
 автор: t3ma   (20.02.2010 в 13:42)   письмо автору
 
   для: sasha1133   (20.02.2010 в 13:00)
 

http://php.su/functions/?cat=strings

  Ответить  
 
 автор: sasha1133   (20.02.2010 в 14:59)   письмо автору
 
   для: t3ma   (20.02.2010 в 13:42)
 

Спасибо. А можно если не трудно перечислить, на какие стоит обратить внимание, то есть те, которые наиболее часто применяются в веб-программировании?

  Ответить  
 
 автор: sim5   (20.02.2010 в 15:20)   письмо автору
 
   для: sasha1133   (20.02.2010 в 14:59)
 

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

  Ответить  
 
 автор: Trianon   (20.02.2010 в 23:28)   письмо автору
 
   для: sasha1133   (20.02.2010 в 13:00)
 

>может подскажите какие нибудь наиболее полезные функции для обработки строк?

Вы не пробовали заказывать в аптеке какие-нибудь полезные лекарства, допустим, для нервной системы?
То, что Вы просите - один в один звучит именно так.

  Ответить  
 
 автор: sasha1133   (21.02.2010 в 03:41)   письмо автору
 
   для: Trianon   (20.02.2010 в 23:28)
 

Согласен, вопрос не очень корректный. Меня интересует функции, обрабатывающие данные, приходящие в первую очередь из форм. Например набранная статья, логин\пароль, что то в этом роде. Хочу сделать надёжную проверку таких данных, чтобы избежать проблем. Просто я не в курсе, чем пользователь может навредить, посылая что либо через форму. У меня чаще всего возникает ситуация, когда:

1) пользователь с помощью формы посылает данные,
2) потом к примеру $text = $_POST['text'];
3) потом запись в БД
4) вывод из БД и отображение в браузере

Хочу узнать, на каких этапах нужно осуществлять проверку и каким способом. Особенно трудно у меня дело обстоит с текстом с элементами форматирования (тегами или bb-кодами) - я не знаю, как организовать проверку, чтобы сохранить форматирование текста и избежать "неприятностей"

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования