Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Устойчивость формы к "хулиганам" и хакерам, Проверка данных (текста) на безопасность 
:(
    Опции темы
webevt
Дата 5.7.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 5.5.2005

Репутация: нет
Всего: 3



Цитата

Не нужно юзать устаревние mysql_*

nerezus, я что-то пропустил? Эти функции уже устарели? А какие новые?

P.S. Не сарказм, действительно интересно..
PM MAIL   Вверх
ksnk
Дата 5.7.2009, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



webevt, Библиотек, которые "за тебя" сделают mysql_real_escape_string дофига. Я пользуюсь библиотекой DbSimple от Котерова и очень доволен, тут тебе и трассировка запросов и подсчет времени исполнения... Однако, когда мне приспичило сделать 6000 запросов в цикле, и я начал профилировать получившийся тормозной кисель, выяснилось, что на полезности и вкусности в таких фреймворках тратится довольно много рессурсов. Когда я честно преписал "циклический" запрос на "чистый" mysql_query, для 6000 запросов в цикле результат меня просто поразил...

Это я про то, что DB-обертки, конечно, очень помогают жить, но нужно понимать, что в некоторых случаях, их магия может мешать...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
nerezus
Дата 5.7.2009, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Как бы есть mysqli и pdo, которые 
1) Безопасность. Можно не бояться забыть заэскейпить данные.
2) Можно использовать все возможности мускула типа курсоров.
3) ООП.
4) Через них работают Zend_Db и т.д.

Добавлено через 1 минуту и 23 секунды
Цитата

Однако, когда мне приспичило сделать 6000 запросов в цикле, и я начал профилировать получившийся тормозной кисель, выяснилось, что на полезности и вкусности в таких фреймворках тратится довольно много рессурсов. 
 Странные выводы делаешь o_O
Вместо уменьшения числа запросов до десятка ты решил убить удобство. Не понимаю такого.

Добавлено через 2 минуты и 51 секунду
ksnk, эм, ты говоришь про обертки, а я - про mysqli и pdo.
Так вот, на каких это основаниях они должны быть медленнее?

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


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
linuxoid
Дата 5.7.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



нашел интересную информацию:

Цитата
В языке PHP есть специальная функция, экранирующая текст перед вставкой в MySQL-запрос, она называется mysql_real_escape_string. Используемые иногда вместо нее mysql_escape_string, addslashes и (да, да, встречаются и такие странные люди) htmlspecialchars либо неэффективны (см. мануал на www.php.net), либо предназначены для другого (как последняя).


Т.е. получается так, как я написал выше - делать ненадо... т.е. надо просто сделать trim() и mysql_real_escape_string или mysqli_escape_string() перед вставкой, а при выводе данных, если нужно, делать htmlspecialchars() ?
PM MAIL   Вверх
ksnk
Дата 5.7.2009, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(nerezus @  5.7.2009,  12:17 Найти цитируемый пост)
Вместо уменьшения числа запросов до десятка ты решил убить удобство. Не понимаю такого.
 Это просто пример, когда полезная и удобная в нормальной жизни оберка может мешать.
А в том случае была вставка в таблицу с множеством полей записей с небольшим количеством разных полей, тоесть навскидку сократить количество запросов объединением не получалось.

nerezus, в mysqli автоматический escaping параметров достигается комбинацией prepare-bind-execute? В таком случае, у Котерова несколько удобнее сделано "приведение типов". Тип параметра (квотить+ескейпить/неквотить), указывается в самом теле запроса, и сам запрос с параметрами - одна функция, а не размазан по 2-м строчкам.
Код

$stmt = mysqli_prepare($link, "INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'sssd', $code, $language, $official, $percent);
mysqli_stmt_execute($stmt);

и 
Код

$stmt = $dbSimple->query("INSERT INTO  CountryLanguage VALUES (?,?,?,?d)",
                                           $code, $language, $official, $percent);

Ну, конечно, да. Mysqli, который требует отдельной установки своего расширения вряд ли будет сильнее тормозить, чем чистый mysql. Да и PDO, который начинается с 5-го PHP, тоже тормозить, по идее, не должен...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
nerezus
Дата 5.7.2009, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Цитата

А в том случае была вставка в таблицу с множеством полей записей с небольшим количеством разных полей, тоесть навскидку сократить количество запросов объединением не получалось.
 Спорим на деньги?)
А все потому, что ты использовал обертку к устаревшей библиотеке.
1) pdo поддерживает multiply statements. mysql не поддерживает.
2) LOAD DATA INFILE для особо крупных вставок.
3) Отсутствие смысла делать кучу инсертов многократно.


Цитата

