Загрузка в базу переменного количества переменных

Статус
В этой теме нельзя размещать новые ответы.

Silentland

Новичок
Пишу библиотечную ф-ю, которая принимает из JS массив параметров и сохраняет их в соответствующие поля БД. Сам php-скрипт ничего не должен знать о структуре БД, т.е. ответственность за то, чтобы поля совпадали, лежит на JS разработчике. Сейчас ф-я выглядит так:
PHP:
$params = array('opt1' => 'aaa', ... ,'optN' => 'zzz');

function addDB($params) {
    $options = array();
    foreach ($params as $k => $v) {
        $options[] = "`" . $k . "` = '" . $v . "'", 
    }
    $options = implode(",", $options);

    mysql_query("insert into `table` set" . $options);
}
С точки зрения защищенности, это, конечно, полный провал. Как ее усовершенствовать, чтобы повысить защищенность или чтобы легко было использовать в популярных фреймворках с их обертками над БД?
 

fixxxer

К.О.
Партнер клуба
$v - mysql_real_escape_string
$k - регуляркой на допустимые символы (хотя мне не нравится такая идея, лучше все же поля перечислить допустимые, или, если прям вперлось динамику, брать их из information schema)
 

Фанат

oncle terrible
Команда форума
$v - mysql_real_escape_string
$k - регуляркой на допустимые символы (хотя мне не нравится такая идея, лучше все же поля перечислить допустимые, или, если прям вперлось динамику, брать их из information schema)
Это тоже косяк, на самом деле.
Доступ к полю, условно говоря, `admin` вряд ли допустим, хоть оно и присутствует.
 

Фанат

oncle terrible
Команда форума
Писать функцию, которая принимает массив из JS - идиотизм.

Функция должна принимать массив из PHP.
Дополнительным параметром она должна принимать список разрешённых ключей.
http://stackoverflow.com/a/8443501 например
 

WMix

герр M:)ller
Партнер клуба
да ладно ужо... можно будет хоть раз такой запросик ?t=users&f=nick,pass попробывать
 

Silentland

Новичок
Доступ к полю, условно говоря, `admin` врядли допустим, хоть оно и присутствует.
Давайте предположим, что в таблице нет администраторских полей. К примеру, там только параметры товаров (пусть товары могут добавлять любые пользователи) и их id-шники и название таблицы жестко прописано в обращении к БД. В пределах этой таблицы пользователь вправе обращаться к каким угодно полям, главное, чтобы джойн не сделал или чего похуже.

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

Писать функцию, которая принимает массив из JS - идиотизм.
Пусть не из JS. Суть в том, что она принимает непроверенные данные.
 

WMix

герр M:)ller
Партнер клуба
Код:
while true; do wget "....?name=viagra&price=1000"; sleep 2; done;
суть что она тупо делает работу, не понимая что!
 

Фанат

oncle terrible
Команда форума
Ну вот что с такими делать?
Я не понимаю.
Приходит оно, вроде бы, с вопросом.
Ему отвечают - как сделать.
И тут оно начинает кочевряжиться. "Так не хочу, эдак не буду".
Чего приходил, спрашивается?
 

Фанат

oncle terrible
Команда форума
Я понимаю, что ты хотел сделать как лучше. автомат-шмавтомат, вся ответственность на жс-верстальщике, а пхп-программер в потолок плюёт и в контру режется.
Ну так вот - ТАК ЭТО НЕ РАБОТАЕТ.

Но я прекрасно понимаю, что для тебя это офигительно красивая идея, которая родилась в твоем офигительно гениальном мозгу.
И хрен ты от неё откажешься. потому что офигительно гениальный, и разрабы, которые по 10 лет поляну топчут, тебе не указ.
Ну так вот раз не указ, раз ты сам себе умный - вот сам тогда со своими проблемами и разбирайся, а спрашивать никого не надо.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху