Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Защита от SQL-enjection (https://forum.antichat.xyz/showthread.php?t=30506)

je0n 03.01.2007 22:01

Защита от SQL-enjection
 
Короче нужна такая функция, которай я передаю переменную, а она ее обрабатывает и делает безопасной от XSS и SQL-enjection. Функция должна изменять переменную в своем теле (по ссылке), и если переменная была опасна вернуть TRUE иначе FALSE.
Вот что получилось у меня:
Код:

<?php
function filter(&$value)
{
  $b=FALSE;
  if(strpos($value,"'"))
  {
    $value=str_replace("'","",$value);
    $b=TRUE;
  }
  if(strpos($value,";"))
  {
    $value=str_replace(";","",$value);
    $b=TRUE;
  }
  if(strpos($value,"/"))
  {
    $value=str_replace("/","",$value);
    $b=TRUE;
  }
  if(strpos($value,"<"))
  {
    $value=str_replace("<","",$value);
    $b=TRUE;
  }
  if(strpos($value,">"))
  {
    $value=str_replace(">","",$value);
    $b=TRUE;
  }
  return $b;
}
?>

Ну а юзать эту функцию премерно вот так:
Код:

$name=$_POST["name"];
if(filter($name))
{echo "you cant use symbols ',/ here";exit;}

Тока не говорите нафига изменять переменную, если все равно выхожу из скрипта (exit; ). Это на тот случай если выходить не прийдеться, а еще и юзать дальше эту переменную. Ведь я не знаю как дальше будет развиваться все остальное, ради чего я и пишу этот скрипт.
Я фигово разбираюсь во всех атаках, поэтому прошу добавить/исправить код, чтобы он был неуязвим )) даже в том случае, если эту переменну прийдеться использовать дальше как в БД, так и выводить в страницу.

Termin@L 03.01.2007 22:31

ИМХО Проще не замарачиваться, а пользоваться функциями ereg() и htmlspecialchars(), проще явно указать - что можно, а не то что нельзя использовать, а в твоём случае пройдёт такой запрос -
Код:

union select 1,2,3,4,5#
от xss тоже не спасёт, лишь осложнит задачу немного.
Код:

if(!ereg("[A-Za-z]{1,8}",$name)
return false;


max_pain89 03.01.2007 22:44

да сопри из любого форума или КМС, так есть такие функции, просто иногда забывают их применять к переменным

je0n 03.01.2007 22:47

спасибо, решил использовать вместо strpos функцию ereg, а вместо str_replace ereg_replace. Тока недоганю как составить правильный шаблон для функций ereg. Помогите плз, чтобы он пропул русские, английские буквы, точку, запятую и цифры. Как должен выглядеть шаблон

Цитата:

да сопри из любого форума или КМС, так есть такие функции, просто иногда забывают их применять к переменным
Меньше всего хочеться копаться в исходниках форума ;). Я уже думал об этом. Кроме того, вряд ли там все ограничивается одной функцией )

gemaglabin 03.01.2007 22:51

Simple Machine Forums

Код:

