Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Защита от XSS и SQL-инъекций

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Ammiak
Отправлено: 06 Октября, 2011 - 09:14:45
Post Id


Частый гость


Покинул форум
Сообщений всего: 232
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Здравствуйте, есть форма авторизации:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <form method="post">
  3. <input name="login_auth">
  4. <input name="password_auth" type="password">
  5. </form>
  6.  

В скрипте передаваемые данные лбрабатываю так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $login_auth = trim(strip_tags(htmlspecialchars($_POST['login_auth'])));
  3. $password_auth = trim(md5($_POST['password_auth']));
  4.  

И в запросе так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $result = mysql_query("SELECT * FROM users WHERE `login`='".mysql_real_escape_string($login_auth)."' and `password` = '".mysql_real_escape_string($password_auth)."' LIMIT 1");
  3.  


Форма регистрации:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <form method="post">
  3. <input name="login">
  4. <input name="password" type="password">
  5. </form>
  6.  

Обработка:
PHP:
скопировать код в буфер обмена
  1.  
  2. $login = trim($_POST['login']);
  3. $password = trim(md5($_POST['password']));
  4.  

В запросе:
PHP:
скопировать код в буфер обмена
  1.  
  2. $query = mysql_query("INSERT INTO `users` (login, password) values ('".mysql_real_escape_string($login)."', '".mysql_real_escape_string($password)."')");
  3.  

Возник вопрос: правильна ли такая обработка в принципе, в частности, обработка паролей: нужно ли применять эти функции к ним? заранее благодарю
 
 Top
illy
Отправлено: 06 Октября, 2011 - 09:35:03
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




Тоже вопрос задам про защиту.
А что если просто делать проверку в логине лишних символов типа <?;.," ' и т.д.
Если они имеются, то просто выход делать exit;
Либо удалять их, оставляя только буквы,цифры, пробелы.


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
JohnnyB
Отправлено: 06 Октября, 2011 - 09:36:26
Post Id


Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Сент. 2011  


Помог: 2 раз(а)




Ammiak пишет:

PHP:
скопировать код в буфер обмена
  1.  
  2. $password = trim(md5($_POST['password']));
  3.  


надо так
потому что trim обрезает пробелы, а если сперва зашифровать в md5 то и все пробелы зашифруются и trim после использовать смысла не будет, да и mysqlrealescape лишнее так как после md5 не будет никаких запрещенных символов.
 
 Top
Ammiak
Отправлено: 06 Октября, 2011 - 09:56:48
Post Id


Частый гость


Покинул форум
Сообщений всего: 232
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




имхо, в случае с паролями можно делать просто:
Цитата:

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

ведь на то и пароль, чтоб можно было в нём юзать любой символ, в т.ч. пробелы, разве нет?
 
 Top
Zuldek
Отправлено: 06 Октября, 2011 - 09:57:48
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




illy пишет:
Тоже вопрос задам про защиту.
А что если просто делать проверку в логине лишних символов типа <?;.," ' и т.д.
Если они имеются, то просто выход делать exit;
Либо удалять их, оставляя только буквы,цифры, пробелы.

Дело в том что символов-прокладок много. Если решили идти методом обрезания символа, то просто ставите регулярочку чтобы обработчик принимал только определенные символы (A-z, цифры 0-9 и пр.).

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

(Отредактировано автором: 06 Октября, 2011 - 09:59:08)

 
 Top
Ammiak
Отправлено: 06 Октября, 2011 - 09:59:17
Post Id


Частый гость


Покинул форум
Сообщений всего: 232
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




и можно ли через поле password провести xss или инъекцию при такой обработке? (Это я к своему предыдущему посту)

(Отредактировано автором: 06 Октября, 2011 - 09:59:55)

 
 Top
Zuldek
Отправлено: 06 Октября, 2011 - 10:01:56
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Ammiak пишет:
и можно ли через поле password провести xss или инъекцию при такой обработке? (Это я к своему предыдущему посту)

Вы используете хеш и нигде не выводите начальные введенные пользователем данные.
Через указанные вами скрипты и через поле password формы атаки рода xss или инжект невозможны.

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

(Отредактировано автором: 06 Октября, 2011 - 10:07:20)

 
 Top
Ammiak
Отправлено: 06 Октября, 2011 - 10:21:02
Post Id


Частый гость


Покинул форум
Сообщений всего: 232
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Цитата:
Однако вполне можно поэкспериментировать с вводом длинных значений в ваши поля, ограничений на это я не нашел.

Ограничение на длину пароля я делал, на стороне клиента через js. Длину логина специально не ограничивал, должна ограничиваться длиной самого инпута (maxlength="36"), в первом посте не указал

(Отредактировано автором: 06 Октября, 2011 - 10:25:06)

 
 Top
illy
Отправлено: 06 Октября, 2011 - 10:21:43
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




Может ли инъекция навредить при передаче данных.
Вот ввёл он в логин скрипт инъекции и отправил.
Обработчик берёт значение этого логина и просто вносит в базу.
Здесь он никак не навредит? Только при выводе информации?


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
Santehnick
Отправлено: 19 Октября, 2011 - 21:52:41
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




illy пишет:
Может ли инъекция навредить при передаче данных.
Вот ввёл он в логин скрипт инъекции и отправил.
Обработчик берёт значение этого логина и просто вносит в базу.
Здесь он никак не навредит? Только при выводе информации?


навредит и еще как, сначала проверят проходит ли sql-injection, специально напишут так, чтобы запрос к базе данных получился бы не верным и соответственно получится ошибка, поймут что есть уязвимость и вместе с этим запросом могут отправить еще какие-нибудь или в этот допишут что-нибудь интересное, зависит от ситуаций и как написан сам запрос. поэтому экранировать нужно всегда. А вот в случае с xss, то тут да, навредить могут только при выводе информации на страницу, но опять же смотри, лучше один раз на этапе записи данных в базу позаботится о преобразовании спец. символов в html сущности при помощи функции htmlspecialchars() и быть уверенным, чем потом быть параноиком и при каждом выводе данных из базы обрабатывать их этой функцией.
(Добавление)
Ammiak пишет:
Цитата:
Однако вполне можно поэкспериментировать с вводом длинных значений в ваши поля, ограничений на это я не нашел.

Ограничение на длину пароля я делал, на стороне клиента через js. Длину логина специально не ограничивал, должна ограничиваться длиной самого инпута (maxlength="36"), в первом посте не указал

нужно все равно проверять на стороне сервера, js при желании смогут отключить в браузере или вообще возьмут данные тебе и отправят при помощи поддельной html-формы. ну или если лень в скрипте проверять, можно в мускуле ограничить, просто задать длину полю и всё, больше этого все равно как не старайся мускуль записывать откажется.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB