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 :: Разрешить некоторые символы

 PHP.SU

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


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

> Без описания
Olegarh1a
Отправлено: 10 Февраля, 2021 - 12:12:27
Post Id


Новичок


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


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




есть регулярка для поля login
PHP:
скопировать код в буфер обмена
  1. $pattern_login = '/^[a-zA-Zа-яА-ЯЁё0-9_-]{1,30}$/u';

Проверяем условием
PHP:
скопировать код в буфер обмена
  1.   if(!preg_match($pattern_login, $_POST['login']))
  2.         {
  3.          echo 'Не работает';
  4.         }

Дальше идёт пароль
В
PHP:
скопировать код в буфер обмена
  1. $pattern_password = '/^[a-zA-Zа-яА-ЯЁё0-9_-]{6,30}$/u';
Сюда же надо добавить разрешить всё кроме (кавычек, одинарных кавычек, обратных кавычек, знак больше, меньше (",',`,<,>))
И ещё вопрос спасёт это от SQL инъекций, по моей логике не один sql запрос не возможен без ' '
Да и в обще насколько это безопасная защита ?
Изучаю php не давно всё хорошо более менее понятно но стоило мне дойти до регулярных выражений мир перевернулся
 
 Top
Мелкий Супермодератор
Отправлено: 10 Февраля, 2021 - 13:38:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Проверьте минимальную длину пароля. Всё. Какая вам разница, какой пароль хочет использовать пользователь? Какой смысл в ограничении всего лишь в 30 символов?

Про sql injection - см. prepared statements.


-----
PostgreSQL DBA
 
 Top
Olegarh1a
Отправлено: 10 Февраля, 2021 - 18:30:07
Post Id


Новичок


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


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




Мелкий пишет:
Проверьте минимальную длину пароля. Всё. Какая вам разница, какой пароль хочет использовать пользователь? Какой смысл в ограничении всего лишь в 30 символов?

Про sql injection - см. prepared statements.


А как же XSS-атака возможно же вставить html теги в поле password и каки можно наделать. как правильно фильтровать или экранировать ?
 
 Top
Мелкий Супермодератор
Отправлено: 10 Февраля, 2021 - 19:41:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Olegarh1a пишет:
возможно же вставить html теги в поле password

И? Да хоть бинарного мусора. password_hash и password_verify как-то без разницы.

Olegarh1a пишет:
как правильно фильтровать или экранировать ?

Зачем?
Вот не поверите - неверен сам вопрос.
Верный вопрос:
- как передать значение в SQL так, чтобы СУБД не могла воспринять часть данных за команду
- как представить данные в HTML так, чтобы браузер отображал именно эти данные, а не считал что это разметка
- как корректно использовать данные в любом_заданном_формате, чтобы они воспринимались как эти самые данные при чтении этого самого заранее известного формата

"оой, ну наверное кавычки это страшная хакерская штука, их не должно быть в пароле"? "ой, уравнение a<b and b>c никто в здравом уме не напишет, это же опаснейших HTML тег"?

Вам нужно подставить данные в CSV? Что, будете удалять все запятые из текста? Да нет, конечно. Возьмёте не менее стандартные функции форматирования CSV
Нужно передать JSON? Реально будете вырезать регуляркой всё, что имеет значение в JSON? Опять нет. Возьмёте стандартный json_encode
Нужно подставить параметр в ссылку? urlencode к вашим услугам.
Вам нужно вывести данные в HTML? htmlspecialchars.
Передать данные базе данных? У каждой базы есть родной интерфейс для этого. В частности, механизм prepared statements.

На сладкое мой любимый пример:
Введите сумму перевода: _
Везде проверили, что прислали число, что у пользователя есть столько денег, пользователь существует. Всё отлично, делаем одному balance = balance + ?, второму вычитаем с баланса
А потом некто просто вводит отрицательное число.

Потому второй верный вопрос: какие данные мы тут ожидаем и где их будем использовать.


-----
PostgreSQL DBA
 
 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