function db_query($db_string, $file, $line)
{
        global $db_cache, $db_count, $db_connection, $db_show_debug, $modSettings;

        // One more query....
        $db_count = !isset($db_count) ? 1 : $db_count + 1;

        // Debugging.
        if (isset($db_show_debug) && $db_show_debug === true)
        {
                // Initialize $db_cache if not already initialized.
                if (!isset($db_cache))
                        $db_cache = array();

                if (!empty($_SESSION['debug_redirect']))
                {
                        $db_cache = array_merge($_SESSION['debug_redirect'], $db_cache);
                        $db_count = count($db_cache) + 1;
                        $_SESSION['debug_redirect'] = array();
                }

                $db_cache[$db_count]['q'] = $db_string;
                $db_cache[$db_count]['f'] = $file;
                $db_cache[$db_count]['l'] = $line;
                $st = microtime();
        }

        // First, we clean strings out of the query, reduce whitespace, lowercase, and trim - so we can check it over.
        if (empty($modSettings['disableQueryCheck']))
        {
                $clean = '';
                $old_pos = 0;
                $pos = -1;
                while (true)
                {
                        $pos = strpos($db_string, '\'', $pos + 1);
                        if ($pos === false)
                                break;
                        $clean .= substr($db_string, $old_pos, $pos - $old_pos);

                        while (true)
                        {
                                $pos1 = strpos($db_string, '\'', $pos + 1);
                                $pos2 = strpos($db_string, '\\', $pos + 1);
                                if ($pos1 === false)
                                        break;
                                elseif ($pos2 == false || $pos2 > $pos1)
                                {
                                        $pos = $pos1;
                                        break;
                                }

                                $pos = $pos2 + 1;
                        }
                        $clean .= '%s';

                        $old_pos = $pos + 1;
                }
                $clean .= substr($db_string, $old_pos);
                $clean = trim(strtolower(preg_replace(array('~\s+~s', '~/\*!40001 SQL_NO_CACHE \*/~', '~/\*!40000 USE INDEX \([A-Za-z\_]+?\) \*/~'), array(' ', '', ''), $clean)));

                // We don't use UNION in SMF, at least so far.  But it's useful for injections.
                if (strpos($clean, 'union') !== false && preg_match('~(^|[^a-z])union($|[^[a-z])~s', $clean) != 0)
                        $fail = true;
                // Comments?  We don't use comments in our queries, we leave 'em outside!
                elseif (strpos($clean, '/*') > 2 || strpos($clean, '--') !== false || strpos($clean, ';') !== false)
                        $fail = true;
                // Trying to change passwords, slow us down, or something?
                elseif (strpos($clean, 'set password') !== false && preg_match('~(^|[^a-z])set password($|[^[a-z])~s', $clean) != 0)
                        $fail = true;
                elseif (strpos($clean, 'benchmark') !== false && preg_match('~(^|[^a-z])benchmark($|[^[a-z])~s', $clean) != 0)
                        $fail = true;
                // Sub selects?  We don't use those either.
                elseif (preg_match('~\([^)]*?select~s', $clean) != 0)
                        $fail = true;

                if (!empty($fail))
                {
                        log_error('Hacking attempt...' . "\n" . $db_string, $file, $line);
                        fatal_error('Hacking attempt...', false);
                }
        }

        $ret = mysql_query($db_string, $db_connection);
        if ($ret === false && $file !== false)
                $ret = db_error($db_string, $file, $line);

        // Debugging.
        if (isset($db_show_debug) && $db_show_debug === true)
                $db_cache[$db_count]['t'] = array_sum(explode(' ', microtime())) - array_sum(explode(' ', $st));

        return $ret;
}


Termin@L 03.01.2007 22:55

Код:

if(!ereg("[А-Яа-яa-zA-Z0-9]{1,8}",$_POST['post'])){echo "Error";exit;}
примерно так

je0n 03.01.2007 22:56

2Гема
и что это?
Эта функция очень далека от того, что надо мне?

je0n 03.01.2007 22:58

Цитата:

if(!ereg("[А-Яа-яa-zA-Z0-9]{1,8}",$_POST['post'])){echo "Error";exit;}
а точка, запятая, дефис,ничжнее подчеркивание (ну и все нормальные символы, включены сюда?

Termin@L 03.01.2007 23:01

Нет тут, только - точка, запятая, кавычка, всё остальное добавляешь в квадратные скобки подряд, только дефис нужно обязательно в конец.
P.s. пробел тоже надо вставлять
сори не ту строку те кинул вот -
if(!ereg("[А-Яа-яa-zA-Z0-9',.; -]{1,8}",$_POST['post'])){echo "Error";exit;}

DIAgen 03.01.2007 23:04

Цитата:

Сообщение от je0n
а точка, запятая, дефис,ничжнее подчеркивание (ну и все нормальные символы, включены сюда?

Зачем изобретать велосипед, возми DLE 5.2 там все хорошо сделано с точки безопасносит и грамотно написано

je0n 03.01.2007 23:08

2Termin@L
Спасибо братик. А как юзать ereg_replace, чтобы заменить все опасные символы на "". Типа так:
Код:

if(!ereg("[А-Яа-яa-zA-Z0-9]{1,8}",$value))
{
  $value=ereg_replace("[А-Яа-яa-zA-Z0-9]{1,8}","",$value)
}

или нет?

Что-то вот так, не заменяется символы в строке
Код:

function filter(&$value)
{
  $b=FALSE;
  if(!ereg('[А-Яа-яa-zA-Z0-9,._"-]{1,8}',$value))
  {
    $value=ereg_replace('[А-Яа-яa-zA-Z0-9,._"-]{1,8}','',$value);
    $b=TRUE;
  }
  return $b;
}


blackybr 03.01.2007 23:21

Зако писал антихак систему ) в принципе чуток доработать под сеья и норм

je0n 04.01.2007 02:16

Короче вот что получилось. Прошу сказать, возможен ли обход, если да, то что надо поправить, чтобы все было пучком?
Код:

function filter(&$value)
{
  $b=FALSE;
  if(ereg("([;/'<>])|(union)",$value))
  {
    $value=ereg_replace("([;/'<>])|(union)","",$value);
    $b=TRUE;
  }
  return $b;
}


nerezus 04.01.2007 12:40

Читаю ваши куски и думаю: то ли я совасем дурак, то ли вы:
не легче ли просто нормально добавлять запись в базу? И ВСЕ!

Нахер вырезать из запроса какие-то символы? Нахер проверять запрос?
СУБД - она на то и СУБД, что может принять все данные, причем делать это правильно.

Наша задача - просто правильно их ей передать.

_Great_ 04.01.2007 12:47

Да, обход возможен. Возможна sql-inj в целочисленном параметре скрипта, где не требуется кавычка для выхода за пределы значения в запрос.

Slon 04.01.2007 12:58

Имхо самая простая защита от sql это
PHP код:

settype($id,integer); 

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

От XSS думаю htmlspecialchars(); спасет, хотя иногда лучьше ereg()

p-range 04.01.2007 14:34

Код:

<?php
$val = (int)$_GET['val'];
$val = mysql_escape_string($val);
$q = mysql_query("SELECT id,name,etc FROM table WHERE val = '$val'");
if (!$q)
{
        echo '<br>Неверное значение переменной $val';
}
        else
{
while ($a = mysql_fetch_array($q))
{
        $id = $a['id'];
        $name = $a['name'];
        $etc = $a['etc'];
        $name = htmlspecialchars($name);
        $etc = htmlspecialchars($etc);
        // вывод результата
}
}
?>

Вроде все понятно.

je0n 04.01.2007 17:20

Цитата:

Вроде все понятно.
Ага понятно... Понятно, что я гнал пытаюсь защититься от XSS и SQL-enj в одной функции ;)

nerezus 04.01.2007 17:58

Цитата:

Ага понятно... Понятно, что я гнал пытаюсь защититься от XSS и SQL-enj в одной функции
Ты просто не понимаешь, как работает БД ;)

GHostly_FOX 05.01.2007 07:00

Вот мой способ предотвратить какие либо попытки SQL injection или XSS

PHP код:

function var_chek($var,$col){
    
$var    =    substr($var0$col);
    
$var    =    preg_replace("/[^\w\x7F-\xFF\s]/"" "$var);
    
$good    =    ereg_replace(" +"" "$var);
    
$good    =    strip_tags($good);
    return 
$good;
}
$var=var_chek($_GET['var'],4); 

Если значение $var это просто передаваемый индекс для выборки из базы то достаточно его обрезать до 4-х символов, в 4 символа точно ничего не впишешь...
А если идет запись данных в базу то вот пример работы скрипта:

PHP код:

/*В переменную VAR передадим код ну к примеру 
такой - "><script>alert()</script>*/
$var=$_GET['var'];
mysql_query("INSERT INTO base SET text='".var_chek($var)."'");
/*И в базу уйдут такие данные -  script alert script , И
даже если будете передавать SQL инжекцию то 
данные будут записаны в базу просто как такст!*/ 


nerezus 05.01.2007 19:18

Ну вы и норкоманы.... определенно начитались Фленова =)
Я подобное Г только у него в книге видел =)

Нормальный код(практически) в этой теме только у p-range. Остальные просто не понимают, что делают.

nerezus 05.01.2007 20:04

Вооооот: http://forum.antichat.ru/thread30641.html

Chaak 26.10.2008 19:26

Цитата:

Сообщение от b3
Нужно указывать ТИП переменной а не фильтровать её, как понял я. Хотя в РНР я не силен.
Вот еще способ :
Код:

//Режем слеши
 $text = stripslashes($text);
//Режем хтмл
 $text = htmlspecialchars($text);
//Убираем символ новой строки
 $text = ereg_replace("\n", " ", $text);
//Убираем символ новой строки (windows-формат)
 $text = ereg_replace("\r", "", $text);
//Убираем символы открывающие любые тэги
 $text = ereg_replace("<", "", $text);
 $text = ereg_replace(">", "", $text);
//Убираем символы похожие на сепаратор =)
 $text = ereg_replace("::", "", $text);


Твой ерег оборвется на null - байте =\
Лучше уж прегматч использовать

.Slip 26.10.2008 23:14

PHP код:

$blabla is_numeric($_REQUEST['blabla']) ? $_REQUEST['blabla'] : mysql_escape_string($_REQUEST['blabla']); 

Неужели ещё что то нужно?

EXSlim 26.10.2008 23:38

Цитата:

Сообщение от .Slip
PHP код:

$blabla is_numeric($_REQUEST['blabla']) ? $_REQUEST['blabla'] : mysql_escape_string($_REQUEST['blabla']); 

Неужели ещё что то нужно?

Определенно да. is_numeric проверяет принадлежность числовому диапазону, включая флоаты. Тоисть попади переменная вторым аргументом в mysql_array, получим раскрытие пути

Кстати, mysql_escape_string, как и все ф-ции mysql_* юзают апи mysql сервера, тоисть требуют аккаунт и подключение к субд. Вместо этого нашел офигенную штуку в zf
PHP код:

protected function _quote($value)
    {
        if (
is_int($value)) {
            return 
$value;
        } elseif (
is_float($value)) {
            return 
sprintf('%F'$value);
        }
        return 
"'" addcslashes($value"\000\n\r\\'\"\032") . "'";
    } 

З. Ы. Гуглите о prepared statement. Все уже придумано до вас

.Slip 26.10.2008 23:50

Цитата:

Сообщение от EXSlim
Определенно да. is_numeric проверяет принадлежность числовому диапазону, включая флоаты. Тоисть попади переменная вторым аргументом в mysql_array, получим раскрытие пути

Цитата:

Сообщение от http://php.su/functions/?mysql_fetch_array
Второй опциональный аргумент result_type в функции mysql_fetch_array() -- константа и может принимать следующие значения: MYSQL_ASSOC, MYSQL_NUM и MYSQL_BOTH. Эта возможность добавлена в PHP 3.0.7. Значением по умолчанию является: MYSQL_BOTH.

