помогите начинающему не наделать больших дыр

Oleg_S.

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

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

Итак, на сайте есть три директории и в каждой по файлу

http://www.domen.ru/tools/retval.php
http://www.domen.ru/tools/common/mods.php
http://www.domen.ru/cgi-bin/genlink.cgi

К файлу retval.php может обратиться любой посетитель сайта для передачи исходных данных. Затем retval.php передаст эти данные в mods.php. Здесь из MySQL будут извлечены дополнительные данные, которые нужно передать genlink.cgi. genlink.cgi получив данные, генерирует некую строку, которая, проделав обратный путь (genlink.cgi -> mods.php -> retval.php) возвращается посетителю.


Как лучше/надежнее передать данные retval.php -> mods.php?

1. Обратиться как к функции - $retval = doFunc($param1, $param2);
2. Обратиться как к PHP странице - $retval = common/mods.php?param1=$param1, param2=$param2
3. Ваш вариант


Как передать данные mods.php -> genlink.cgi вообще не знаю. Если я правильно понимаю, то cgi файл сродни EXE, т.е. фактически нужно заставить отработать экзешник.
 

Кром

Новичок
1. Обратиться как к функции - $retval = doFunc($param1, $param2);
2. Обратиться как к PHP странице - $retval = common/mods.php?param1=$param1, param2=$param2
Если ты представляешь как это сделать, сделай так.
 

Oleg_S.

Новичок
Автор оригинала: Кром
Если ты представляешь как это сделать, сделай так.
Но меня интересует как надежнее, грамотнее, наконец принято поступать в аналогичных ситуациях. Ведь есть же "правила хорошего тона".
 

Фанат

oncle terrible
Команда форума
правила хорошего тона рекомендуют не смешивать.
и обходиться без .cgi
или наоборот - всё делать в cgi
 

Кром

Новичок
>Но меня интересует как надежнее, грамотнее, наконец принято поступать в аналогичных ситуациях.

Надежный код пишут, когда начинают понимать где могут быть дыры в коде.
Грамотный код пишут, когда осваивают сам язык и его синтаксис.
А пишут как принято, когда осваивают понятия стуктуризации и оптимизации.
 

Oleg_S.

Новичок
Автор оригинала: Фанат
правила хорошего тона рекомендуют не смешивать.
и обходиться без .cgi
cgi файл в моем случае, это файл стороннего производителя. Без него я обойтись не смогу.

-~{}~ 08.08.06 15:07:

Автор оригинала: Кром
Надежный код пишут, когда начинают понимать где могут быть дыры в коде.
К сожалению Господь меня не наделил возможностью понимать все сразу и в полном объеме. Так, что я познаю все постепенно, с набиванием шишек и "понимание где могут быть дыры в коде" ко мне приходит постепенно. Завидую Вам, ибо смею предположить, что к Вам это понимание пришло в полном объеме и в мгновение ока.

Я же не спрашиваю (пока) как сделать ИМЕННО КОД без дыр, как принять переменные, как их проверить на валидность. Я спрашиваю о том, каким способом передачи переменных лучше воспользоваться. Ведь есть более надежные способы, есть менее. Ну что-то типа передачи данных из формы посредством POST и GET.
 

Фанат

oncle terrible
Команда форума
Ведь есть более надежные способы, есть менее. Ну что-то типа передачи данных из формы посредством POST и GET.
Хм. а ты каким хотел, если не этими двумя?
 

Oleg_S.

Новичок
Автор оригинала: Фанат
Хм. а ты каким хотел, если не этими двумя?
Я имел в виду то, что POST предпочтительнее (как мне кажется) ибо нельзя в броузере подглядеть, "что и сколько" было передано.
 

Фанат

oncle terrible
Команда форума
А при чём здесь "в броузере подглядеть"?
Ты же, вроде, из retval.php в mods.php данные из броузера передаёшь?
 

Фанат

oncle terrible
Команда форума
HraKK
очки купи.
не подменить, а подглядеть

-~{}~ 08.08.06 15:28:

Oleg_S.
Но вопрос интересный, кстати.
Какой смысл пользователю "подглядывать" то, что он сам только что ввёл?
 

Oleg_S.

Новичок
Oleg_S.
Но вопрос интересный, кстати.
Какой смысл пользователю "подглядывать" то, что он сам только что ввёл? [/QUOTE]
Да нет. Наверное, я Вас запутал :)

