![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
gcc |
|
||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
не работает, пробовал по разному:
в других классах примерно так формируется:
кстате никто не видел идеальный поисковик? на cpan много модулей, может быть там есть, найти сложновато Это сообщение отредактировал(а) gcc - 4.1.2009, 16:33 |
||||
|
|||||
tolkien |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 5.4.2008 Репутация: 4 Всего: 4 |
Офф топ! Что значит 'экранировать' ? Это что то вроде сделать интерфейс для удобного вызова? |
|||
|
||||
gcc |
|
||||||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
не экранировать, но если поставить так
не работает... сделал так:
Добавлено @ 20:20
да, именно для удобства и экономии кода (если что-то захочется изменить, то чтобы не переписывать несколько раз одно и тоже) Это сообщение отредактировал(а) gcc - 5.1.2009, 12:31 |
||||||||
|
|||||||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Добавлено через 1 минуту и 16 секунд но лучше продумать код... $self->{SQL}->{LIKE} вдруг с ошибкой будет... ;) |
|||
|
||||
Шуранов |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 10.3.2007 Где: Харьков Репутация: 1 Всего: 1 |
А, сделать так:
вроде оно? ![]() |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
и так
![]() gcc, что скажите? |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
я пометил что решил давно пользуюсь случаем: если не использовать prepare, а экранирвоать qq() и использовать через do selectall_* selectrow_* инъекции не будет? qq() эскепит кавычки от инъекции? Это сообщение отредактировал(а) gcc - 9.1.2009, 16:57 |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
gcc, а зачем спрашивать
![]() Так даже бывает интереснее, попытаться самому проверить. |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Шуранов, боюсь, предложенный Вами вариант будет работать только в случае, если сервер не поддерживает placeholders (когда подстановка значений происходит в модуле DBI), иначе запрос не пройдет синтаксический контроль.
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
ginnie, я все время использую так через prepare и $sth->execute('bind')
DBI, DBD::MySQl должны стоять всегда, (или в чем проблема эти модули поставить... ?) Добавлено через 8 минут и 17 секунд nitr, я нашел:
http://www.easysoft.com/developer/language...ial_part_2.html тогда значит qq() не достаточно проверить на 100 я не смогу потомучто регулярные выражения perl не полностью знаю... Это сообщение отредактировал(а) gcc - 11.1.2009, 20:31 |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
ginnie, А как тогда использовать по другому через quote()?
|
|||
|
||||
nitr |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
gcc, верно начинаете думать...
можно открыть кукбук, там про экранирование строк есть (где про БД), и как раз ваш вопрос с qq{} есть ;). Добавлено через 1 минуту и 10 секунд ginnie, ваш ответ я не понял, т.е. вы меня запутали ![]() Добавлено через 9 минут и 16 секунд gcc, в вашем модуле можно продумать метод, сразу извиняюсь за название, надеюсь придумает, а я передам идею ;). будем считать у вас свой dbh возвращается $self->{dbh}, или подобие такой функции (она только подобие ![]()
Вот наш метод (тоже не совершенство):
|
||||
|
|||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
nitr, приношу извинения за сумбурное изложение мыслей
![]() СУБД может поддерживать prepared statements, а может не поддерживать (для MySQL см. Prepared statement support (server side prepare)). Если СУБД их поддерживает, то запросы с placeholders проходят синтаксический контроль на стороне сервера и вариант
его не пройдет. Если сервер не поддерживает prepared statements, то подстановка значений осуществляется модулем DBI (без синтаксического контроля), при этом указанный вариант может сработать (не проверял). -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
ginnie, не много не понял, если не будет включено mysql_server_prepare=1, то экранироватся через execute() не будет?
у меня везде MySQL 5.0, а как точно проверить работает ли синтаксический контроль? Это сообщение отредактировал(а) gcc - 12.1.2009, 18:36 |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
gcc, экранироваться будет в любом случае. Не всегда будет работать prepared statement (используется для ускорения выполнения запросов).
Добавлено @ 18:56 По поводу проверки, попробуйте включить trace в DBI и выполнить запрос с placeholder'ами, посмотрите что передается в СУБД. Кроме того, попробуйте указанный выше вариант (замените названия таблицы и поля на свои)
и приведите здесь сообщение об ошибке. P.S. Посмотрел сейчас код и понял, что он даже при непосредственной подстановке в DBI не сработает из-за экранирования. Это сообщение отредактировал(а) ginnie - 12.1.2009, 19:02 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
gcc |
|
||||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
trace я не включал, не знаю как его включит, надо посмотреть, попробовать
я написал так:
ничего не вывел скорость мне не нужна, ну вот такой запрос прошел и вывел:
Это сообщение отредактировал(а) gcc - 12.1.2009, 19:58 |
||||||
|
|||||||
gcc |
|
||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
написал программу, сейчас смотрю что оптимизирвать можно и парадигму ООП по красивей пересматриваю...
появился вопрос про DBI, было написано в статье что что метод do быстрее, есть ли разнциы по скорости между метода do или prepare? никто не тестировал? или можно использовать исключительно prepare? (передаються int числовые значения, инъекций не будет) если do быстрее, то как написать для HTML::Template массив хєшей?
так не работает:
тут только arrayref подходит и названия столбцов через цыклы пропустить? но это не удобно... Это сообщение отредактировал(а) gcc - 10.4.2009, 04:36 |
||||
|
|||||
tolkien |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 5.4.2008 Репутация: 4 Всего: 4 |
Врядли do быстрее. Потому что в нутри do есть prepare
|
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
tolkien, врядли там есть prepare. do метод сделали как раз чтобы выполнять действия без вывода ошибочной информации, там только 0 или 1 и в нем нету защиты от инъекций...
|
|||
|
||||
KSURi |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
gcc, плохо читали документацию.
-------------------- Died at Life.pl line 21 |
||||
|
|||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
хотел спросить на всякий случай:
это регулярное выражение /^\d+$/ защетит от инъекция? дырки в каталисте точно не будет, или абсолютно всё нужно ставить в execute();? (у меня много int значений) |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
товарищи, я хотел спросить, это регулярное выражение /^\d+$/ защетит от инъекция?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |