HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 27.10.2008, 00:26
Doom123
Постоянный
Регистрация: 11.11.2006
Сообщений: 834
Провел на форуме:
3941248

Репутация: 668


Отправить сообщение для Doom123 с помощью ICQ
По умолчанию

хотите защиту он от скуль ????

http://il.php.net/manual/ru/function.mysql-real-escape-string.php

рименение mysql_real_escape_string() к каждой переменной, вставляемой в запрос, предотвращает SQL Injection. Нижеследующий код является наилучшим вариантом составления запросов и не зависит от установки Magic Quotes.

Запрос, составленный таким образом, будет выполнен без ошибок, и взлом с помощью SQL Injection окажется невозможен.


PHP код:
<?php
// Функция экранирования переменных
function quote_smart($value)
{
    
// если magic_quotes_gpc включена - используем stripslashes
    
if (get_magic_quotes_gpc()) {
        
$value stripslashes($value);
    }
    
// Если переменная - число, то экранировать её не нужно
    // если нет - то окружем её кавычками, и экранируем
    
if (!is_numeric($value)) {
        
$value "'" mysql_real_escape_string($value) . "'";
    }
    return 
$value;
}

// Соединяемся
$link mysql_connect('mysql_host''mysql_user''mysql_password')
    OR die(
mysql_error());

// Составляем безопасный запрос
$query sprintf("SELECT * FROM users WHERE user=%s AND password=%s",
            
quote_smart($_POST['username']),
            
quote_smart($_POST['password']));

mysql_query($query);
?>
А также класс от меня

PHP код:
<?php

/**
 * @author @FATAL@
 * @copyright 2008
 */

class DB
{
    public function 
__construct($host$user$db_pass$db)
    {
        
$this->host $host;
        
$this->user $user;
        
$this->db_pass $db_pass;
        
$this->db $db;
    }

    public function 
conn()
    {
        if(!(
$this->connect = @mysql_connect($this->host$this->user$this->db_pass)))
        {
            
$this->false 'Connection Error';
            return 
false;
        }
        
        return (!@
mysql_select_db($this->db,$this->connect))? false true;
    }

    public function 
mysql_qw()
    {
        
$this->args func_get_args();
        
$qwery $this->mysql_make_qw();
        return 
$result mysql_query($qwery,$this->connect);
        
mysql_free_result($result);
    }
    
    private function 
mysql_make_qw()
    {
        
$tml $this->args;
        
$tml[0] = str_replace('%''%%'$tml[0]);
        
$tml[0] = str_replace('?''%s'$tml[0]);
        foreach (
$tml as $i => $v)
        {
            if (!
$i)
             continue;
            if (
is_int($v))
             continue;
                
            if (
get_magic_quotes_gpc())
                
$v stripslashes($v);
    
            
$tml[$i] = "'" mysql_real_escape_string($v,$this->connect) . "'";
        }
        for (
$i $c count($tml) - 1$i $c 20$i++)
        {
            
$tml[$i 1] = "UNKNOWN_PLACEHOLDER_$i";
            return 
call_user_func_array("sprintf"$tml);
        }
    }
    
    public function 
mysql_fetch($result)
    {
        return 
mysql_fetch_assoc($result);
    }
    
    public function 
error()
    {
        return (@
mysql_error($this->connect))? mysql_error($this->connect): $this->false;
    }

    public function 
__destruct()
    {
        @
mysql_close($this->connect);
    }
}
?>

Последний раз редактировалось Doom123; 27.10.2008 в 00:28..
 
Ответить с цитированием

  #2  
Старый 27.10.2008, 00:34
EXSlim
Познающий
Регистрация: 09.10.2006
Сообщений: 92
Провел на форуме:
347686

Репутация: 87
Отправить сообщение для EXSlim с помощью ICQ
По умолчанию

Цитата:
Сообщение от Doom123  
хотите защиту он от скуль ????

http://il.php.net/manual/ru/function.mysql-real-escape-string.php

[B]рименение mysql_real_escape_string() к каждой переменной, вставляемой в запрос, предотвращает SQL Injection. Нижеследующий код является наилучшим вариантом ... блаблабла
Здесь ребята, явно погорячились, или написали так, чтоб не сильно вдаваться в подробности. Раз они так написали, почуму zend ниразу не использовала ее в своем фреймворке?)))

почитал пример на php.net? почитай еще и примечания к этой ф-ции

Последний раз редактировалось EXSlim; 27.10.2008 в 00:44..
 
Ответить с цитированием

  #3  
Старый 27.10.2008, 00:31
NOmeR1
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,188
Провел на форуме:
6023777

Репутация: 2642


Отправить сообщение для NOmeR1 с помощью ICQ
По умолчанию

