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

Форум PHP

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

 

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

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

тема: Защита от SQL и XSS атак!
 
 автор: сотка   (16.01.2012 в 21:10)   письмо автору
 
 

всем привет! Подскажите на примере скрипта каким образом зашитьтся от данного вида атак!
<?php
.........
  
error_reporting(E_ALL & ~E_NOTICE);



 require(
"filesize.php");
  
// Устанавливаем соединение с базой данных
  
require_once("config/config.php");
  
// Подключаем SoftTime FrameWork
  
require_once("config/class.config.php");
 

  

  try
  {
  
    
// Если не передан параметр id_position - выводим список разделов
    
if(empty($_GET['id_position']))
    {
      
// Проверяем GET-параметры, предотвращая SQL-инъекцию
      
$_GET['page']       = intval($_GET['page']);
      
$_GET['id_catalog'] = intval($_GET['id_catalog']);
  
      if(empty(
$_GET['id_catalog']))
      {
        
// Запрашиваем параметры текущего раздела
        
$query "SELECT * FROM $tbl_yava_catalog 
                  WHERE id_catalog = 
$_GET[id_catalog]";
        
$cat mysql_query($query);
        if(!
$cat)
        {
          throw new 
ExceptionMySQL(mysql_error(), 
                                   
$query,
                                  
"Ошибка при извлечении 
                                   параметров текущего раздела"
);
        }
        
$catalog mysql_fetch_array($cat);
      }
  
     
  
      
// Запрашиваем подразделы текущего раздела
      
$query "SELECT * FROM $tbl_yava_catalog
                WHERE hide = 'show' AND id_parent = 
$_GET[id_catalog]
                ORDER BY pos"
;
      
$sub mysql_query($query);
      if (!
$sub)
      {
        throw new 
ExceptionMySQL(mysql_error(), 
                                 
$query,
                                
"Ошибка при обращении к 
                                 блоку подразделов"
);
      }
      if(
mysql_num_rows($sub))
      {
        
         
// Верхний шаблон
              
$pagename "скачать приложения";
      
$keywords "скачать приложения";
        require_once (
"templates/top.php");
        
        
        while(
$subcatalog mysql_fetch_array($sub))
        {
          echo 
"<div class=\"link\"><a href=\"".$_SERVER['PHP_SELF']."?id_catalog=".$subcatalog['id_catalog']."\" >".
                       
htmlspecialchars($subcatalog['name'])."</a></div>";
                     
                       
        }
     
                     
//Подключаем нижний шаблон
    
require_once ("templates/bottom.php");
      }

       
    }

  

      
// Проверяем GET-параметры, предотвращая SQL-инъекцию
      
$_GET['page']       = intval($_GET['page']);
      
$_GET['id_catalog'] = intval($_GET['id_catalog']);
  
    
// Если GET-параметр id_position не передан - выводим 
    // список файлов в каталоге
    
if(empty($_GET['id_position']))
    {
      
// Проверяем параметр page, предотвращая SQL-инъекцию
      
$_GET['page'] = intval($_GET['page']);
  
      
// Число сообщений на странице
      
$pnumber 3;
      
// Число ссылок в постраничной навигации
      
$page_link 1;
      
// Объявляем объект постраничной навигации
      
$obj = new pager_mysql($tbl_yava_position,
                             
"",
                             
"WHERE id_catalog = $_GET[id_catalog]",
                             
$pnumber,
                             
$page_link);


                 
// Верхний шаблон
              
$pagename "скачать приложения";
      
$keywords "скачать приложения";
          
        require_once (
"templates/top.php");                  
   
// Получаем записи базы данных в виде массива
    
$yava $obj->get_page();
   
// Если имеется хотя бы одна запись - выводим 
   
if(!$yava) exit();
   
{

      for(
$i 0$i count($yava); $i++)
      {

 
         
     
      
     echo 
"<div class=\"link\"><a href=yava.php?id_position={$yava[$i][id_position]}>{$yava[$i][name]}</a>&nbsp;";
       echo 
getfilesize($yava[$i][big]);
 echo 
" </div>";
      
}
  } 
     
      
// Выводим ссылки на другие страницы
        
echo'<div class="razdel">';
      echo 
$obj ;
echo
'</div>';

echo 
"<div class=\"link\"><a href='mp3_cat.php'>музыка</a></div>";
       echo 
"<div class=\"link\"><a href='flash_cat.php'>Flash</a></div>";
       echo 
"<div class=\"link\"><a href='gallery.php'>картинки</a></div>";
      echo 
"<div class=\"link\"><a href='index.php'>на главную</a></div>";
   
      require_once(
"templates/bottom.php");
  

}
 
// Если GET-параметр id_position передан - выводим информацию
    // о файле и ссылку скачать
    
else
    {
      
// Проверяем, является ли параметр id_position числом
      
$_GET['id_position'] = intval($_GET['id_position']); 
      
// Выводим выбраннй файл
      
$query "SELECT id_position,
                       name,
                       boby,
                       yava,
                       small,
                       big ,
                       hide ,
                       pos ,
                       id_catalog 
                FROM 
$tbl_yava_position
                WHERE hide = 'show' AND
                      id_position = 
$_GET[id_position]";
      
$res mysql_query($query);
      if(!
$res)
      {
        throw new 
ExceptionMySQL(mysql_error(), 
                                 
$query,
                                
"Ошибка при извлечении 
                                 текущей позиции"
);
      }
      
$yava mysql_fetch_array($res);
  
      
 
// Верхний шаблон
              
$pagename =  $yava['name'];
      
$keywords =  $yava['name'];
        require_once (
"templates/top.php");
echo
'<div class="link">';
  echo
$yava[name]&nbsp; ";
echo
'</div>';
echo
'<div class="link">';
  echo 
"  <img src={$yava[yava]}>  ";
echo
'</div>';
echo
'<div class="link">';
      echo 
"$yava[boby]&nbsp;&nbsp; ";
echo
'</div>';

         echo
'<div class="link">';
     echo 
"<a href='$yava[big]'>скачать</a>&nbsp;&nbsp;";
echo
'</div>';
echo
"<div class=\"link\"><a href=# onClick='history.back()'>назад</a></div>";

 echo
'<div class="razdel">скачать бесплатно</div>';


       echo 
"<div class=\"link\"><a href='mp3_cat.php'>музыка</a></div>";
       echo 
"<div class=\"link\"><a href='flash_cat.php'>Flash</a></div>";
       echo 
"<div class=\"link\"><a href='gallery.php'>картинки</a></div>";
      echo 
"<div class=\"link\"><a href='index.php'>на главную</a></div>";

                     
//Подключаем нижний шаблон
    
require_once ("templates/bottom.php");
            
    }
}
  
  catch(
ExceptionMySQL $exc)
  {
    require_once(
"exception_mysql_debug.php");
  }
  catch(
ExceptionMySQL $exc)
  {
    require_once(
"exception_mysql_debug.php"); 
  }
  catch(
ExceptionMember $exc)
  {
    require_once(
"exception_member_debug.php"); 
  }
?>

прозьба показать каким образом использовать защиту на приведенном примере,чтобы больше вопросов не возникало! За ранее благодарю! Скрипт действительно ужастен,помогите разобраться в правильном кодинге!

  Ответить  
 
 автор: cheops   (17.01.2012 в 02:10)   письмо автору
 
   для: сотка   (16.01.2012 в 21:10)
 

У вас здесь стоит защита от SQL-инъекции. Вы не постите такие длинные листинги, прикрепляйте их в виде файла.

  Ответить  
 
 автор: сотка   (17.01.2012 в 19:12)   письмо автору
 
   для: cheops   (17.01.2012 в 02:10)
 

ну да...а вот например более правильный код
  echo" htmlspecialchars($yava[name])&nbsp; ";
правильно понимаю все что касается данных пропускаем через htmlspecialchars() ?

  Ответить  
 
 автор: cheops   (17.01.2012 в 20:40)   письмо автору
 
   для: сотка   (17.01.2012 в 19:12)
 

Вызов htmlspecialchars() нужно либо выносить за пределы строки, либо использовать фигурные скобки для интерполяции значений.

>правильно понимаю все что касается данных пропускаем через htmlspecialchars() ?
Да, особенно, если эти данные ввел пользователь.

  Ответить  
 
 автор: сотка   (17.01.2012 в 22:06)   письмо автору
 
   для: cheops   (17.01.2012 в 20:40)
 

не много не понял каким образом за пределы строки?
echo" htmlspecialchars({$yava[name]})&nbsp; ";

вот так тогда более правильнее?

  Ответить  
 
 автор: Slo_Nik   (17.01.2012 в 22:38)   письмо автору
 
   для: сотка   (17.01.2012 в 22:06)
 

нет
правильно будет

<?php 
echo htmlspecialchars($var);
//
echo "строка ".htmlspecialchars($var)." продолжение строки";
?>

  Ответить  
 
 автор: сотка   (18.01.2012 в 12:14)   письмо автору
 
   для: Slo_Nik   (17.01.2012 в 22:38)
 

Спасибо большое всем за помощь! Теперь все вроде понятно!

  Ответить  
Rambler's Top100
вверх

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