nerezus, в mysqli автоматический escaping параметров достигается комбинацией prepare-bind-execute? В таком случае, у Котерова несколько удобнее сделано "приведение типов". Тип параметра (квотить+ескейпить/неквотить), указывается в самом теле запроса, и сам запрос с параметрами - одна функция, а не размазан по 2-м строчкам.
 Можно сделать обертку через наследование и ~6 строк на php для аналогичной процедуры. Но нет смысла.




--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
ksnk
Дата 5.7.2009, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



nerezus, Можно и поспорить ;-) Я посажу тебя на свой хост с php4 и mysql3, и посмотрим как будут вставляться туда PDO'шные классы... 

А схему вставки я переделал через неделю после разборок с SimpleDb. Просто тупо вклеивал недостающие поля в массив, после чего получился один (~10 кил) запрос на вставку...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
nerezus
Дата 5.7.2009, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Цитата

Я посажу тебя на свой хост с php4 и mysql3, и посмотрим как будут вставляться туда PDO'шные классы... 
 А почему сразу не на pure html 1.0?

php4 умер более чем 2 года назад, а юзающие его - некрофилы.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
morfus
Дата 5.7.2009, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 30.6.2007

Репутация: 1
Всего: 2



Цитата(ksnk @  5.7.2009,  18:21 Найти цитируемый пост)
Я посажу тебя на свой хост с php4 и mysql3

И ты уверен что он на него сядет ?
PM MAIL WWW   Вверх
linuxoid
Дата 5.7.2009, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



Ребята побазарьте в сторонке... жесткий офтоп пошел... :/
PM MAIL   Вверх
Ипатьев
Дата 5.7.2009, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



linuxoid, так какая база данных у тебя? postgres или mysql?
PM MAIL   Вверх
linuxoid
Дата 5.7.2009, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



У меня постгрес. Исходя из того, что я здесь прочел и нашел полезного в интернет, вывод сделал такой:

Код

    // tolko trim (na vhod massiv ili text). Eto samij ljogkij filjtr. Malenkaja podgotovka texta, kotorij ewe nuzen gde-to pered vstavkoj v bazu.
    function prepareData($data)
    {
        if(is_array($data))
        {
            foreach($data as $key => $val)
            {
                if(!is_array($val))
                {
                    $data[$key] = trim($val);
                }
                else
                {
                    $val = $this->prepareData($val);
                    $data[$key] = $val;
                }
            }
        }
        else
        {
            $data = trim($data);
        }
      return $data;
    }

    // magic quotes_gpc proverka dlja php >= 6
    if(version_compare(phpversion(), '6', '>=')) 
    {
        function get_magic_quotes_gpc()
        {
            return false;
        }
    }        

    // trim + podgotovka k vstavke v bazu
    function prepareText($text) 
    {           
        $text = trim($text);
        $text = get_magic_quotes_gpc() ? stripslashes($text) : $text;
        $text = pg_escape_string($text);
      return $text;
    }    
    
    // gotovim text dlja vivoda
    function prepareOutput($text = '')
    {        
        $text = stripslashes($text);
        $text = trim($text);        
        $text = htmlspecialchars($text);
      return $text;
    }



Что думаете по этому поводу?
PM MAIL   Вверх
nerezus
Дата 5.7.2009, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Цитата(linuxoid @  5.7.2009,  23:12 Найти цитируемый пост)
Что думаете по этому поводу?



magic_quotes специально, блин, отключили, чтобы их не проверять - так нет же, свою функцию пишут.
Правильно работать с ней так: предположить ее значение как false.

Если по какой-то причине она true, то выключается через настройку в панели хостинга. Либо через .htaccess.
Но уже стоит подумать о таком хостинге плохо при этом.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Ипатьев
Дата 5.7.2009, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



По-моему, в интернете ты нашел кучу бесполезного.
function prepareData работать не будет в таком виде.
почему у тебя stripslashes выполняется два раза, а trim - даже три? одного разве не достаточно?

PM MAIL   Вверх
linuxoid
Дата 5.7.2009, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



Потому что я не использую сразу все ф-ии из тех, что я написал.  Каждая используется в соотв-х обстоятельствах.. stripslashes, по идее вообще не нужно делать, когда берем данные из базы...

В общем если бы я сейчас получил из формы текст, который нужно вставить в базу, то я бы его пропустил через prepareText(). Т.е. делаем трим и эскейп 
А если нужно было бы его вызвать из базы и показать на экране, то воспользовался бы этой ф-ей...

Код

// gotovim text dlja vivoda
    function prepareOutput($text = '')
    {            
        $text = htmlspecialchars($text);
      return $text;
    } 


PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0866 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.