EXSlim, я про так называемый "скрипт" от b3
Всё, что нужно знать ТС написано нерезусом:
Цитата:
Сообщение от nerezus  
1) Если поле в базе числовое, то: (int) (ну или intval()). Можно по модулю взять при использовании в LIMIT, но это не секурити-дырка.
2) Если текстовое, то просто mysql_real_escape_string()
3) Всякие magic quotes и подобные затычки отключены. Кто не отключил - ССЗБ(что это означает - смотрите на LOR'е)
И ВСЕ! Больше ничего не надо. Ибо запрос испортить левыми данными нельзя.
 
Ответить с цитированием

  #4  
Старый 27.10.2008, 00:38
EXSlim
Познающий
Регистрация: 09.10.2006
Сообщений: 92
Провел на форуме:
347686

Репутация: 87
Отправить сообщение для EXSlim с помощью ICQ
По умолчанию

Цитата:
Сообщение от NOmeR1  
EXSlim, я про так называемый "скрипт" от b3
Всё, что нужно знать ТС написано нерезусом:
я же кажется ясно написал о mysql_real_escape_string, что это за дрянь и почему ее желательно не юзать. Повторяю. Метод, что я написал несколькими комментами выше придумал не я, а zend. Ему пофиг числовое это поле(не эскейпится) или строковое(эскейпится). Он не дергает субд каждый раз и не требует подключения к ней

Последний раз редактировалось EXSlim; 27.10.2008 в 00:45..
 
Ответить с цитированием

  #5  
Старый 27.10.2008, 00:42
Doom123
Постоянный
Регистрация: 11.11.2006
Сообщений: 834
Провел на форуме:
3941248

Репутация: 668


Отправить сообщение для Doom123 с помощью ICQ
По умолчанию

Замечание: mysql_real_escape_string() не экранирует символы % и _. Эти знаки являются масками групп символов в операторах MySQL LIKE, GRANT или REVOKE.

Поэтому нада уметь иногда включать мозг ... да и ваще скоко не писал никогда не использовал эти операторы =) да и темболее с подстовлением данных от пользователя ...
 
Ответить с цитированием

  #6  
Старый 27.10.2008, 00:46
EXSlim
Познающий
Регистрация: 09.10.2006
Сообщений: 92
Провел на форуме:
347686

Репутация: 87
Отправить сообщение для EXSlim с помощью ICQ
По умолчанию

Цитата:
Сообщение от Doom123  
Замечание: mysql_real_escape_string() не экранирует символы % и _. Эти знаки являются масками групп символов в операторах MySQL LIKE, GRANT или REVOKE.

Поэтому нада уметь иногда включать мозг ... да и ваще скоко не писал никогда не использовал эти операторы =) да и темболее с подстовлением данных от пользователя ...
да причем здесь эти символы.
Цитата:
Замечание: Функцию mysql_real_escape_string() можно использовать только после того, как установлено соединение с MySQL. В противном случае возникнет ошибка уровня E_WARNING, а функция возвратит FALSE. Если link_identifier не указан, используется последнее открытое соединение.
 
Ответить с цитированием

  #7  
Старый 27.10.2008, 19:59
Doom123
Постоянный
Регистрация: 11.11.2006
Сообщений: 834
Провел на форуме:
3941248

Репутация: 668


Отправить сообщение для Doom123 с помощью ICQ
По умолчанию

Цитата:
Сообщение от EXSlim  
да причем здесь эти символы.
Оо мм а я не знал что если не поключатся к mysql можно произвести sql иньекцию =\\


EXSlim я не понимаю если ты считаещь что ты прав нах ты тут пишешь? просто используй свой метод .. нах тут чтото комуто доказывть?
 
Ответить с цитированием

  #8  
Старый 27.10.2008, 00:52
lisa99
Постоянный
Регистрация: 15.07.2008
Сообщений: 444
Провел на форуме:
1417964

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

Цитата:
Сообщение от Doom123  
Замечание: mysql_real_escape_string() не экранирует символы % и _. Эти знаки являются масками групп символов в операторах MySQL LIKE, GRANT или REVOKE.
.
а можно привести пример уязвимости, где обходится
функция mysql_real_escape_string() именно с применением этих символов? или иначе..
 
Ответить с цитированием

  #9  
Старый 27.10.2008, 00:58
NOmeR1
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,188
Провел на форуме:
6023777

Репутация: 2642


Отправить сообщение для NOmeR1 с помощью ICQ
По умолчанию

А нельзя ли действовать по принципу KISS [http://ru.wikipedia.org/wiki/Принцип_KISS]?
Каждый метод защиты для каждого случая разный. Если напрягает дополнительная нагрузка на базу - юзайте mysql_escape_string()
EXSlim, твой метод бредовый, так как он проверяет не сами данные, а их тип, а затем делает ненужную фильтрацию.
 
Ответить с цитированием

  #10  
Старый 27.10.2008, 01:08
EXSlim
Познающий
Регистрация: 09.10.2006
Сообщений: 92
Провел на форуме:
347686

Репутация: 87
Отправить сообщение для EXSlim с помощью ICQ
По умолчанию

Цитата:
Сообщение от NOmeR1  
А нельзя ли действовать по принципу KISS [http://ru.wikipedia.org/wiki/Принцип_KISS]?
Каждый метод защиты для каждого случая разный. Если напрягает дополнительная нагрузка на базу - юзайте mysql_escape_string()
EXSlim, твой метод бредовый, так как он проверяет не сами данные, а их тип, а затем делает ненужную фильтрацию.
бредовый? накатай тикет zend`y. бл#ть, я уже 4й раз пишу что этот метод придумал не я, а zend. и использует его вместо этой гребаной mysql_real_escape_string. а ещё вместе с ней его использует охрененная куча людей которые разработывают с zend framework

Цитата:
а можно привести пример уязвимости, где обходится функция mysql_real_escape_string() именно с применением этих символов? или иначе..
а я и не писал что она обходится. я написал что это забивание гвоздей яйцами
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