Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » DEL

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10

Открыть новую тему     Написать ответ в эту тему

Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
israel_rider
я к тому, что если у вас данные в конце концов в массиве, который вы и хотите обезопасить, не будете же для каждого элемента вызывать эту функцию.

Цитата:
И зачем? Как введение массива позволит хакеру взломать сайт?  

речь не о введении массива. просто подумайте.. когда много данных из формы и используется написанная вами функция.. вы все эти данные будете передавать как аргументы функции или же запихнете их в массив?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:55 04-07-2009
israel_rider

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Да. Теперь понял. Я задумывался об этом, у меня на одной страничке было действительно много данных из формы. И в таком случае я выполню проверку так. Выполняю итерацию по массиву POST при помощи функции foreach, и во время итерации передаю каждое значение из массива РОST этой функции для проверки. А вообще, конечно, думать надо, экспериментировать. Точно мне и не сказать, с ходу.  
 
Добавлено:
По поводу кодировки. Проверил сейчас ещё раз при помощи «Display ieHTTPHeaders». Мой сервер выдаёт мне странички с уже прописанным Content-Type: text/html; charset=UTF-8 в заголовках. Поэтому то я в мета тегах Content-Type и не пишу, это неправильно, раз сервер уже Content-Type в загаловках прописал. Так меня учили, по крайне мере.  
Вопрос.  
Значит ли это, что Content-Type уже чётко определён, и браузер на UTF-7 не переключится?

Всего записей: 925 | Зарегистр. 28-07-2007 | Отправлено: 21:17 04-07-2009 | Исправлено: israel_rider, 21:26 04-07-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
israel_rider

Цитата:
Значит ли это, что Content-Type уже чётко определён, и браузер на UTF-7 не переключится?  

попробуйте - узнаете.  
не должен.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:28 04-07-2009
israel_rider

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
если, конечно, не разрешаете вставлять что то в head область страницы  
Ну нет. Уж туда я, слава богу, ни чего от пользователей не пихаю. Только мною определённые данные, динамические или статические.
 
Добавлено:
Так. Со всем этим пока какую то ясность обрёл. И душевный покой. Временно. Огромный сенкс.

Всего записей: 925 | Зарегистр. 28-07-2007 | Отправлено: 21:31 04-07-2009
israel_rider

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery, вчера мы с Вами говорили о том, что конструируя функцию проверки данных, введённых пользователем через HTML форму, неплохо было бы предусмотреть возможность автоматической проверки всего массива данных, в том случае, если этих данных так много, что непроизводительно было бы вручную вызывать функцию для каждого значения. С целью тренировки и совершенствования навыков программирования я написал такую функцию. Вот она:
Код:
 
include ("connect.php"); // Cначала, естественно, подключаемся к БД, поскольку нам придётся вызывать функцию mysql_real_escape_string() .  
function checking($arr) {  // Это и есть функция, которая проверяет данные, введённые пользователем, находящиеся в массиве $_POST
        foreach ($arr as $key => $value) {
            if (!is_numeric($value)) {                             // Если переменная - число, то экранировать её не нужно, если нет - экранируем
                $value = htmlspecialchars($value, ENT_QUOTES);
                $value = mysql_real_escape_string($value);
            }
            $kluchi[] = $key;
            $znacheniya[] = $value;
        }
        $result = array_combine($kluchi, $znacheniya);
        return $result;  
    }
    $checked = checking($_POST); //Вот теперь у нас уже есть массив с проверенными данными, которые можно помещать в таблицу БД, а     //так же выводить на страницах сайта.  
    print_r($checked); //Посмотрим на результаты нашего нелёгкого труда и затащимся
 
Вопрос. Не будет ли моя функция неоправданно расходовать ресурсы сервера. Или, иными словами, существует ли более простое и изящное решение?

Всего записей: 925 | Зарегистр. 28-07-2007 | Отправлено: 09:00 05-07-2009 | Исправлено: israel_rider, 19:19 01-08-2009
Ternik



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а если в $POST занести массив? Например:

Код:
 
<input name="s[1]"" value="0">
<input name="s[2]"" value="1">
 

 
 
Добавлено:
имхо, есть функции GPC, которые делают код боле быстрым. Ими и надо пользоваться.

Всего записей: 763 | Зарегистр. 25-09-2002 | Отправлено: 20:03 05-07-2009
israel_rider

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
а если в $POST занести массив? Например:  
Вообще ни чего не понял.  $_POST - это же и есть массив! В нём находятся данные, введённые пользователем через HTML форму, я об этом написал. Вот их то я и проверяю при помощи своей фукции.  
 
Добавлено:
Что такое "функции GPC" вообще ни разу не слышал. И в Гугле ни чего не нашёл.

