наименование переменных в URL=наименование полей таблиц базы

frk

Новичок
наименование переменных в URL=наименование полей таблиц базы

такой вопрос: GET-ом передаю переменные, при этом имя каждой переменной - это поле таблицы MySQL, а значение - id-соответственно:
http://......./script.php?field1=2&field2=43&field3=1

можно ли передавать такие данные в URL?
т.е. в плане безопасности хотелось бы узнать.....допустима ли такая методика?
 

frk

Новичок
я имел в виду, что структура базы раскрывается, при этом мне проще передавать данные таким образом (т.е. fieldname=id), ибо обхожусь без лишних движений,

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

хотелось бы узнать есть ли еще какие нить вариации на эту тему?

-~{}~ 30.03.05 23:58:

Автор оригинала: Фанат
крайне нежелательна
может какие нибудь советы из личного опыта будут?
 

Romashov

экспериментатор
можно попробовать ввести псевдонимы, если цель скрыть истинные поля
 

frk

Новичок
Автор оригинала: Romashov
можно попробовать ввести псевдонимы, если цель скрыть истинные поля
я об этом думал, но пришел к выводу что - не самый лучший метод(представьте, что таких переменных куча....некоторые советуют использовать сессии?!)....хотя,...учитывая мой опыт в PHP.......лучше лишний раз спросить людей - кто и как делает и принять на заметку

может еще будут советы?!
 

frk

Новичок
Автор оригинала: Фанат
это не имеет ни малейшего смысла
уфф,...тогда остается только использовать псевдонимы, ...как уже мне советовал гражданин
Romashov

-~{}~ 31.03.05 00:22:

Автор оригинала: Romashov
можно попробовать ввести псевдонимы, если цель скрыть истинные поля
хорошо, тогда такой вопрос: если я буду использовать псевдонимы,......ну и в скрипте назначения буду ставить эти переменные в некоторое соответствие с конечными переменными(наименованиями полей таблиц) - может этого и будет достаточно,
но остается вопрос с передачей id?.....хотя как еще если не id?.....

структура таблицы такая:
-----------------
| id | fieldname |
-----------------

т.е. id соответствует кириллическому содержимому поля fieldname,
тогда может быть со скрипта, с которого переменные отдаются Get-ом, передавать именно эти значения fieldname, соответствующие id, а в скрипте на который эти переменные подаются делать обратное преобразование?.....ибо в конечном счете мне нужны именно id
 

Romashov

экспериментатор
Потом, насколько я понял, ты не делаешь проверку прав.
Допустим через пять лет тебе не захочется, чтобы пользователи могли работать с каким-нибудь полем.
Имхо, лучше сделать на проверку наличия в массиве допустимых полей и вышибать ненужные переменные
Приведи код. Я не прочь подумать.
 

Фанат

oncle terrible
Команда форума
но остается вопрос с передачей id?.....
передача id никакого вопроса не представляет.
передаёшь обычным порядком.

вообще, хотелось бы увидеть реальную задачу.
Начнём с того, что данные для изменения таблиц гетом не передают, а передают постом.
 

Мутник

Новичок
frk

массивы для ленивых? :)

array[id]
array[name]
array[surname]

это если при посте - то немного более красиво...
 

frk

Новичок
Автор оригинала: Romashov
Потом, насколько я понял, ты не делаешь проверку прав.
Допустим через пять лет тебе не захочется, чтобы пользователи могли работать с каким-нибудь полем.
Имхо, лучше сделать на проверку наличия в массиве допустимых полей и вышибать ненужные переменные
Приведи код. Я не прочь подумать.
да, на счет прав - это мысль!

вот собственно код скрипта....правда еще недописанного до конца, но смысл должен быть ясен
PHP:
<?php
    include('..............');

    $mcon = mysql_connect($host, $login, $passwd) or die(mysql_error());
    if($mcon)
    {
        if(isset($_GET['field1'])&&($_GET['field1']!=''))
        {
            addsl($_GET); // добавляю слэши
            if(isset($_GET['field2'])&&($_GET['field2']!=''))
            {
                $qr_main = "SELECT * FROM $db.table t WHERE
                ";
                $qrvars = array('field3', 'field4', 'field5', 'field6',..);
                 //далее проверяю: если переменная пришла, и если не пуста - то добавляю в запрос ...
                 foreach($qrvars as $key => $val)
                 {
                    $qr_main.=(isset($_GET[$val])&&($_GET[$val]!=''))?" t.$val='$_GET[$val]' AND":"";
                 }
                 substr($qr_main, 0, -4); //готовый запрос(отезаю AND на "конце")
            }
            else
            {
                ..................
            }
        }
        else
        {
            header("Location: ./index.php");
            exit;
        }
    }
?>

-~{}~ 31.03.05 00:41:

Автор оригинала: Фанат
передача id никакого вопроса не представляет.
передаёшь обычным порядком.

вообще, хотелось бы увидеть реальную задачу.


Начнём с того, что данные для изменения таблиц гетом не передают, а передают постом.
это конечный вариант...т.е. пользовательский, т.е. юзер может только просматривать данные, полученные путем запроса...включающего переменные, которые я передаю скрипту, поэтому ни о какой модификации таблиц пока что речи не идет(мне нужно было сразу об этом сказать - моя вина),
далее.....в случае, если я данные предназначены для модификации записей - сначала передаю их постом на скриатец, который собственно и выполяет запрос, а потом делаю header("Location: ./somescript.php") - как и советовали в форуме

