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

Форум PHP

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

 

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

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

тема: достаточно ли данные обработать mysql_escape_string() для безопасного запроса?
 
 автор: tAleks   (29.08.2006 в 11:18)   письмо автору
 
 

Передаю через GET значение, оно может быть цифрой, может быть и вперемешку цифры с буквами. Но на сколько я знаю, GET легко подделать. В связи с чем вопрос: Достаточно ли значение обработать mysql_escape_string(), чтобы быть уверреными, что здоумышленники обломятся, если захотять подделать GET? Безопасно ли будет использовать значение обработанное mysql_escape_string() в MySQL запросе?

   
 
 автор: pini-pini   (29.08.2006 в 11:25)   письмо автору
 
   для: tAleks   (29.08.2006 в 11:18)
 

В принципе да, но если, например поле - цифровое то можно его проверять при помощи is_numeric и т. д.
Конечно ещё можно проверять при помощи регулярных выражений.
В любом случае, чтобы код хотя-бы относительно трудно было взломать: надо делать очень много жёстких проверок и не надо делать код открытым

   
 
 автор: tAleks   (29.08.2006 в 11:29)   письмо автору
 
   для: pini-pini   (29.08.2006 в 11:25)
 

что подразумевается под открытым кодом?

   
 
 автор: RV   (29.08.2006 в 11:31)   письмо автору
 
   для: tAleks   (29.08.2006 в 11:29)
 

это значит нельзя выкладывать исходники на публику.

   
 
 автор: cyberface   (29.08.2006 в 11:32)   письмо автору
 
   для: tAleks   (29.08.2006 в 11:18)
 

Как правило, этого будет достаточно для защиты от атак, но не для защиты от ошибок, связанных с этими атаками.

   
 
 автор: tAleks   (29.08.2006 в 11:36)   письмо автору
 
   для: cyberface   (29.08.2006 в 11:32)
 

от каких ошибок? можно по подробнее?

   
 
 автор: cyberface   (29.08.2006 в 11:41)   письмо автору
 
   для: tAleks   (29.08.2006 в 11:36)
 

ну, лично мне не охота, чтобы мой скрипт допуска ошибки =)
Ошибки эти связанны с корректностью данных в запросах.
По этому, я хорошо фильтрую данные, если данные число - проверяем их с помощью is_numeric, в случае ошибки присваиваю значение по умолчанию.
Если данные - строка, которая подчиняется правилам (например, в ней могут быть только буквенные символы и - _ ), то проверяю ее с помощью рег. выражений.

   
 
 автор: CrazyAngel   (29.08.2006 в 11:35)   письмо автору
 
   для: tAleks   (29.08.2006 в 11:18)
 

так к сведенью, POST тоже очень легко подделать...

   
 
 автор: tAleks   (29.08.2006 в 11:39)   письмо автору
 
   для: CrazyAngel   (29.08.2006 в 11:35)
 

как? можно пример?

   
 
 автор: cyberface   (29.08.2006 в 11:43)   письмо автору
 
   для: tAleks   (29.08.2006 в 11:39)
 

Точно так же как и GET, достаточно лишь изменить форму.... например, ты добавляешь тему на форум, в форме добавления есть скрытое значение -


<input type="hidden" name="id" value="242">


Я могу легко ее изменить


<input type="hidden" name="id" value="242' OR 1=1/*">


Вот тебе и пример атаки.

   
 
 автор: tAleks   (29.08.2006 в 11:51)   письмо автору
 
   для: cyberface   (29.08.2006 в 11:43)
 

А как изменить скрытое поле на сайте?

   
 
 автор: cheops   (29.08.2006 в 12:10)   письмо автору
 
   для: tAleks   (29.08.2006 в 11:51)
 

Форма может быть расположена не на сайте, а на локальном хосте, кроме того, формы может не быть вовсе - злоумышленик может эмулировать поведение формы через сокеты.

   
 
 автор: CrazyAngel   (29.08.2006 в 12:02)   письмо автору
 
   для: tAleks   (29.08.2006 в 11:39)
 

Вот хороший скрипт

<?php
  
  
//Данные
  
$dataPOST urlencode("
             &alogin=youmydream
               &apass=12
             \r\n\r\n"
);


  
$dataGET urlencode("
             &name=CrazyAngel
               &email=CrazyAngel@CrazySoft.ru
             &message=Здесь очень крутое сообщение
             "
);
  
  
$Cookie "drauO2AIHx68o = eXRuZ2hiZGJkcsdgmZ2; 
drk4ioi37YZL6 = Y3JhenlhbmdghmlbA%3D%3D; ;"
;
  
$Referer "CrazyAngel";
  
$UserAgent "User-Agent: Script PHP/1.0";

  
//Адрес хоста
  
$hostname "site.ru";
  
//Путь
  
$path "/flirt/folders/";
  
$line "";
 
//Коннект
  
$fp fsockopen($hostname80$errno$errstr30);
  
// Проверка
  
if (!$fp) echo "$errstr ($errno)<br />\n";
  else
  {
    
$path .="?".$dataGET;

    
// Заголовок HTTP-запроса
    
$headers "POST $path HTTP/1.1\r\n";
    
$headers .= "Host: $hostname\r\n";
    
//UserAgent
    
$headers .= $UserAgent;
    
//Подделка реферера
    
$headers .= "Referer: ".$Referer ."\r\n";
    
//Подделка cookies
    
$headers .= "Cookie:"$Cookie."\r\n";
    
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
    
$headers .= "Content-Length: ".strlen($dataPOST)."\r\n\r\n";
    
// Отправляем HTTP-запрос серверу
    
fwrite($fp$headers.$dataPOST);
    
// Получаем ответ
    
while (!feof($fp))
    {
      
$line .= fgets($fp1024);
    }
    
fclose($fp);
  }
echo 
"<b>Полученные данные от сервера $hostname:</b><br>";
echo 
$line;
?>

   
 
 автор: cheops   (29.08.2006 в 12:09)   письмо автору
 
   для: CrazyAngel   (29.08.2006 в 11:35)
 

И $_POST, и $_GET, и $_COOKIE и реферер и пользовательский агент - всё подделывается - доверять более или менее можно только $_SESSION и то, если туда не попадает информация, введённая пользователем.

   
 
 автор: RV   (29.08.2006 в 12:40)   письмо автору
 
   для: cheops   (29.08.2006 в 12:09)
 

идентификтор сессии тоже идет от пользователя. а это или get или post или cookies

   
 
 автор: ExtraBrain   (29.08.2006 в 12:56)   письмо автору
 
   для: RV   (29.08.2006 в 12:40)
 

Лично я делаю так.

<?
$zapros
='select .... чего то там ';
if(
$parametr==1$zapros='select .... чего то там раз';
if(
$parametr==2$zapros='select .... чего то там ещё';
if(
$parametr==3$zapros='select .... чего то там третьего';
?>

ТО есть использую $parametr только для проверки, а не для содержимого запроса.

   
 
 автор: Loki   (29.08.2006 в 12:53)   письмо автору
 
   для: tAleks   (29.08.2006 в 11:18)
 

Если переменная текстовая, то да. Если числовая - до надо ее дополнительно проверять.

   
Rambler's Top100
вверх

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