Всего записей: 925 | Зарегистр. 28-07-2007 | Отправлено: 21:27 05-07-2009
Ternik



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Что такое "функции GPC" вообще ни разу не слышал. И в Гугле ни чего не нашёл.

GET POST COOKIE
 
Добавлено:

Цитата:
 $_POST - это же и есть массив!

а это массив массивов
 
Добавлено:
mass cookie
 
Добавлено:
подсекайте заросы к MySQL!

Всего записей: 763 | Зарегистр. 25-09-2002 | Отправлено: 03:35 12-07-2009
israel_rider

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ternik , пытался понять твои намёки..... GET POST COOKIE содержаться в массиве $_REQUEST . Стал смотреть про $_REQUEST , наткнулся на "Функции фильтрации данных", http://il2.php.net/manual/ru/book.filter.php. Всё это очень интересно конечно.... Может смогу вернуться к этому позже.... Сейчас нет ни сил не времени. Надо срочно к сайту Аякс прикручивать...

Всего записей: 925 | Зарегистр. 28-07-2007 | Отправлено: 07:50 12-07-2009
israel_rider

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery, на сайте клиента я обнаружил очень пугающий файл. Файл явно не с сайта. Как он появился в этой директории непонятно. Формат HTML, весит порядка 100КВ. Я его, естественно попробовал открыть в редакторе, но помоему, вся информация в нём зашифрована. Нельзя ли послать Вам этот файл, что бы Вы на него посмотрели?

Всего записей: 925 | Зарегистр. 28-07-2007 | Отправлено: 17:30 16-09-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
israel_rider

Цитата:
Нельзя ли послать Вам этот файл, что бы Вы на него посмотрели?

выкладываем на файлообменник и даем ссылку тут. и все личные вопросы в ПМ

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:29 16-09-2009
israel_rider

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Пипл. Вот такой вопрос. Сайт, с которым я работаю выполнен так, что в адресной строке не виден реальный путь к файлу. В корне лежит htaccess, в котором куча инструкций rewrite. На сайте я устанавливаю биллинговую страничку для оплаты через кредитки через процессинговую фирму. Связь осуществляется через https.
 
Поскольку протокол https, и поэтому все ссылки, связывающие страничку с сайтом должны быть абсолютные, страничку я делаю отдельно. Делать её как динамическую часть сайта проблематично. То есть она у меня будет как бы… полустатическая…, то есть работающая как бы отдельно от основного механизма сайта.
 
Вопрос. Если путь к файлам этой страничке будет виден в адресной строке, понижу ли я тем самым уровень безопасности сайта? Принципиально ли вообше, что бы в адресной строке не было видно реальных путей к реальным файлам и самих файлов, их названий? С точки зрения безопасности.

Всего записей: 925 | Зарегистр. 28-07-2007 | Отправлено: 01:36 30-09-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
israel_rider
откуда мы знаем что за файлы и какую роль играют?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:38 30-09-2009
israel_rider

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Я же написал, что за файлы. Файлы, через которые идёт биллинг на сайте по протоколу https. Оплата кредитными картами через процессинговый центр.

Всего записей: 925 | Зарегистр. 28-07-2007 | Отправлено: 01:42 30-09-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
israel_rider

Цитата:
Я же написал, что за файлы. Файлы, через которые идёт биллинг на сайте по протоколу https. Оплата кредитными картами через процессинговый центр

и что? вы их инклудите куда то? или прямо вызываете?  
если идет сначала проверка авторизации в них и нет дыры, то какая разница то, что вы в лоб обращаетесь, а что через rewrite?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:43 30-09-2009 | Исправлено: Cheery, 01:44 30-09-2009
israel_rider

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
вы их инклудите куда то? или прямо вызываете?  

Я их вызываю прямо. Путь в адресной строке - реальный.

Цитата:
если идет сначала проверка авторизации в них и нет дыры,  

Авторизация требуется только на заключительном этапе оплаты. Заказчик хочет, что бы биллинговую страницу видели и неавторизированные пользователи.
На счёт дыр.... Вводимые пользователями данные я проверяю функциями, написанными разработчиками СМS для этой цели. Достаточно ли тщательна ли эта проверка, судить не мне. На счёт других дыр.... Я думаю, дыры есть везде и всегда. Всё зависит от того , насколько сильно желание взломать сайт. А моя задача простая - сохранить уровень защищённости сайта, заданный разработчиками СМS, и не понизить его.  
Короче, то, что Вы, Cheery сказали, звучит стрёмно. Поэтому боюсь, что мне всё же придётся скрывать истинное расположение указанных файлов через инструкции rewrite.

