Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.10.2014, 18:25
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Поймать спец-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. Помогите люди добрые с регой для проверки на символы по списку (выше).
Ответить с цитированием
  #2 (permalink)  
Старый 16.10.2014, 18:31
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Для внесения в базу юзай sql параметры и не парь мозги.
Если строка в юникоде то можно инжектить не только указанными символами.
__________________
29375, 35

Последний раз редактировалось Aetae, 16.10.2014 в 18:38.
Ответить с цитированием
  #3 (permalink)  
Старый 16.10.2014, 18:36
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Я же говорю - так и делал, не проверяя можно ли будет войти по паролю типа Паро(тут табулятор)ль, или там Пар"о"ль. То есть password(экранированная строка) будет идентично password(экранированная строка)?

ЗЫ Во блин, ну да, так и должно быть... запара.
Ответить с цитированием
  #4 (permalink)  
Старый 16.10.2014, 18:39
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

kostyanet, какая те разница какой пароль у юзера? В базу он кладётся экранированным, забирается разэкранипровнным и все довольны.(а вообще пасс юзера принято хранить в виде хэша с солью, в открытом виде хранят только мудаки)

Проверить можно так:
/[\0'"\n\r\\\u001A]/.test(pass)
только на серваке всё равно надо нормально обрабатывать.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 16.10.2014, 19:21
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Я понял когда рядом поставил:

Сообщение от kostyanet
password(экранированная строка) будет идентично password(экранированная строка)?
У меня заклинило что функция password() захерачит хэш со всего что прилетит, с экранов в том числе.

Так на серваке и проверяется и оттуда же отвергается если юзверь проник через JS-сервис. Тут как раз случай наоборот. Канонично через перезагрузку и редирект мне все это проверить и написать как два пальца - а вот этот сервис модный, на JS всю кровь выпивает.

Все равно щас проверю что вы отпостили и воткну. Хоть немного на человека буду похож. Спасибо.

Последний раз редактировалось kostyanet, 16.10.2014 в 19:23.
Ответить с цитированием
  #6 (permalink)  
Старый 16.10.2014, 19:46
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Пердимонокль

pattern="[\0'\"\n\r\\u001A]"

Теперь не могу записать его в тэг. Видимо надо вместо " - " то есть паттерны в рендере надо пропускать через htmlentities...
Ответить с цитированием
  #7 (permalink)  
Старый 16.10.2014, 20:06
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Пропустил

pattern="[\0'"\n\r\\u001A]"

уму непостижимо как из этой бнопни JS получает паттерн и все работает.

Наверно их вообще все можно через код символа перечислить, да? Это было бы лучше чем бегать за каждым паттерном с ентитькой наперевес. А может и так хорошо, все равно после рендера они не нужны в php.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ajax и спец символы Накурикота jQuery 2 23.09.2014 11:54
Спец символы. AntiBuger Общие вопросы Javascript 7 21.05.2012 20:02
экранировать спец символы betonka Events/DOM/Window 11 07.04.2011 17:44
преобразовать спец символы olgatcpip AJAX и COMET 9 25.04.2009 15:46