Пользователь пошлет данные на retval.php, а далее мне их нужно надежно передать в mods.php. Как я изначально сказал, я вижу два способа, но я не знаю, какой надежнее, а может быть, сведущие люди могут предложить и другие способы.

А POST и GET я привел в качестве примера. Данные можно передать и так и так, но POST надежнее. А вот как надежнее передать данные между двумя PHP страницами, я не знаю. Как надежно передать данные mods.php -> genlink.cgi тоже не знаю. Могу предположить по аналогии с POST и GET, что в каком-то случае эти данные можно перехватить, в другом случае это сделать сложнее.
 

HraKK

Мудак
Команда форума
Все таки я был прав:) Насчет подменить.

Записывай эти данные кудат-то, а в цги передавай признак того что пришли данные. пост или гет всеравно.
 

Фанат

oncle terrible
Команда форума
Oleg_S.
начнём с того, что ты не "надёжного способа" не знаешь, а вообще никакого.
То, что ты написал вверху - фантазия, ничего общего с реальностью не имеющая.
А реальность в данном случае такова, что способ в каждом случае имеется только один.
"между страницами" передавать ничего не надо.
поскольку никаких страниц не бывает.
бывают пхп скрипты.
ты слышал когда-нибудь об операторе include?

по поводу genlink.cgi вариант тоже только один.
выставить переменные окружения и вызвть этот скрипт.

но лучше всего будет, если твой начальник наймёт для этой работы программиста
 

Oleg_S.

Новичок
Автор оригинала: HraKK
Записывай эти данные кудат-то, а в цги передавай признак того что пришли данные. пост или гет всеравно.
Ничего не понял. Я же говорю, я начинающий PHPпист. У меня есть инструкция производителя CGI

http://www.domen.ru/cgi-bin/genlink.cgi?val1=bla-bla1&val2=bla-bla2

This example shows how to execute a CGI module that generates a link.

bla-bla1 и bla-bla2 это секретные данные, которые мне нужно надежно скрыть. Эти данные я вытащу в mods.php из MySQL на основании полученных от пользователя исходных данных в retval.php.
 

Кром

Новичок
Oleg_S.
Не надо слушать HraKK, он не в себе.
Тебе задали вопрос
>ты слышал когда-нибудь об операторе include?
найди в себе силы ответить на него.
Мануал здесь ru.php.net/include/
 

Oleg_S.

Новичок
Автор оригинала: Фанат
Oleg_S.
начнём с того, что ты не "надёжного способа" не знаешь, а вообще никакого.
То, что ты написал вверху - фантазия, ничего общего с реальностью не имеющая.
Вы имеете в виду $retval = doFunc($param1, $param2);
Как ни страно эта фантазия сейчас работает.

retval.php
=======
<?php
require_once("common/mods.php");

$param1 = $HTTP_ POST _VARS["param1"];
$param2 = $HTTP_POST_VARS["param2"];

$retval = doFunc($param1, $param2);

echo $retval;
?>

mods.php
=======
function doFunc($param1, $param2)
{
вытаскиваю данные из MySQL на основании $param1 и $param2
$f = mysql_fetch_array($result);

$retval = нужно получить данные запустив cgi
http://www.domen.ru/cgi-bin/genlink?p1=$f[‘1’]& p2=$f[‘2’]
return $retval;
}


по поводу genlink.cgi вариант тоже только один.
выставить переменные окружения и вызвть этот скрипт.
Вы можете привести конкретный пример как это сделать?


но лучше всего будет, если твой начальник наймёт для этой работы программиста
Так вышло, что я сам себе начальник и программист в одном лице и работают сам на себя на дому.

-~{}~ 09.08.06 15:30:

Автор оригинала: Кром
Oleg_S.
Тебе задали вопрос
>ты слышал когда-нибудь об операторе include?
найди в себе силы ответить на него.
Ну таки да, слышал, и даже пример привел рабочий (правда не с include).

Ну так как запустить CGI имея переменную

$retval = “http://www.domen.ru/cgi-bin/genlink?p1=$f['1']& p2=$f['2']”

и чтобы злоумышленники не добрались до параметров?
 

Фанат

oncle terrible
Команда форума
лучше ты скажи - как можно запустить CGI, чтобы злоумышленники ДОБРАЛИСЬ до параметров?
 

Oleg_S.

Новичок
Во-первых, я пока вообще не знаю, как его запустить, основываясь на значении переменной.
Во-вторых, я про Фому, а мне про Ерему
И, в-третьих, спасибо всем за информативные ответы и помощь.
 
Сверху