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

Форум PHP

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

 

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

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

тема: Проблема с уязвимостью скрипта
 
 автор: mjc66   (20.06.2007 в 15:18)   письмо автору
 
 

Вот код моего поискового скрипта:

<?php
//connection to MySQL
$db_host "localhost";
$db_user "login";
$db_password "password";
$db_name "my_db";
$connection mysql_connect ($db_host$db_user$db_password) or die ('error connection');
mysql_select_db($db_name$connection);



//variables
@$id =$_GET['id'];
@
$name =$_GET['name'];
@
$page =$_GET['page'];
@
$group_production =$_GET['group_production'];

//chekboxes
if ( empty($name ) )
{
    
// не заполнено поле
    
die("<div class='search' align='center'>
                    <font color='#CC0000'><b>Необходимо заполнить поле поиска!</b></font></div>"
);
}

if (isset(
$id)) {
    
$srch='id';} //id - имя столбца в таблице
    
if (isset($name)) {
        
$srch='name';} //name - имя столбца в таблице
        
if (isset($page)) {
            
$srch='page';} //page - имя столбца в таблице
            
if (isset($group_production)) {
                
$srch='group_production';} //group_production - имя столбца в таблице


                
@$query "SELECT * FROM tovary WHERE $srch like '%$name%' ";
                
$result mysql_query($query) or die('Ошибка запроса');

                if ( 
mysql_num_rows($result) == ) {
                    print(
"<div class='search' align='center'>
                    <font color='#CC0000'><b>По вашему запросу ничего не найдено! Попробуйте изменить форму поиска.</b></font></div>"
);
                } else {
                    print(
"<table border='1' cellspacing='1' cellpadding='1' class='search'><caption align=top class='search'>Результат поиска:</caption><tr><td width='35%' class='search_top' align='center'><b>Наименование товара</b></td><td width='20%' class='search_top' align='center'><b>Страница в каталоге</b></td><td width='30%' class='search_top' align='center'><b>Группа товаров</b></td></tr>");
                    
// Переменная i следит чередование цвета
                    
$i 0;
                    while(
$t = @mysql_fetch_array($result)) {
                        
$i++;
                        
$class = ( $i == ) ? "odd" "even";
                        print(
'
            <style> 
            .odd{background:99FFCC}  
            .even{background:FFFFCC}  
            </style>
          <tr class="'
.$class.'">
           <td  width="35%" class="search"><font color="#000000">'
.$t[name].'</font></td>
           <td  width="20%" class="search"><a class="1" href="'
.$t[page].'?id='.$t[id].'">Найти на странице</a></font></td>
           <td  width="30%" class="search"><font color="#000000">'
.$t[group_production].'</font></td>
          </tr>'
);
                    }

                    print(
"</table>");
                }

?>

Сам я в этом ничего не волоку, но те кто его видел, как-то пространно намекали на уязвимость кода (или БД???). Вобщем если такая проблема действительно есть, то большая просьба указать в каком месте и пути ее устранения. Заранее благодарю.

   
 
 автор: Ressfourt   (20.06.2007 в 15:37)   письмо автору
 
   для: mjc66   (20.06.2007 в 15:18)
 


@$query = "SELECT * FROM tovary WHERE $srch like '%$name%' "; 

замени на 
@$query = "SELECT * FROM tovary WHERE $srch like '%".mysql_escape_string(addslashes($name))."%' "; 

   
 
 автор: hammet   (20.06.2007 в 15:46)   письмо автору
 
   для: Ressfourt   (20.06.2007 в 15:37)
 

нет инициализации переменной $srch.
В пхп это не обязательно, но при включенной register_globals это создает дополниьельную дыру в безопасности.
Эта переменная у Вас инициализируется только при выполнении if(). Т.е. можно подделать форму так чтобы не одно из условий невыполнилось и передать
инъекцию в переменной $srch. Это плохо.
Вобще весь код было бы неплохо переписать.

   
 
 автор: Trianon   (20.06.2007 в 16:26)   письмо автору
 
   для: hammet   (20.06.2007 в 15:46)
 

При заполненном $name переменная $srch в этом скрипте инициализирована всегда
Внимательно читайте код.

При незаполненном - скрипт уходит по die(), и тогда ему безразличны любые переменные.

   
 
 автор: TXC   (21.06.2007 в 16:18)   письмо автору
 
   для: Trianon   (20.06.2007 в 16:26)
 

Передумал =)

   
Rambler's Top100
вверх

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