разработка безопасного кода класса DB

weldp

Новичок
разработка безопасного кода класса DB

Привет ВСЕМ
Во первых Я хочу сказать, что хреново программирую+ у Меня ОЧЕНЬ ПЛОХО с
ООП.

Теперь к Делу :)
Каждый раз имеем необходимость подключатся к sql-серверу.
Хотелось бы:
а).Сделать АПИ, что бы было возможно прикручивать ЛЮБОЙ sql-сервер
б).Добавить фильтрацию и проверку на безопасность запросов

Сначала Я пытался что-то выдернуть из стандартных Форумов, порталов и т.д.
- но код там был непрозрачным :(

Может кто подскажет еще такую штуку - как делают запросы кросс-sql'ными?
Тоесть Имеем SELECT в mysql,oracle,postagesql.... Но синтаксис у Них
различается + нельзя же знать какой он для всех баз...

Вот в каком духе Я делаю, но это не похоже на то что в форумах/порталах и
думаю что это слишком сложно
В общем Я описываю в классе все что нужно для работы с базой, тоесть
просто напристо все вызовы всех функций. Дельше, наследую текущий класс, и
в нем добавляю специфические функции, на которых работает уже мое
приложение...
Только Мне кажется, что есть легче способ, или другой путь...

Пример
читать новости:
Входные данные пользователь, страница.
Выполняю функцию - читать_страницу($номер_страницы,$кто_читает)
{
$qw=сформированный запрос
setquery($qw);
func_select();
}

Пример класса...
class db
{
public $er;
public $n;
public $result;
private $query;
private $link;

function __construct(&$l){
$this->query="SELECT 0";
$this->link=$l;
$this->n='';
$this->result='';
}
public function setquery($qw){
$this->query=$qw;
}
public function setlink(&$link){
$this->link=$link;
}
public function num(){
$this->result=mysql_query($this->query,$this->link)or die ("can't select
FROM DB");
$this->n=mysql_num_rows($this->result);
}

}

С уважением, Соловьев Валерий
 

Фанат

oncle terrible
Команда форума
Соловьев Валерий.
Ты хорошо подумал? Тебе действительно нужно подключаться к любому SQL серверу?
 

Alexandre

PHPПенсионер
weldpтолько что была дискуссия в топике http://phpclub.ru/talk/showthread.php?s=&threadid=100746
Ром, а может ему посоветуем AdoDB? (хотя согласен - утопия это - Универсальный доступ и не нравится мне AdoDB)
 

Фанат

oncle terrible
Команда форума
А в мервую очередь тебе надо подумать над тем, чтобы разделить свои многочисленные желания на части.

к примеру, в заголовке написано про безопасный код, а в самом топике - ни слова.

далее. ты не умеешь пока работать даже с одной базой, а замахиваешься - на "любое количество".
не умеешь ООП, но хочешь писать класс.

Когда берешься за за кучу дел сразу, то не получается ни одно. Давай ты сначала разберешься с безопасностью?
Потом четко сформулируешь - зачем тебе нужен класс, и чем тебя не устраивают встроенные функции.
если сформулируешь - то напишешь этот класс.

-~{}~ 06.07.07 13:19:

Alexandre
Конкретно этому человеку надо посоветовать сначала научиться чуть-чуть программировать и понимать, чего он хочет, и что делает.

-~{}~ 06.07.07 13:22:

weldp
по поводу безопасности.
так, как ты собрался делать, у тебя ничего не порлучится.
Готовые запросы не "фильтруют".

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

прочитай вот этот текст: PHP FAQ: \"Кавычки \". Cоставление запросов mysql, слеши, экранирование кавычек.
а потом напишисвои соображения
 

weldp

Новичок
Автор оригинала: *****
А в мервую очередь тебе надо подумать над тем, чтобы разделить свои многочисленные желания на части.
к примеру, в заголовке написано про безопасный код, а в самом топике - ни слова.
далее. ты не умеешь пока работать даже с одной базой, а замахиваешься - на "любое количество".
не умеешь ООП, но хочешь писать класс.
Когда берешься за за кучу дел сразу, то не получается ни одно. Давай ты сначала разберешься с безопасностью?
Скажем так:
Безопасность - Я хочу фильтровать не ВЕСЬ запрос, а входящие элементы, основываясь "строго" на их типах и типах которые ожибаются...

Тоесть
1.Для каждой области программы задать свой набор ожидаемых символов, тоесть для имен страниц Мы выбираем a-Z, 0-9, Для номера icq: 0-9 , при этом какого хрена там должны быть буквы - к примеру?
2. Отфильтровывать всякое UNION/SELECT/INSERT/UPDATE и т.д.
3.Всякие встроенные в mysq and etc функции экранирующие управляющие символы

Это можно как класс или часть класса - проверять и обрабатывать все что идет в/из ДБ

Потом четко сформулируешь - зачем тебе нужен класс, и чем тебя не устраивают встроенные функции.
если сформулируешь - то напишешь этот класс.
Хм... Мы все знаем что ООП дает преимущество в сложных или больших проектах перед функциями.
Класс стоит написать 1-н раз, но при этом пользоваться можно всю жизнь+ модифицировать :)
А вообще Я использую php+mysql часто, и каждый раз одно и тоже - трата времени.

Сейчас вот встала необходимость выбора SQL сервера для различных задач свой SQL.
Alexandre
Конкретно этому человеку надо посоветовать сначала научиться чуть-чуть программировать и понимать, чего он хочет, и что делает.
Я конечно не могу сказать что Я не умею прогать, просто Я учился ТОЛЬКО функциям, а про ООП Мне не рассказывал. В последствии Я читал про ООП, и даже использовал ООП, но ...эм...Когда видишь свои поделки и работы других, понимаешь что в сущьности ТЫ ничего не умеешь :(

ЗЫ:
Еще + в пользу класа...
Я конечно не буду говорить, что Я пользуюсь правильным путем и тем более, что Я что-то понял, но вот что Я использовал(пытался):
*Разбиваем класс на элементарные функции и продумываем принимаемые параметры и возвращаемые параметры...
*Наследуем класс, либо в нем же строим более программно зависимые функции - например:

читать новости состоит из:
-получить данные
-проанализировать данные
-сформировать запрос
-вернуть результат
-вывести резутьтат
При этом например последнюю функцию вывести результат можно сделать:
вывести в файл, или в xml, или в exel, или просто html...

Тоесть Я определяю базовые функции, а уже потом на их основе строю все сложнее и сложнее функции6 при этом Я могу поменять код внутри класса, но это никак не отразится на ВСЕЙ программе - это лучше чем Менять всю программу...
Хотя Я чувствую, что это больше похоже на функциональное программирование :(
 

Фанат

oncle terrible
Команда форума
Тоесть
1.Для каждой области программы задать свой набор ожидаемых символов, тоесть для имен страниц Мы выбираем a-Z, 0-9, Для номера icq: 0-9 , при этом какого хрена там должны быть буквы - к примеру?
при чем здесь бд?
хочешь - оставляй хоть всего три буквы
НО к бд это все не имеет ни малейшего отношения!
2. Отфильтровывать всякое UNION/SELECT/INSERT/UPDATE и т.д.
3.Всякие встроенные в mysq and etc функции экранирующие управляющие символы
хватит глупости писать.
я тебе что велел сделать?

-~{}~ 07.07.07 01:42:

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

-~{}~ 07.07.07 01:45:

Я определяю базовые функции, а уже потом на их основе строю все сложнее и сложнее функции6 при этом Я могу поменять код внутри класса, но это никак не отразится на ВСЕЙ программе - это лучше чем Менять всю программу...
тебе это только кажется. все у тебя прекрасно отразится.
ты представляешь себе ООП как волшебную палочку, которой стукнул один раз - и программа готова.
ни. хера. подобного.
я еще не видел ни одной программы, которая была бы короче при использовании ооп.

но отговаривать не буду - все равно таким как ты, что-то говорить бесполезно. пиши свой драндулет.
только ересь про свои методы защиты бд из головы выкини.
 

weldp

Новичок
Автор оригинала: *****
тебе это только кажется. все у тебя прекрасно отразится.
ты представляешь себе ООП как волшебную палочку, которой стукнул один раз - и программа готова.
ни. хера. подобного.
я еще не видел ни одной программы, которая была бы короче при использовании ооп.

но отговаривать не буду - все равно таким как ты, что-то говорить бесполезно. пиши свой драндулет.
только ересь про свои методы защиты бд из головы выкини.
А при чем здесь размер?
Я вообще-то говорю о том, что написал 1-н раз класс, а Его уже используешь...
Ладно проехали..

А какой Я?
Не уж то из пары постов можно сказать какой Я?
При этом Ты знаешь что Я хреново прогаю, и прошу совета - а не "свои идеи пихаю"...
Во вторых Я пытаюсь объяснить хоть что-то что бы разобраться...

ЗЫ:
А по твоему не надо отфильтровывать UNION/AND/OR ... в запросах? Когда там должно быть совсем другое?

Я же говорю - класс, в классе функции фильтрования и защита от некоторых атак - Мне пополам толи это будет защита самих ДБ, толи Я сам буду фильтровать экранировать - но скажите Мне - зачем каждый раз париться, помнить что и как надо экранировать, если написал 1-у функцию, которая например принимает
значения типа int и все что надо делает?...
Потом эти функции становятся членами класса...Или Я опять даун?
 

Fara

Новичок
***** - жестко судишь. Не понял тебя и ладно, чего флудить?

weldp .... знаешь....сам поначалу думал на формумах могут чего дельного посоветовать....)))...ггг
Кароче , учись прогать, читай FAQ посидишь на недельку больше , зато не будешь потом как калека, которому кастыль дали поносить , а как второй сделать такой же - он не знает.
Ну и в заключение ....проблему ты завернул конечно....слишком абсттрактно и широко , давать советы по такой это делать работу за тебя, решений твоей проблемы не одно, их куча ...и у каждого свое. Ищи сам. А вопросы конкретней задавай.

На формуах можно получить хорошую инфу...но редко то , что ты ожидаешь.

-~{}~ 10.07.07 11:52:

Автор оригинала: weldp

ЗЫ:
А по твоему не надо отфильтровывать UNION/AND/OR ... в запросах? Когда там должно быть совсем другое?

Потом эти функции становятся членами класса...Или Я опять даун?
нет..надо редактировать переменные которые ты вставляешь в запрос.
 
Сверху