Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Простите за нубский вопрос про рег.выражения (https://forum.antichat.xyz/showthread.php?t=26381)

EST a1ien 02.11.2006 13:19

Простите за нубский вопрос про
 
Ещё раз прошу прощения за тупой вопрос, но незнаю как реализовать.

Нужно проверять введенные данные пользователя чтобы защетится от SQL-inj
Говорю сразу addslashes не предлогать.
Так-как по непняной пречине на MSSQL работает очень криво.

Подскажите способ как защетится но при учете того что пользователь должен использовать спец символы.


==================
Вобщнм принемаю любые варианты решения

PS: Язык php.

Ладно тогда предложите хороший метод защиты от SQL-inj

hidden 02.11.2006 18:58

Код:

$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-';
И такой запрос вернёт не точто надо.

Но всёравно спс. за идею у кого ещё есть какиенибудь идеи


hidden 02.11.2006 20:12

Ну тогда кодируй всё в base64_encode

EST a1ien 02.11.2006 20:32

Ну закодирую и что дальше делать с закодированой строкой?

hidden 02.11.2006 21:08

Цитата:

Сообщение от EST a1ien
Ну закодирую и что дальше делать с закодированой строкой?

Ну а потом раскодируешь.

А ещё строки в 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;


ShAnKaR 02.11.2006 22:28

я не понял - экранировать спецсимволы нельзя? или именно addslashes нельзя?

nc.STRIEM 02.11.2006 23:21

Перед сохранением данных в базе кодируй их например при помощи urlencode() ! тоесть пользователя >l<izn- сохраняй в базе как %3El%3Cizn- ивсе!!!
а при выводе данных обратно раскодируй их! надеюсь понял идею...

nerezus 02.11.2006 23:53

Определить спецсимволы и заэкранировать слешами.

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- чтобы войти в игру.

Ладно тогда так каие символы надо фильтровать для защиты понятно что " ' + какие ещё?


Время: 20:13