Используя MYSQL_BOTH, вы получите массив, состоящий как из ассоциативных индексов, так и из численных. MYSQL_ASSOC вернёт только ассоциативные соответствия (аналогично функции mysql_fetch_assoc() и MYSQL_NUM только численные (аналогично функции mysql_fetch_row()).

Какой возвращать массив - это уже решает программист. Не думаю что пользователю будет предложено сделать выбор в запросах gpc.

Цитата:

Сообщение от EXSlim
Кстати, mysql_escape_string, как и все ф-ции mysql_* юзают апи mysql сервера, тоисть требуют аккаунт и подключение к субд.

Вот это вообще не понял. Это равносильно: "Что бы поехать на велосипеде, нужны ноги. Но мы сделаем по другому."

EXSlim 27.10.2008 00:00

Цитата:

Сообщение от .Slip
Какой возвращать массив - это уже решает программист. Не думаю что пользователю будет предложено сделать выбор в запросах gpc.

тьфу. имел ввиду mysql_result


Цитата:

Вот это вообще не понял.
Дело в производительности. Представь себе кой нибудь средний нагруженый проект ~50 запросов в секунду. Кроме самого запроса на выборку/апдейт/удалейние и т.д. скрипт ещё 50 раз дергнет mysql чтоб он заэскейпил твою переменню. И это только за 1 запрос

nerezus 27.10.2008 00:04

Цитата:

скрипт ещё 50 раз дергнет mysql чтоб он заэскейпил твою переменню
Что?)

NOmeR1 27.10.2008 00:06

мдээ...
Читайте статью от нерезуса. И не нужны какие-нибудь сверх способы устранения всех уязвимостей сразу.

.Slip 27.10.2008 00:17

>> Представь себе кой нибудь средний нагруженый проект ~50 запросов в секунду. Кроме самого запроса на выборку/апдейт/удалейние и т.д. скрипт ещё 50 раз дергнет mysql чтоб он заэскейпил твою переменню. И это только за 1 запрос

Переменная обработалась один раз в начале скрипта. Хоть запросов будет миллион, какая разница?

>> тьфу. имел ввиду mysql_result

Да тоже самое по сути. Тут идёт речь о защите от скуль инъекций, и о том в каком виде надо давать данные на запрос. Про аргументы функций тут речь не идёт.

EXSlim 27.10.2008 00:25

Цитата:

Сообщение от nerezus
Что?)

Чего непонятно написано?

Правда заметил что речь идет о не mysql_real_* ф-ции, которая действительно не требует подключения к бд, к тому же устарела еще с 4й версии + и будет генерировать нотис при ее исползовании в следующем релизе пхп

Цитата:

мдээ... Читайте статью от нерезуса. И не нужны какие-нибудь сверх способы устранения всех уязвимостей сразу.
мдэ попрубуй поддерживать нагруженый проект с такой фигней в коде. Эти способы придумал не я, а контора которая придумала пхп. Ещё есть вопросы?

Цитата:

Переменная обработалась один раз в начале скрипта. Хоть запросов будет миллион, какая разница?
50 запросов к веб-серверу

Цитата:

Да тоже самое по сути. Тут идёт речь о защите от скуль инъекций, и о том в каком виде надо давать данные на запрос. Про аргументы функций тут речь не идёт.
Здесь согласен, но я просто прокомментировал о небезопасности кода, который ты написал

Doom123 27.10.2008 00:26

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

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);
    }
}
?>


NOmeR1 27.10.2008 00:31

EXSlim, я про так называемый "скрипт" от b3
Всё, что нужно знать ТС написано нерезусом:
Цитата:

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


EXSlim 27.10.2008 00:34

Цитата:

Сообщение от 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:38

Цитата:

Сообщение от NOmeR1
EXSlim, я про так называемый "скрипт" от b3
Всё, что нужно знать ТС написано нерезусом:

я же кажется ясно написал о mysql_real_escape_string, что это за дрянь и почему ее желательно не юзать. Повторяю. Метод, что я написал несколькими комментами выше придумал не я, а zend. Ему пофиг числовое это поле(не эскейпится) или строковое(эскейпится). Он не дергает субд каждый раз и не требует подключения к ней

Doom123 27.10.2008 00:42

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

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

EXSlim 27.10.2008 00:46

Цитата:

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

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

да причем здесь эти символы.
Цитата:

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

lisa99 27.10.2008 00:52

Цитата:

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

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

NOmeR1 27.10.2008 00:58

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

EXSlim 27.10.2008 01:08

Цитата:

Сообщение от 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() именно с применением этих символов? или иначе..
а я и не писал что она обходится. я написал что это забивание гвоздей яйцами


Время: 11:06