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
Форумы портала PHP.SU :: Версия для печати :: Разрешить некоторые символы
Форумы портала PHP.SU » PHP » Регулярные выражения » Разрешить некоторые символы

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

1. Olegarh1a - 10 Февраля, 2021 - 12:12:27 - перейти к сообщению
есть регулярка для поля 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 не давно всё хорошо более менее понятно но стоило мне дойти до регулярных выражений мир перевернулся
2. Мелкий - 10 Февраля, 2021 - 13:38:01 - перейти к сообщению
Проверьте минимальную длину пароля. Всё. Какая вам разница, какой пароль хочет использовать пользователь? Какой смысл в ограничении всего лишь в 30 символов?

Про sql injection - см. prepared statements.
3. Olegarh1a - 10 Февраля, 2021 - 18:30:07 - перейти к сообщению
Мелкий пишет:
Проверьте минимальную длину пароля. Всё. Какая вам разница, какой пароль хочет использовать пользователь? Какой смысл в ограничении всего лишь в 30 символов?

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


А как же XSS-атака возможно же вставить html теги в поле password и каки можно наделать. как правильно фильтровать или экранировать ?
4. Мелкий - 10 Февраля, 2021 - 19:41:41 - перейти к сообщению
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 + ?, второму вычитаем с баланса
А потом некто просто вводит отрицательное число.

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

 

Powered by ExBB FM 1.0 RC1