Поймать спец-sql-символы и строго указать
Из справки функции экранирования, набор символов для экранирования экраном \
NUL (ASCII 0), \n, \r, \, ', ", and Control-Z Пароль я не могу экранировать, мне его надо проверить и, если что-то из перечисленного нашлось - отвергнуть такой ввод. Раньше я вообще ничего кроме длины не проверял, а тут задумалсо что надо бы запрос защитить. "Так-то" люди не конченые идиоты, но есть же некоторые, специально такие. В срач-паде набил с полдюжины нерабочих вариантов (два процитирую), третий самый похожий на правду вот такой var pass='пароль1'; //var pattern = new RegExp('[^\PC\s]'); //new RegExp('\p{Cc}+'); pass.match(/\0|\'|\"|\b|\n|\r|\t|\Z|\\|\%|\_/); /* */ Но почему-то на цифру выдает пустую строку, а не null. Помогите люди добрые с регой для проверки на символы по списку (выше). |
Для внесения в базу юзай sql параметры и не парь мозги.
Если строка в юникоде то можно инжектить не только указанными символами. |
Я же говорю - так и делал, не проверяя можно ли будет войти по паролю типа Паро(тут табулятор)ль, или там Пар"о"ль. То есть password(экранированная строка) будет идентично password(экранированная строка)?
ЗЫ Во блин, ну да, так и должно быть... запара. |
kostyanet, какая те разница какой пароль у юзера? В базу он кладётся экранированным, забирается разэкранипровнным и все довольны.(а вообще пасс юзера принято хранить в виде хэша с солью, в открытом виде хранят только мудаки)
Проверить можно так: /[\0'"\n\r\\\u001A]/.test(pass)только на серваке всё равно надо нормально обрабатывать. |
Я понял когда рядом поставил:
Цитата:
Так на серваке и проверяется и оттуда же отвергается если юзверь проник через JS-сервис. Тут как раз случай наоборот. Канонично через перезагрузку и редирект мне все это проверить и написать как два пальца - а вот этот сервис модный, на JS всю кровь выпивает. Все равно щас проверю что вы отпостили и воткну. Хоть немного на человека буду похож. :) Спасибо. |
Пердимонокль
pattern="[\0'\"\n\r\\u001A]" Теперь не могу записать его в тэг. Видимо надо вместо " - " то есть паттерны в рендере надо пропускать через htmlentities... |
Пропустил
pattern="[\0'"\n\r\\u001A]" уму непостижимо как из этой бнопни JS получает паттерн и все работает. Наверно их вообще все можно через код символа перечислить, да? Это было бы лучше чем бегать за каждым паттерном с ентитькой наперевес. А может и так хорошо, все равно после рендера они не нужны в php. |
Часовой пояс GMT +3, время: 04:04. |