Всего записей: 925 | Зарегистр. 28-07-2007 | Отправлено: 02:13 30-09-2009 | Исправлено: israel_rider, 02:16 30-09-2009
israel_rider

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
На сайте, над которым я сейчас работаю, определён базовый класс tep, в функции – конструкторе которой присутствует только одна строчка:

Код:
 
var $AllRequest;
function tep()
{
    $this->AllRequest    =    $_REQUEST;
}
 

И соответственно, все данные из массива $_REQUEST получают так:

Код:
 
$bar  =  $tep->AllRequest['foo'];
 

то есть…. напрямую. И подставляются они потом куда угодно, в том числе и в SQL запросы. То есть, сайт напоминает дом с открытыми дверями, заходи – не хочу. О чём думали разработчики сайта, непонятно.  
Что бы не перелопачивать весь сайт, пользуюсь тем, что существует базовый класс, и все обращения к $_REQUEST идут через него, я переписал его конструктор. В него я засунул функцию, проверяющую данные, найденную мной на другом сайте, над которым я работал.  
Получилось вот что:

Код:
 
var $AllRequest;
     
    function tep()
    {
            foreach($_REQUEST as $key => $val){
            if ((!isset($val)) || ($val == "")) $this->AllRequest[$key]    = "";
            else {
                $strValue = htmlspecialchars(strip_tags(trim($val),'<b><i><u><br>'));
                $arrWords = array("DROP", "TABLE", "JOIN", "SELECT", "INSERT", "UPDATE", "DELETE", "WHERE", "UNION", "FROM", "LIKE", "CONCAT", "LOAD_FILE", "BENCHMARK");
                foreach($arrWords as $idx=>$word){
                    $count = substr_count(strtoupper($strValue), $word);
                    $j=0;
                    for($i=0;$i<$count;$i++){
                        $found = stripos($strValue, $word, $j);
                        if ($found!==false){
                            //echo $found."-".substr($strValue, $found, strlen($word))."-".$j."<br>";
                            $strValue = substr($strValue, 0, $found+strlen($word))."&reg;". substr($strValue, $found+strlen($word));
                            $j = $found + strlen($word);
                        }
                    }
                }
                $strValue = str_replace("&reg;®", "&reg;", $strValue);
                $strValue = str_replace("'", "&#039;", $strValue);
                //if($p_param == 1) $strValue = ereg_replace("[^0-9]", "", round($strValue));
                $this->AllRequest[$key] = $strValue;  /**/
            }
        }
    }    
 

Сейчас я тестирую полученное. Пока вроде работает….
Вообще то странно… Почему разработчики этой функции позабыли про mysql_real_escape_string()? Ведь данные из $_REQUEST идут и в SQL запросы тоже…
Вобщем… вопрос то очевиден. Насколько надёжно это моё творение? Действительно ли оно закрывает дыры?
 
Добавлено:
И ещё вопрос. Не слишком ли тяжёлым получился код? Ведь что получается - проверяется весь массив $_REQUEST каждый раз, когда загружается страница.

Всего записей: 925 | Зарегистр. 28-07-2007 | Отправлено: 21:58 11-10-2009 | Исправлено: israel_rider, 22:06 11-10-2009
andead



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
israel_rider

Код:
function tep()  
    {  
            foreach($_REQUEST as $key => $val){  
                $this->AllRequest[$key] = mysql_real_escape_string($val);
            }  
        }  
    }    

не подходит?
 

Цитата:
И ещё вопрос. Не слишком ли тяжёлым получился код? Ведь что получается - проверяется весь массив $_REQUEST каждый раз, когда загружается страница.

вы же не сотни параметров передаёте, обычно один-два

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 22:38 11-10-2009
israel_rider

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
andead, я поясню свой вопрос. Фукцию, которую я привёл, я выдрал с СМS, которую писали супер проффессионалы, и продают её теперь не за одну сотню баксов...
И эти супер проффессионалы написали код с кучей проверок вместо использования всего двух извесных мне хрестоматийных функций - mysql_real_escape_string() и htmlspecialchars().  
Вот я и задаю вопрос более опытным профессионалам на форуме - почему? Чем они руководствовались? Что в их коде такого особенного? Это оправдано, то, что они понаворотили?

Всего записей: 925 | Зарегистр. 28-07-2007 | Отправлено: 22:47 11-10-2009
andead



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
может они писали этот код в эпоху php < 4.3.0)) имхо задавать такие вопросы без предоставления исходников всей cms не корректно. может где то в начале $_REQUEST обрабатывается должным образом

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 23:27 11-10-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10

Компьютерный форум Ru.Board » Интернет » Web-программирование » DEL


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru