как обезопасить php-скрипт при передаче параметров....?!

  • Автор темы specialist
  • Дата начала

specialist

Guest
как обезопасить php-скрипт при передаче параметров....?!

Доброго времени суток всем!

Есть сайт...давольно-таки не маленький...и опция register globals стоит on...и повсеместно и часто используются
"передаваемые" переменные...
собственно вопрос: то что это не безопасно..и так понятно...стоит ли переключить register globals в off и переписать все переменные или как-то можно подругому обеспечить нормальный уровень безопасности php-скрипта при передаче параметров?
заранее благодарен.
 

SiMM

Новичок
Re: как обезопасить php-скрипт при передаче параметров....?!

Автор оригинала: specialist
стоит ли переключить register globals в off и переписать все переменные или как-то можно подругому обеспечить нормальный уровень безопасности php-скрипта при передаче параметров?
Зависит от скриптов. Например, скрипту
PHP:
<?php phpinfo() ?>
совершенно по барабану, в каком состоянии у тебя находится register_globals. Однако скрипты, имхо, проще писать под register_globals Off, поскольку это позволяет не задумываться о подобных глупостях (хотя не исключает необходимости думать о других глупостях).
 

specialist

Guest
Re: Re: как обезопасить php-скрипт при передаче параметров....?!

Автор оригинала: SiMM
Зависит от скриптов. Например, скрипту
PHP:
<?php phpinfo() ?>
совершенно по барабану, в каком состоянии у тебя находится register_globals. Однако скрипты, имхо, проще писать под register_globals Off, поскольку это позволяет не задумываться о подобных глупостях (хотя не исключает необходимости думать о других глупостях).
переменные вовсю используются в формах, которых на сайте очень много..причём может быть так что переменная передаётся формой через POSTи принимается GET-ом в одном и том же скрипте. ..сайт изначально писал не я...а предыдущему программеру было просто лень лишние строчки написать и брать эти переменные из массивов...собственно передо мной стоит задача довести проект до ума...оптимизировать его и пофиксить баги в коде...
 

Фанат

oncle terrible
Команда форума
стоит ли переключить register globals в off и переписать все переменные
Да, конечно.
или как-то можно подругому обеспечить нормальный уровень безопасности php-скрипта при передаче параметров
Можно.
Инициализировать все переменные перед использованием.
При этом положение регисетр глобалс не будет иметь значения.
 

Cougar

Кошак
specialist
Если "довести до ума" - тогда однозначно переписать так, чтобы скриптам было фиолетово - включены register_globals или нет. Ну, и разумеется, явная инициализация всех переменных тоже не помешает
 

specialist

Guest
Автор оригинала: Cougar
specialist
Если "довести до ума" - тогда однозначно переписать так, чтобы скриптам было фиолетово - включены register_globals или нет. Ну, и разумеется, явная инициализация всех переменных тоже не помешает
приведи пример кода, когда скрипту фиолетово...может там вставить проверку значения переменных?...поймите меня правильно ..я пытаюсь понять,что мне будет прощё сбедалать переписать весь сайт или перебрать код...и ещё я немного не понял в чём заключается явная инициализация всех переменных ....то есть просто в начале скрипта писать типа $a=1;....?
 

Фанат

oncle terrible
Команда форума
приведи пример кода, когда скрипту фиолетово
когда переменные проинициализированы.
..я пытаюсь понять,что мне будет прощё сбедалать переписать весь сайт или перебрать код...
переписать код всегда полезнее.
и ещё я немного не понял в чём заключается явная инициализация всех переменных ....то есть просто в начале скрипта писать типа $a=1;....?
Да.

кстати, в этом тебе очень поможет выставление в ачале всех скриптов
error_reporting(E_ALL);

Эта директива сразу тебе покажет обращения к несуществующим переменным
 

specialist

Guest
ххм...ок...спасибо всем ответившим!
 

Demiurg

Guest
>Эта директива сразу тебе покажет обращения к несуществующим переменным
... при register_globals = off

specialist
если ты пользуешься данными, то должен четко знать, откуда они взялись и какие проверки прошли.
 

specialist