-~{}~ 31.03.05 00:46:

Автор оригинала: Мутник
frk

массивы для ленивых? :)

array[id]
array[name]
array[surname]

это если при посте - то немного более красиво...
ну, а далее...продолжи мысль...если не сложно конечно, plz - каким методом далее передавать эти данные?... - если честно - ни разу не передавал массив POST, и тем более GET-методом, разве что сериализацией и в одной переменной, либо опять же через сессию с сериализацией.....- вот такое было

-~{}~ 31.03.05 00:48:



Автор оригинала: frk
уфф,...тогда остается только использовать псевдонимы, ...как уже мне советовал гражданин
Romashov

-~{}~ 31.03.05 00:22:


хорошо, тогда такой вопрос: если я буду использовать псевдонимы,......ну и в скрипте назначения буду ставить эти переменные в некоторое соответствие с конечными переменными(наименованиями полей таблиц) - может этого и будет достаточно,
но остается вопрос с передачей id?.....хотя как еще если не id?.....

структура таблицы такая:
-----------------
| id | fieldname |
-----------------
id этой таблицы используется в другой как связующее, т.е. другая таблица содержит этот id, - может быть слишком сумбурно все излагаю...сорри

-~{}~ 31.03.05 00:53:

Автор оригинала: Мутник
frk

массивы для ленивых? :)

array[id]
array[name]
array[surname]

это если при посте - то немного более красиво...
блин, я сам же и ответил на свой вопрос:)......сериализация!

-~{}~ 31.03.05 00:57:

спасибо всем, буду конечно признателен, если будут еще советы, попробую......., извиняюсь за кривой код(ну и за плохое выравнивание оного).....не судите строго

-~{}~ 31.03.05 03:31:

Решил задачу наверное слишком просто: после монолога с Мутник-ом пришел к выводу, что нужно использовать массивы, сериализацию оных и сессии для передачи массива - все замечательно работает, только у меня почему то сомнения в этой методике.....наверное по неопытности...время покажет.
Еще раз всем спасибо.
 

Фанат

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

Мутник

Новичок
frk


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

frk

Новичок
Автор оригинала: Мутник
frk


ну ну... сериализованные данные гет-ом передавать.. флаг тебе в руки.
нет, данные я передаю POST-ом....но если вам нечего сказать (Фанат)......и не надо

PS
-----------------
почему все утрируется д`онельзя?!!!
 

frk

Новичок
Автор оригинала: vafel
нормально передавать просто addslashes ставь да и все
мне тут вообще сказали что это тут ни при чем(from: Фанат)

-~{}~ 31.03.05 15:09:

Автор оригинала: vafel
нормально передавать просто addslashes ставь да и все
в принципе я так и делал
 

Фанат

oncle terrible
Команда форума
мне тут вообще сказали что это тут ни при чем
совершенно верно.
для имён полей - не при чём.
почему все утрируется д`онельзя?!!!
потому, что вопросы донельзя бессвязные.
какие-то обрывки мыслей, ни малейшего намёка на задачу так и не прозвучало.
а потом возникают претензии.
я тоже могу претензию высказать
....но если вам нечего сказать (Фанат)......и не надо
Если толком не можешь задать вопрос - и не надо задавать
 

Мутник

Новичок
frk
vafel


а каким боком вам это поможет если вы передаете НАИМЕНОВАНИЕ полей, которые НЕ НАДО показывать? это две совершенно разные задачи. Наверное, сначала надо понять, чего хотите...
 

frk

Новичок
Автор оригинала: Мутник
frk
vafel


а каким боком вам это поможет если вы передаете НАИМЕНОВАНИЕ полей, которые НЕ НАДО показывать? это две совершенно разные задачи. Наверное, сначала надо понять, чего хотите...
хорошо, описываю задачу снова:
--------------------------------------------------------------------------
делаю базу "расписание" занятий в учебном заведении,
студент заходит на _http://site/rasp/index.php
выберает: день недели(обязон), препод, предмет.......т.е. задает условия поиска.....дальше делает submit и переходит на другой скрипт (showresult.php), который делает запрос и генерит страничку с результатами, типа того: понедельник - бла бла бла, вторник - empty result, среда - бла бла бла

т. е. тривиальная задача по идее.....пользователь не авторизовывается, все необходимые данные(юзер и пароль к базе - с правами на чтение) нахоятся в конфиге

.....о чем это я.!
ах да: т.е. я должен "данные" с index.php передать на showresult.php

данные - наименования полей таблиц+id т.е.:
_http://site/rasp/showresult.php?field1=id1&firle2=id2.....

т.е. получается что передавая гетом наименования таблиц я раскрываю структуру своей базы данных.......а это как я понимаю - чревато!!!

вопрос: как выйти из этого положения?

вариации упомянутые выше и испробованные мной:
1) передавать данные гетом и при этом использовать псевдонимы вышеупомянутых переменных
2) использовать массивы, сериализацию, сессию
............больше ничего не придумал пока что
 
Сверху