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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Автомат. применение escape_string для запроса, mysql_real_escape_string 
V
    Опции темы
Mal Hack
Дата 4.1.2007, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Цитата(Wowa @  4.1.2007,  00:51 Найти цитируемый пост)
Что вы думаете по этому поводу? 

Это уже реализовано в PDO.
PM ICQ   Вверх
coyl
Дата 4.1.2007, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Wowa @  13.5.2006,  13:27 Найти цитируемый пост)
По моим предположением, если через GET или POST злоумышленник такое отправит, то взлом скрипта не произойдет. Запрос просто не выполнится, что и требуется. Согласен? Где опастность?


Опасность состоит в том, что любая ошибка может повлечь другую ошибку. К примеру при дальнейшем использовании результата ПХП вывалит ошибку, что это неправильный результат, укажет месторасположение скрипта.
Да и, например, если система находится, скажем, в стадии тестирования и вывод ошибок класса ДБ включен, то злоумышленник получит строку запроса, из которой узнает часть структуры базы. Это на первый взгляд кажется не значимым, но любой, кто сталкивался непосредственно с взломом систем, знает, что любая информация может быть полезной в этом деле и что хорошо защищённые системы должны давать минимум информации о своём внутреннем устройстве, естественно, не в ущерб удобности и функциональности.
PM MAIL   Вверх
Wowa
Дата 4.1.2007, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(Mal Hack @  3.1.2007,  23:36 Найти цитируемый пост)
Это уже реализовано в PDO. 

Ты имеешь ввиду подстановку значений через PDO::prepare() ?


Код

<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'UPDATE <table> SET
name = :name,
colour= :colour
;'
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR, PDO::CURSOR_FWDONLY));
$sth->execute(array(':name' => 'wowa', ':colour' => 'red'));
$red = $sth->fetchAll();
$sth->execute(array(':name' => 'dima', ':colour' => 'red'));
$yellow = $sth->fetchAll();
?> 


Так, как тут обновить более двух столбцов? Придется ведь имхо составлять новый запрос для этого.
PM WWW   Вверх
Mal Hack
Дата 4.1.2007, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Цитата(Wowa @  4.1.2007,  14:54 Найти цитируемый пост)
Ты имеешь ввиду подстановку значений через PDO::prepare() ?

Да.

Цитата(Wowa @  4.1.2007,  14:54 Найти цитируемый пост)
Так, как тут обновить более двух столбцов? Придется ведь имхо составлять новый запрос для этого. 

А ты как хотел?
В конце концов никто не мешает сделать что-то вроде:
Код

<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'UPDATE <table> SET
name = :name,
colour= :colour
pole2= :pole2
pole3 = :pole3
;'
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR, PDO::CURSOR_FWDONLY));
$sth->execute(array(':name' => 'wowa', ':colour' => 'red','pole2'=>'333','pole3'=>''));
$red = $sth->fetchAll();
$sth->execute(array(':name' => 'dima', ':colour' => 'red','pole2'=>'','pole3'=>'3'));
$yellow = $sth->fetchAll();
$sth->execute(array(':name' => 'dima', ':colour' => 'red','pole2'=>'','pole3'=>''));
?> 

PM ICQ   Вверх
Wowa
Дата 4.1.2007, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(Mal Hack @  4.1.2007,  12:58 Найти цитируемый пост)
А ты как хотел?

так:
Код

$row = array(
  'id'   => 10,
  'date' => "2006-03-02"
);
$DB->query('UPDATE tbl SET ?a', $row);
// MySQL: UPDATE tbl SET `id`='10', `date`='2006-03-02'

Такой способ применяется тут: http://dklab.ru/lib/DbSimple/

Добавлено @ 15:12 
ведь так гораздо удобнее?
PM WWW   Вверх
Mal Hack
Дата 4.1.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Wowa, при условии, что PDO работает также и запрос выглядит нагляднее, ИМХО, при условии, что он "вшит" в систему, DbSimple - не конкурент в принципе...
PM ICQ   Вверх
smartov
Дата 4.1.2007, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

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



Цитата(Wowa @  4.1.2007,  14:11 Найти цитируемый пост)
ведь так гораздо удобнее? 

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

Код

//где-то в другом файле
class UsersTable extends Table
{
    $tableName = 'users';
    function UsersTable()
    {
    }
}


...

//там где мне надо
$usersTable = new UsersTable();

$row = array(
  'id'   => 10,
  'date' => "2006-03-02"
);

$usersTable->insert($row);


Функция insert сама разбирает массив, сама делает mysql_escape_string.
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




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


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

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