Просмотр полной версии : Простите за нубский вопрос про рег.выражения
EST a1ien
02.11.2006, 13:19
Ещё раз прошу прощения за тупой вопрос, но незнаю как реализовать.
Нужно проверять введенные данные пользователя чтобы защетится от SQL-inj
Говорю сразу addslashes не предлогать.
Так-как по непняной пречине на MSSQL работает очень криво.
Подскажите способ как защетится но при учете того что пользователь должен использовать спец символы.
==================
Вобщнм принемаю любые варианты решения
PS: Язык php.
Ладно тогда предложите хороший метод защиты от SQL-inj
$txt="Текст Текст Text Text";
$txt=str_replace(array('%','+'),array('\\x',' '),urlencode($txt));
echo $txt;
EST a1ien
02.11.2006, 19:58
Не к сожалению не катит так-как к примеру есть пользователь >l<izn-
Он захочет посмотреть инфу о себе введет свой логин он обработается и вот что получится
select * from memb WHERE Name='\x3El\x3Cizn-';
И такой запрос вернёт не точто надо.
Но всёравно спс. за идею у кого ещё есть какиенибудь идеи
Ну тогда кодируй всё в base64_encode
EST a1ien
02.11.2006, 20:32
Ну закодирую и что дальше делать с закодированой строкой?
Ну закодирую и что дальше делать с закодированой строкой?Ну а потом раскодируешь.
А ещё строки в SQL можно в HEX кодировать, тапа того
select * from memb WHERE Name=0x3E6C3C697A6E2D;
$txt=">l<izn-";
$ret='0x';
$hex='0123456789ABCDEF';
for($x=0;$x<strlen($txt);$x++){
$ret.=$hex{ord($txt{$x})>>4}.$hex{ord($txt{$x})&15};
}
echo $ret;
я не понял - экранировать спецсимволы нельзя? или именно addslashes нельзя?
nc.STRIEM
02.11.2006, 23:21
Перед сохранением данных в базе кодируй их например при помощи urlencode() ! тоесть пользователя >l<izn- сохраняй в базе как %3El%3Cizn- ивсе!!!
а при выводе данных обратно раскодируй их! надеюсь понял идею...
Определить спецсимволы и заэкранировать слешами.
EST a1ien
03.11.2006, 21:48
я не понял - экранировать спецсимволы нельзя? или именно addslashes нельзя?
Нет просто MSSQL както криво работает спри этом тоесть вот такой запрос вызывает ошибку в MSSQL
select * from memb WHERE Name='test\'';
Server: Msg 105, Level 15, State 1, Line 1
Unclosed quotation mark before the character string 'test\';
'.
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near 'test\';
'.
Перед сохранением данных в базе кодируй их например при помощи urlencode() ! тоесть пользователя >l<izn- сохраняй в базе как %3El%3Cizn- ивсе!!!
а при выводе данных обратно раскодируй их! надеюсь понял идею...
Понял но некатит так-как это база одной онлайн игры и я немогу редактировать то как данные хранятся в базе потомучто допустим пользователь зарегался с ником >l<izn- в базе он сохранился как %3El%3Cizn- и поэтому пользователю предётся вводить %3El%3Cizn- чтобы войти в игру.
Ладно тогда так каие символы надо фильтровать для защиты понятно что " ' + какие ещё?
nc.STRIEM
03.11.2006, 21:55
о допустим пользователь зарегался с ником >l<izn- в базе он сохранился как %3El%3Cizn- и поэтому пользователю предётся вводить %3El%3Cizn- чтобы войти в игру.
НЕ прийдеться! все данные которыйе он вводит, опять кодируй, и ищи в базе уже закодированные! а перед выводом раскодируй!
короч суть така примерно!
пользовательские данные -> кодируем их -> выполняем различные операции че надо, с базой работаем и.т.д -> раскодируем -> выводим пользователю!
В базе все в закодированном виде храниться!
EST a1ien
03.11.2006, 22:40
Нельзя кодировать данные так-как с базой работает нетолько сайт а ещё игра и вот она данные не будет декодировать(и исправить это я немогу).
ЗЫ надо защетить сайт. Какие символы надо фильтровать????
Ну а вариант с HEX'ом чем не устраивает, MySql и MSSql понимают его как текст, так что он будет храница в текстовом виде.
EST a1ien
03.11.2006, 23:28
Ну а вариант с HEX'ом чем не устраивает, MySql и MSSql понимают его как текст, так что он будет храница в текстовом виде.
Ксожалению он тоже непотходит по двум причинам первая(правда не очень значительная) в базе имя чара хранится как nvarchar(50) и менять это не желательно дак вот этот тип не потдерживает HEX и вторая причина это нельзя работать с HEX'om при запросе с like.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot