ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

27.10.2008, 00:25
|
|
Познающий
Регистрация: 09.10.2006
Сообщений: 92
Провел на форуме: 347686
Репутация:
87
|
|
Сообщение от nerezus
Что?)
Чего непонятно написано?
Правда заметил что речь идет о не mysql_ real_* ф-ции, которая действительно не требует подключения к бд, к тому же устарела еще с 4й версии + и будет генерировать нотис при ее исползовании в следующем релизе пхп
мдээ... Читайте статью от нерезуса. И не нужны какие-нибудь сверх способы устранения всех уязвимостей сразу.
мдэ попрубуй поддерживать нагруженый проект с такой фигней в коде. Эти способы придумал не я, а контора которая придумала пхп. Ещё есть вопросы?
Переменная обработалась один раз в начале скрипта. Хоть запросов будет миллион, какая разница?
50 запросов к веб-серверу
Да тоже самое по сути. Тут идёт речь о защите от скуль инъекций, и о том в каком виде надо давать данные на запрос. Про аргументы функций тут речь не идёт.
Здесь согласен, но я просто прокомментировал о небезопасности кода, который ты написал
Последний раз редактировалось EXSlim; 27.10.2008 в 00:27..
|
|
|

27.10.2008, 00:26
|
|
Постоянный
Регистрация: 11.11.2006
Сообщений: 834
Провел на форуме: 3941248
Репутация:
668
|
|
хотите защиту он от скуль ????
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..
|
|
|

27.10.2008, 00:31
|
|
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,188
Провел на форуме: 6023777
Репутация:
2642
|
|
EXSlim, я про так называемый "скрипт" от b3
Всё, что нужно знать ТС написано нерезусом:
Сообщение от nerezus
1) Если поле в базе числовое, то: (int) (ну или intval()). Можно по модулю взять при использовании в LIMIT, но это не секурити-дырка.
2) Если текстовое, то просто mysql_real_escape_string()
3) Всякие magic quotes и подобные затычки отключены. Кто не отключил - ССЗБ(что это означает - смотрите на LOR'е)
И ВСЕ! Больше ничего не надо. Ибо запрос испортить левыми данными нельзя.
|
|
|

27.10.2008, 00:34
|
|
Познающий
Регистрация: 09.10.2006
Сообщений: 92
Провел на форуме: 347686
Репутация:
87
|
|
Сообщение от 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..
|
|
|

27.10.2008, 00:38
|
|
Познающий
Регистрация: 09.10.2006
Сообщений: 92
Провел на форуме: 347686
Репутация:
87
|
|
Сообщение от NOmeR1
EXSlim, я про так называемый "скрипт" от b3
Всё, что нужно знать ТС написано нерезусом:
я же кажется ясно написал о mysql_real_escape_string, что это за дрянь и почему ее желательно не юзать. Повторяю. Метод, что я написал несколькими комментами выше придумал не я, а zend. Ему пофиг числовое это поле(не эскейпится) или строковое(эскейпится). Он не дергает субд каждый раз и не требует подключения к ней
Последний раз редактировалось EXSlim; 27.10.2008 в 00:45..
|
|
|

27.10.2008, 00:42
|
|
Постоянный
Регистрация: 11.11.2006
Сообщений: 834
Провел на форуме: 3941248
Репутация:
668
|
|
Замечание: mysql_real_escape_string() не экранирует символы % и _. Эти знаки являются масками групп символов в операторах MySQL LIKE, GRANT или REVOKE.
Поэтому нада уметь иногда включать мозг ... да и ваще скоко не писал никогда не использовал эти операторы =) да и темболее с подстовлением данных от пользователя ...
|
|
|

27.10.2008, 00:46
|
|
Познающий
Регистрация: 09.10.2006
Сообщений: 92
Провел на форуме: 347686
Репутация:
87
|
|
Сообщение от Doom123
Замечание: mysql_real_escape_string() не экранирует символы % и _. Эти знаки являются масками групп символов в операторах MySQL LIKE, GRANT или REVOKE.
Поэтому нада уметь иногда включать мозг ... да и ваще скоко не писал никогда не использовал эти операторы =) да и темболее с подстовлением данных от пользователя ...
да причем здесь эти символы.
Замечание: Функцию mysql_real_escape_string() можно использовать только после того, как установлено соединение с MySQL. В противном случае возникнет ошибка уровня E_WARNING, а функция возвратит FALSE. Если link_identifier не указан, используется последнее открытое соединение.
|
|
|

27.10.2008, 00:52
|
|
Постоянный
Регистрация: 15.07.2008
Сообщений: 444
Провел на форуме: 1417964
Репутация:
665
|
|
Сообщение от Doom123
Замечание: mysql_real_escape_string() не экранирует символы % и _. Эти знаки являются масками групп символов в операторах MySQL LIKE, GRANT или REVOKE.
.
а можно привести пример уязвимости, где обходится
функция mysql_real_escape_string() именно с применением этих символов? или иначе..
|
|
|

27.10.2008, 00:58
|
|
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,188
Провел на форуме: 6023777
Репутация:
2642
|
|
А нельзя ли действовать по принципу KISS [http://ru.wikipedia.org/wiki/Принцип_KISS]?
Каждый метод защиты для каждого случая разный. Если напрягает дополнительная нагрузка на базу - юзайте mysql_escape_string()
EXSlim, твой метод бредовый, так как он проверяет не сами данные, а их тип, а затем делает ненужную фильтрацию.
|
|
|

27.10.2008, 01:08
|
|
Познающий
Регистрация: 09.10.2006
Сообщений: 92
Провел на форуме: 347686
Репутация:
87
|
|
Сообщение от 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)
|
|
|
|