Показать сообщение отдельно

  #5  
Старый 23.02.2009, 11:46
it's mу
Banned
Регистрация: 12.02.2009
Сообщений: 73
Провел на форуме:
175651

Репутация: 171
По умолчанию

jokester я не могу сказать какой точно код, так как не вижу его, но могу рассказать тебе историю:

Есть код, допустим он выглядит следующем образом:
Код:
<?
// Начало скрипта
...
// Скрипт получает переменную из формы, допустим <input name="pass" type="password">
$pass = $_POST['pass'];

// Здесь идет проверка/заменна символов у переменной $pass, допустим определим проверку функцией:
function ReRe($re) {
	$re = preg_replace("/'/", "\\", $re);
	$re = preg_replace("/\"/", "\\", $re);
	$re = preg_replace("/</", "", $re);
	$re = preg_replace("/>/", "", $re);
	$re = preg_replace("/\//", "", $re);
	$re = preg_replace("/:/", "", $re);
	$re = preg_replace("/\./", "", $re);
	
	return $re;
	}

// Дальше скрипт выполняет запрос к БД, и вот его у меня нету
...
// Конец скрипта
?>
Если смотреть по выдачи ошибки MySQL, то получается следующее:
Код:
SELECT * FROM passwords where (pwd = '$pass' or pwd = '$pass' or pwd = '$pass')  and dateend>='1235374244'
Т.е. если в поле вставить допустим ' (апостроф), то скрипт выдает следующую ошибку:
Код:
MySQL Error!
------------------------

The Error returned was:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\' or pwd = '\') and dateend>='1235374381'' at line 1

Error Number:
1064 
SELECT * FROM passwords where (pwd = '\' or pwd = '\' or pwd = '\')  and dateend>='1235374381'
Я в растерянности даже не знаю, что сделать, от безысходности даже пытался апостроф заменить на &apos (теоретически прокатывает) и запрос типа: pass&apos) or 1=1#' принимает радостный вид:
Код:
SELECT * FROM passwords where (pwd = 'pass') or 1=1#\' or pwd = 'pass')' or pwd = 'pass') ')  and dateend>='1235374814'
Но глаз режет информация о синтаксической ошибке:
Код:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'pass')' or pwd = 'pass') ') and dateend>='1235374941'' at line 1
Вот такая вот печальная история с трагическим концом. Как думаете дети, в чем автор допустил ошибку?
 
Ответить с цитированием