PDA

Просмотр полной версии : Защита от SQL-enjection


je0n
03.01.2007, 22:01
Короче нужна такая функция, которай я передаю переменную, а она ее обрабатывает и делает безопасной от 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
а точка, запятая, дефис,ничжнее подчеркивание (ну и все нормальные символы, включены сюда?
Зачем изобретать велосипед, возми 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 это 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


function var_chek($var,$col){
$var = substr($var, 0, $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 символа точно ничего не впишешь...
А если идет запись данных в базу то вот пример работы скрипта:


/*В переменную 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
Нужно указывать ТИП переменной а не фильтровать её, как понял я. Хотя в РНР я не силен.
Вот еще способ :

//Режем слеши
$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
$blabla = is_numeric($_REQUEST['blabla']) ? $_REQUEST['blabla'] : mysql_escape_string($_REQUEST['blabla']);
Неужели ещё что то нужно?

EXSlim
26.10.2008, 23:38
$blabla = is_numeric($_REQUEST['blabla']) ? $_REQUEST['blabla'] : mysql_escape_string($_REQUEST['blabla']);
Неужели ещё что то нужно?

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

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

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
Определенно да. is_numeric проверяет принадлежность числовому диапазону, включая флоаты. Тоисть попади переменная вторым аргументом в mysql_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.

Кстати, mysql_escape_string, как и все ф-ции mysql_* юзают апи mysql сервера, тоисть требуют аккаунт и подключение к субд.
Вот это вообще не понял. Это равносильно: "Что бы поехать на велосипеде, нужны ноги. Но мы сделаем по другому."

EXSlim
27.10.2008, 00:00
Какой возвращать массив - это уже решает программист. Не думаю что пользователю будет предложено сделать выбор в запросах 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
Что?)
Чего непонятно написано?

Правда заметил что речь идет о не 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
// Функция экранирования переменных
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

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

EXSlim
27.10.2008, 00:34
хотите защиту он от скуль ????

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

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

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

lisa99
27.10.2008, 00:52
Замечание: 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
А нельзя ли действовать по принципу 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() именно с применением этих символов? или иначе..
а я и не писал что она обходится. я написал что это забивание гвоздей яйцами

nerezus
27.10.2008, 02:00
попрубуй поддерживать нагруженый проект с такой фигней в коде nnm покатит? там ведь чисто plain процедурный подход.

и почему ее желательно не юзать И почему же?
Я что-то не понял, или кто-то действительно написал, что оно дергает СУБД?
Она работает на клиенте. А требует просто наличие соединения, чтобы знать кодировку.

А нельзя ли действовать по принципу KISS Так и делают.
Только в некоторых случаях под него даже orm попадает.

EXSlim
27.10.2008, 11:22
Принцип KISS. Так и делают.
Только в некоторых случаях под него даже orm попадает.
Насчет kiss посмотри исходники propel или doctrine все ли там понятно. orm не то место где нужно строго придерживаться kiss(если, конечно ты не пишеш свою orm). Подключил и забыл, тебе предоставили только апи, а как оно там работает - забота разработчика orm. Кстати, в zf ниразу нет orm


nnm покатит? там ведь чисто plain процедурный подход.

итак, ты поддерживаеш nnm. plain подход? хорошо.
Знаеш поддержка это не только следить чтоб ничего не упало, это еще и добавление новых фичей, туда же рефакторинг и т.д. Удобно смотреть на спагетти в коде? А еще есть DRY. Он ведь рядом с KISS стоит.

зы. я не удивлюсь если ннм работает на одном сервере(не настолько он нагружен) там больше на статику нагрузка, а nginx ее раздаст и даже не моргнет

heks
27.10.2008, 12:36
http://www.a-store.ru/catalogue/?cat='+union+select+1,2,3/*
почему результат не выводит при написании команд version() и других

nerezus
27.10.2008, 12:39
если, конечно ты не пишеш свою orm Пишу) Точнее надо оформить в норм вид - phpdoc добавить)

итак, ты поддерживаеш nnm. Мой знакомый писал ее движок. Год уже он не учавствует в проекте.
Я привел это только как подтверждение, что и так можно делать крупнейшие сайты.

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

Кстати, в zf ниразу нет orm Zend_Db хватает для полной абстракции. ORM свой. На Zend_Db основан.

EXSlim
27.10.2008, 14:34
Мой знакомый писал ее движок. Год уже он не учавствует в проекте.Трин? Куда пропал?


Zend_Db хватает для полной абстракции. ORM свой. На Zend_Db основан.Zend_Db штука универсальная и переносимая, но это не более чем фабрика. А вот Zend_Db_* предоставляет полноценный ActiveRecord, кажется лучший что я видел среди всем пхп фрейморков(имхо). Зачем тебе orm? Zend_Db_* много чего умеет

По топику.
http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Db/Adapter/Abstract.php on line ~745Метод _quote используется как дефолтный эскейпер для всех бэкендов бд. Вот чем я советовал заменить mysql_real_escape_string

nerezus
27.10.2008, 16:49
Трин? Куда пропал? Трин. Неважно)

Зачем тебе orm? Zend_Db_* много чего умеет Для простоты использования ;)

Doom123
27.10.2008, 19:59
да причем здесь эти символы.

Оо мм а я не знал что если не поключатся к mysql можно произвести sql иньекцию =\\


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

Pashkela
27.10.2008, 21:02
http://www.a-store.ru/catalogue/?cat='+union+select+1,2,3/*
почему результат не выводит при написании команд version() и других

http://www.a-store.ru/catalogue/?cat='+union+select+1,2,unhex(hex(version()))/*

только тема немного не та