Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Поиск пользователя (Из книжки головоломки на php для хакера)
 
 автор: smit272   (10.07.2007 в 15:06)   письмо автору
 
 

В главе II 4.4 приводится пример поиска пользователя

<table>
<form method=post>
<tr><td>Имя:</td><td><input type=text name=name value="<?= $_POST['name'?>"></td></tr>
<tr><td>&nbsp;</td><td><input type=submit value='Искать'></td></tr>
</form>
</table>
<?php
  
if(!empty($_POST))
  {
    
// Устанавливаем соединение с базой данных
    
require_once("config.php"); 

    
// Производим поиск пользователя с именем $_POST['name']
    
$query "SELECT * FROM userslist 
              WHERE name 
              LIKE '
$_POST[name]%'
              ORDER BY name"
;
    
$usr mysql_query($query);
    if(!
$usr) exit("Ошибка - ".mysql_error());
    while(
$user mysql_fetch_array($usr))
    {
      echo 
"Имя пользователя - $user[name]<br>";
    }
  }
?>


и дается ответ как избежать SQL инъекции с использованием конструкции UNION


<table>
<form method=post>
<tr><td>Имя:</td><td><input type=text name=name value="<?= $_POST['name'?>"></td></tr>
<tr><td>&nbsp;</td><td><input type=submit value='Искать'></td></tr>
</form>
</table>
<?php
  
if(!empty($_POST))
  {
    
// Устанавливаем соединение с базой данных
    
require_once("config.php"); 

    
// Если режим магических кавычек не включён
    // обрабатываем поле $_POST['name'] функцией
    // mysql_escape_string()
    
if(!get_magic_quotes_gpc())
    {
      
$_POST['name']  = mysql_escape_string($_POST['name']);
    }


    
// Производим поиск пользователя с именем $_POST['name']
    
$query "SELECT * FROM userslist WHERE name LIKE '%o%' ORDER BY name";
    
$usr mysql_query($query);
    if(!
$usr) exit("Ошибка - ".mysql_error());
    while(
$user mysql_fetch_array($usr))
    {
      echo 
"Имя пользователя - $user[name]<br>";
    }
  }
?>


Вопрос:
Почему даный ответ не затрагивает защиты от явы, с ее же помощью тоже можно вызвать SQL или как-то напортачить используя простой код
"><script>alert('');</script><"

   
 
 автор: sms-send   (10.07.2007 в 22:10)   письмо автору
 
   для: smit272   (10.07.2007 в 15:06)
 

Цит.:
$query = "SELECT * FROM userslist WHERE name LIKE '%o%' ORDER BY name";


может здесь всё-таки...

$query = "SELECT * FROM userslist WHERE name LIKE '%$_POST[name]%' ORDER BY name";


?

>Почему даный ответ не затрагивает защиты от явы, с ее же помощью тоже можно вызвать SQL или как-то напортачить используя простой код
>"><script>alert('');</script><"

Цитирую вас же:
"дается ответ как избежать SQL инъекции с использованием конструкции UNION"

Конкретно по данной теме авторы ответ дали (обработка данных функцией mysql_escape_string).

>защиты от явы, с ее же помощью тоже можно вызвать SQL

Очень интересно, ниразу с этим не сталкивался, покажите пример.

XSS-атака с помощью JavaScript здесь тоже невозможна (возможна, только в случае если в базе в поле "name" хранятся некорректные данные, но это уже касается скорее скрипта регистрации).
Но если вас волнует именно этот момент, замените:

echo "Имя пользователя - $user[name]<br>";


на:

echo "Имя пользователя - ".htmlspecialchars($user['name'])."<br>";


Это предупредит случаи с некорректными данными в базе.

   
 
 автор: smit272   (10.07.2007 в 23:56)   письмо автору
 
   для: sms-send   (10.07.2007 в 22:10)
 

так сработает то <input type=text name=name value="<?= $_POST['name'] ?>">
Он и обработает яву :)

Понятно и то что этот инпут тоже можно прикрыть htmlspecialchars
Но почему в книжке то пример это не описывает...

   
 
 автор: Unkind   (11.07.2007 в 06:36)   письмо автору
 
   для: smit272   (10.07.2007 в 23:56)
 

Ну вообще-то надо использовать htmlspecialchars() на выходе, а не при записи в базу данных.
В противном случае возможна порча амперсанд-энкодинг представлений символов <, > и, в зависимости от 2ого аргумента, " и/или '.

   
 
 автор: sms-send   (11.07.2007 в 08:17)   письмо автору
 
   для: Unkind   (11.07.2007 в 06:36)
 

>Ну вообще-то надо использовать htmlspecialchars() на выходе, а не при записи в базу данных.

Unkind, а кто против то?

   
 
 автор: Unkind   (11.07.2007 в 09:29)   письмо автору
 
   для: sms-send   (11.07.2007 в 08:17)
 

Мне почему-то показалось, что запись в базу данных была.
Спать надо ночью...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования