Взлом сайта через POST или GET

darksmoke

Новичок
Взлом сайта через POST или GET

Я совсем новичек в РНР. Пишу для себя проект, хочу убедиться смогу ли я его довести до конца, Библиотеку книг. Вот пишу себе ее, и тут ко мне друг пришел и говорит, что с Постом и гетом можно передать символы и взломать весь твой сайт?
Есть кто что знает про это, расскажите, дайте линк плз или не большие примеры кода.
Спасибо.
 

igortik

Новичок
Взять для себя за правило - обрабатывать любую переменную, которая приходит "извне"!

Т.е., ты привык писать $var = $_POST['var'] или $var = $_GET['var'] в зависимости от метода, а надо так:
$var = mysql_real_escape_string($_POST['var']);
$var = mysql_real_escape_string($_GET['var']);

Также не помешает приводить те переменные, в которых ты уверен, что они отдают скрипту какое-либо число - к числовому типу:
$var = (int) mysql_real_escape_string($_GET['var']);

Ну это делать конечно на сайте, не вижу смысла делать это в закрытой админ-панели.

P.S. перед тем, как отправить запрос в базу необходимо сделать вышеперечисленное...
$text = mysql_real_escape_string($_POST['text']);
$query = "INSERT INTO `table` (`text`) VALUES ('$text')";

///
$text = mysql_real_escape_string($_POST['text']);
$id = (int) mysql_real_escape_string($_POST['id']);
$query = "UPDATE `table` SET `text`= '$text' WHERE `id`='$id'";

Ну это тебе понадобится, если ты даешь возможность людям у себя на сайте что-то менять, к примеру, оставлять комментарии.

И вдогонку: ini_set('display_errors',0); в начале скрипта.
Это отключит оповещение об ошибках, которые несомненно будут, что поможет избежать показа разным зевакам того, что видеть им не стоит.

Ну и выбрать хостинг, или попросить своего провайдера, чтобы ошибки писались только в логи, тогда ini_set('display_errors',0); не понадобится.

Успехов :)

-~{}~ 17.10.08 18:21:

p.s. и это лишь начало :)
 

jonjonson

Охренеть
igortik, убей себя апстену и прочти faq от Романа. Данные эскейпятся, только если помещаются в БД. привести к нужному типу нужно и сравнить с возможным вариантом.

Дисплей error 0 на продакшен сервере, а на девелопмент всё же правильней дисплейс (1). Смена значения - это дисциплина. Правда дмитрийголован(ов? был в Находке?) предпочитает логи мучить, но я не согласен. Во время дебага глаз должен видеть всё. Даже кривой вывод ошибок. А продакшен не имеет права создаваться тупым копированием файлов из репозитория.

И это не конец...
 

igortik

Новичок
jonjonson
Кто такой Роман ? :)

А я что по поводу данных написал?

<div>
P.S. перед тем, как отправить запрос в базу необходимо сделать вышеперечисленное...
Ну это тебе понадобится, если ты даешь возможность людям у себя на сайте что-то менять, к примеру, оставлять комментарии.
</div>

Это что.. скрытый div ?

- Дисплей error 0 на продакшен сервере, а на девелопмент всё же правильней дисплейс (1)

Да ты что :))))
 

jonjonson

Охренеть
igortik, Роман - это ваша нелюбовь и помощь в профессии. Ситуация указанная тобой тривиальна. Сохраняй то что дали или фильтруй (strip_tags). Если сохранил что было, то выводи обезопасив (htmlspecialchars)... Смотри faq.

И на счёт "да ты что"... Это ты - что. Я - кто. :-P
 

igortik

Новичок
jonjonson
Ну конечно, ты самый лучший :)

darksmoke
Я сильно погорячился, экранировать нужно ВСЕ, что идет в базу! С твоей панели управления также!

Слушай джонсона, он тебе сейчас запудрит голову продакшнами, девелопментами и дисциплиной :)

Джонсон, для каждого дисциплина своя.. кому нравится писать else { а кому
else
{
а может кому-то
else
[TAB] {
а кто-то использует свич
 

jonjonson

Охренеть
igortik, кто то говнокод штабелями кладёт кругом из-за не понимания механизма, а кто-то пять строчек пишет, сводит к двум и понимает, что всё осталось под контролем. Хорошо что у работы с файлами нет функций эскейпа. а то целое дерево разных эскейпов отписали с перепугу.

Насчёт самого лучшего. Он тот кто не боится ошибок и их исправляет, а не язвит и строит отмазки.
 

jonjonson

Охренеть
igortik, табы тоже говнокод. Только пробел везде отображается как задумал автор. Эстеты аля дольче и габана идут тусить в мэнеджеры по продажам.
 

dimagolov

Новичок
jonjonson, я так понял ты меня вспомнил :) В Находке я не был и фамилию ты не угодал пока :)

По теме: phpfaq.ru уже работает, там есть статьи и про SQL Ingection и про безопастность скриптов в целом. Тексты там писались и вылизывались профессионалами в web-программировании и на форуме лучше чем там не напишут.

Прежде чем слушать каких-то советчиков, которые советуют иначе, чем на phpfaq.ru ты должен сам понимать в чем разица и какие проблемы иное решение устранит. Но 99.999999% что такого не произойдет, так как повторюсь, там очень грамотно написано и добавить реально нечего.
 

darksmoke

Новичок
igortik
Спасибо

а про взлом через ГЕТ? Там типо дописываешь что то в конце и все готово.

-~{}~ 18.10.08 00:47:

И еще сразу вопросик. Прочел про функцию mysql_real_escape_string она экранирует. А что она будет делать с сиволами: ?, ;, : точкой и запятой?
 

gray07

Новичок
Автор оригинала: darksmoke
а про взлом через ГЕТ? Там типо дописываешь что то в конце и все готово.
А ты разве не слышал про чит-код к интернету? Дописываешь его в конец, и все
 

Активист

Активист
Команда форума
Что не хочешь отравиться хлоркой в воде тебе нужно быть уверенным, что ты ее пропустили через механический/химический фильтр.

Так же и с данными в PHP.

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

1. SQL Injection (о нем тебе немного написали), это интекция в SQL, решается через mysql_real_escape_string (при условии, что magic_qutes_gpc выключен, в противном члучае нужно еще stripslashes сделать)

Если тебе нужен только текст, добавляешь обрабатываешь striptags или htmlspecialchars, если HTML разрешен - не отрабатываешь эти функции (адмика CMS) или через striptags удаляешь ненужные теги (при услувии если разрешен какой-нибудь тег (ограниченная админка).

2. File Including
Если в данных (get, post, cookies) ты передаешь имя файла, оно должно быть обработано соотвественно (basename). Ты не должен передвать в этих данных пути полностью, а лишь basename, пути до файла должны храниться в переменных/константах скрипта.

3. Email Header Injection (очень распространенная и забываемая ошибка на начальных уровнях)
Позволяет злоумышленникам использовать формы обратной связи и т.п. в качестве open relay's серверов для отправки спама.

Проблема заключается в том, что начинающие коддеры не знают, что при иньекции в заголовки (например subject, from) возможно отправка писем на другие адреса. Любые заголовки писем не должны содержать переносов строк и все должны обрабатываться жесткими фильтрами (для начала можно использовать конструкцию striptags(nl2br($_POST['from']))

Есть еще подмена заголовков, кривой eval, дибильные xss.

Запомни:
Что не хочешь отравиться хлоркой в воде тебе нужно быть уверенным, что ты ее пропустили через механический/химический фильтр.

И вот тебе на размышление ссылка:
http://www.google.ru/search?q=PHP+input+filter+class&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:eek:fficial&client=firefox-a

-~{}~ 18.10.08 07:03:

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

> а про взлом через ГЕТ? Там типо дописываешь что то в конце и все
>готово.

Не надо задавать тут таких вопросов. $_GET, $_POST, $_REQUEST, $_COOKIE = это методы передачи данных. Данные там все одни - mixed, обрабатывать нужно все.
 
Сверху