Guest
а что думаете, если допустим просто выключить register globals ....и к каждому скрипту приинклудить
такой скрипт :
PHP:
<?PHP
if (!defined('PMA_GRAB_GLOBALS_INCLUDED')) {
    define('PMA_GRAB_GLOBALS_INCLUDED', 1);

    if (!empty($_GET)) {
        extract($_GET, EXTR_OVERWRITE);
    } else if (!empty($HTTP_GET_VARS)) {
        extract($HTTP_GET_VARS, EXTR_OVERWRITE);
    } // end if
   
    if (!empty($_COOKIE)) {
        extract($_COOKIE, EXTR_OVERWRITE);
    } else if (!empty($HTTP_COOKIE__VARS)) {
        extract($HTTP_COOKIE_VARS, EXTR_OVERWRITE);
    } // end if
   

    if (!empty($_SESSION)) {
        extract($_SESSION, EXTR_OVERWRITE);
    } else if (!empty($HTTP_SESSION__VARS)) {
        extract($HTTP_SESSION_VARS, EXTR_OVERWRITE);
    } // end if


    if (!empty($_POST)) {
        extract($_POST, EXTR_OVERWRITE);
    } else if (!empty($HTTP_POST_VARS)) {
        extract($HTTP_POST_VARS, EXTR_OVERWRITE);
    } // end if

    if (!empty($_FILES)) {
        while (list($name, $value) = each($_FILES)) {
            $$name = $value['tmp_name'];
        }
    } else if (!empty($HTTP_POST_FILES)) {
        while (list($name, $value) = each($HTTP_POST_FILES)) {
            $$name = $value['tmp_name'];
        }
    } // end if

    if (!empty($_SERVER) && isset($_SERVER['PHP_SELF'])) {
        $PHP_SELF = $_SERVER['PHP_SELF'];
    } else if (!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['PHP_SELF'])) {
        $PHP_SELF = $HTTP_SERVER_VARS['PHP_SELF'];
    } // end if

    // Securety fix: disallow accessing serious server files via "?goto="
    if (isset($goto) && strpos(' ' . $goto, '/') > 0 && substr($goto, 0, 2) != './') {
        unset($goto);
    } // end if

}
?>
решит ли это проблему?
и наверно плюс к этому добавить в каждый скрит инициализацию переменных...?
 

Gas

может по одной?
1. [m]import_request_variables[/m]

2. про массивы $HTTP_... наверное все уже забыли ($_GET и т.д. появились начиная с 4.1.0, а это _очень_ давно)

3. а вот с переменными сессии лучше работать через массив $_SESSION (это касается и всех остальных массивом, но если есть куча чужого кода под register_globals = on, что уж тут уж :) )

4. последние проверки это что?

-~{}~ 05.11.04 10:16:

PHP:
    // Securety fix: disallow accessing serious server files via "?goto="
    if (isset($goto) && strpos(' ' . $goto, '/') > 0 && substr($goto, 0, 2) != './') {
        unset($goto);
    } // end if

}
?>
потом ты $goto инклудишь?
если да то или задай массив всех возможных файлов и проверяй по нему,
или режь как минимум все подряд идущие точки и всякие другие левые символы ([^0-9a-zA-Z_./-] может ещё чё-то), и проверяй с помощью [m]is_file[/m]
 

Фанат

oncle terrible
Команда форума
specialist
Бегом идем читать PHP FAQ: Не передаются переменные!!!
Читаем внимательно и ВЕСЬ!


Если уж сам не можешь сообразить, что весь этот твой код к БЕЗОПАСНОСТИ имеет такое же отношение, как я - к китайскому балету.

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

specialist

Guest
Автор оригинала: Gas
1. [m]import_request_variables[/m]

2. про массивы $HTTP_... наверное все уже забыли ($_GET и т.д. появились начиная с 4.1.0, а это _очень_ давно)
3. а вот с переменными сессии лучше работать через массив $_SESSION (это касается и всех остальных массивом, но если есть куча чужого кода под register_globals = on, что уж тут уж :) )
4. последние проверки это что?
-~{}~ 05.11.04 10:16:
потом ты $goto инклудишь?
так давай по порядку:)
этот скрипт мне просто посоветовали и я его ещё не редактировал...(это и к массиву $HTTP, goto ..и так далее)...

[m]import_request_variables[/m] является ли это панацеей в данном случае..меня в первую очередь интересует безопасность...
 

SiMM

Новичок
specialist, и чем же твой код в плане безопасности отличается от register_globals On?
 

Gas

может по одной?
import_request_variables является ли это панацеей в данном случае..меня в первую очередь интересует безопасность...
это почти тоже (в зависимосте какие массивы импортируешь) что и registers_globals = on :)
просто удобней чем твоя куча кода
 

Фанат

oncle terrible
Команда форума
этот скрипт мне просто посоветовали
А САМ-то, САМ - когда головой начнешь думать?
А если тебе посоветуют головой вниз с крыши бросаться?
С чего ты взял, что советчик твой хоть что-то смыслит в пхп?
 

specialist

Guest
Автор оригинала: Фанат
specialist
Бегом идем читать PHP FAQ: Не передаются переменные!!!
Читаем внимательно и ВЕСЬ!


Если уж сам не можешь сообразить, что весь этот твой код к БЕЗОПАСНОСТИ имеет такое же отношение, как я - к китайскому балету.

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

P.S. не стоит судить имеет ли человек понятие о безопасности, если общался с ним только на эту отдельно взятую тему...в которой ты лучше разбираешься...
Всем ещё раз спасибо!
 
Сверху