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

  #3  
Старый 20.12.2007, 00:54
Евгений Минаев
Познающий
Регистрация: 12.11.2007
Сообщений: 70
Провел на форуме:
1214722

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

----[ EXAMPLE ... ]

Для примера создадим таблицу USERS с полями id username password

PHP код:
mysql CREATE TABLE `users` (
    `
idint(11NOT NULL default '0',
    `
usernamevarchar(15NOT NULL default '',
    `
passwordvarchar(32NOT NULL default ''
    
ENGINE=MyISAM DEFAULT CHARSET=cp1251
И внесем для теста оду запись 1,itdefence,itdefence

PHP код:
mysql INSERT INTO `users` ( `id` , `username` , `password` ) VALUES '1''itdefence''itdefence' ); 
И напишем скрипт со специально сделанной уязвимостью

PHP код:
<?php
    
    $sqlhost     
'localhost';
    
$sqlpass     '';
    
$sqluser     'root';
    
$sqlname    'itdefence';
    
    
$mysql_link mysql_connect($sqlhost,$sqluser,$sqlpass);
    if (!
$mysql_link) die (mysql_error());
    
    
$result mysql_select_db($sqlname);
    if (!
$result) die (mysql_error());
    
    
$query 'SELECT * FROM `users` WHERE `id`=\''.$_GET['id'].'\'';
    
$result mysql_query($query);
    if (!
$result) die (mysql_error());
    
    echo 
mysql_num_rows($result);
    
mysql_close($mysql_link);
    
    
?>
----[ SUBQUERIES ... ]

Для примера я буду рассматривать MySQL > 4.1 так как с этой версии поддерживаются все формы подзапросов,которых требует стандарт
SQL.Подзапрос можно вкладывать в другой подзапрос и его надо обрамлять скобами

PHP код:
mysql SELECT FROM `usersWHERE `id`  = (SELECT MAX(IDFROM `users`) 
PHP код:
mysql SELECT FROM `usersWHERE `id`  =  ANY SELECT MAX(idFROM `users`) 
PHP код:
mysql SELECT FROM `usersWHERE (1,1) = ( SELECT `id`,`usernameFROM `users` ) 
В процессе могут встречаться следующие ошибки , как :

неподдерживаемый синтаксис ошибок
PHP код:
mysql SELECT FROM `usersWHERE `idIN SELECT `idFROM `usersORDER BY `idLIMIT 1)
    -> 
#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 
число столбцов в подзапросе неверное
PHP код:
mysql SELECT SELECT  `id`,`usernameFROM `users`) FROM `users`
    -> 
#1241 - Operand should contain 1 column(s) 
неверное количество строк в поздапросе
PHP код:
mysql SELECT `idFROM `usersWHERE `id` = ( SELECT id FROM `users` )
    -> 
#1242 - Subquery returns more than 1 row 
Ошибка в подзапросе приводит к нарушению всего запроса.Для более ранних версий можно запросы с подзапросами заменить более
легкими конструкциями

PHP код:
mysql SELECT DISTINCT users.* FROM `usersWHERE users.id 
PHP код:
mysql SELECT users.* FROM users LEFT JOIN banned ON users.id banned.id WHERE banned.id IS NOT NULL