[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Несколько вопросов по безопаности
guttenberg
Здравствуйте. Недавно начал изучать PHP (к сожалению - по урокам Попова). Заинтересовался вопросами безопаности - пришлось забыть о Попове. Откуда теоритечески могут исходить угрозы я уже примерно понял - перелистал кучу форумов, полез в книжки. Но масса практических и непонятных вопросов(((

Например, как можно обработать такой запрос (идет до доктайпа)

$result = mysql_query ("SELECT * FROM settings WHERE page='index'",$db);

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

$result = mysql_query ("SELECT * FROM settings WHERE page='".mysql_real_escape_string(index)"'",$db);

Syntax error выводит

И есть ли необходимость обрабатывать все запросы, к которым нет подключения извне?
И еще: в конце запроса Попов рекомендует ставить индификатор $db, понятно зачем он нужен, но не перечеркивает ли это все усилия защититься, не может ли после него быть прописан посторонний код?


И по INCLUDE - блоки сайта (футер, меню хедер и т.д.) я подключаю вот так вот:

$topmenu = 'blocks/topmenu.php';


опасно ли это?


Спасибо.





Спустя 9 минут, 28 секунд (15.09.2011 - 23:57) inpost написал(а):
$db не нужен, если работаешь с 1 БД, что ты будешь делать в 99% случаев.

Уязвимость появляется там, где человек может вставить свои данные, допустим через адресную строку, то применять надо для $_GET.

mysql_real_escape_string(index) - это такое index ? если переменная, то где знак переменной? я уверен, что это не константа. Строки надо брать в кавычки, отсюда и СИНТАКСИЧЕСКАЯ ОШИБКА, перевод на англ: "Syntax error".

Человек передаёт данные скрипту только через $_POST, $_GET, $_COOKIE, так вот, эти данные и надо обрабатывать на (int) - число, и на mysql_real_escape_string - текст.

Спустя 41 минута, 3 секунды (16.09.2011 - 00:38) guttenberg написал(а):
Спасибо, inpost.

page - это строка в БД из которой я вытягиваю данные для статичных страниц сайта - в данном примере для странице index. Ну так по урокам Попова. Может ли тут натворить бед хакер? Или я уже перестраховываюсь, леплю проверки куда попало и что-то делаю неправильно?

Я понял и пока вынес для себя,

1) что надо просталять int или intval перед передачей числового значения методом GET - чтобы не могли прописать сторонний код в адресную строку (у меня передаются только числа)

2) в файле .htacces надо выключить php_flag register_globals

3) и обрабатывать данные при вводе в базу функцией htmlspecialchars и stripslashes

А при выводе из базы в браузер надо ли что-то с этими данными делать? или просто пишем: echo $myrow['text'];

И, подскажите, пжл, что по include, если я ей подключаю блоки сайта. Опасно или нет?

Спустя 15 минут, 24 секунды (16.09.2011 - 00:53) inpost написал(а):
guttenberg
include - нет, если в начале будет проверка на невозможность подключить файл из-вне основного файла. Более подробно: irbis-team.com .
htmlspecialchars - только при выводе из БД, а не при вводе. При вводе в БД я уже сказал, что использовать стоит.

Спустя 3 часа, 6 минут, 15 секунд (16.09.2011 - 04:00) guttenberg написал(а):
блин, теперь пишет вот это

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''data' WHERE 'id'=1' at line 1

вернул все назад - все равно ругается

Спустя 21 минута, 31 секунда (16.09.2011 - 04:21) inpost написал(а):
ну так покажи этот запрос. Ты не так кавычки расставил.

Спустя 46 секунд (16.09.2011 - 04:22) Invis1ble написал(а):
guttenberg
Цитата
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''data' WHERE 'id'=1' at line 1

так ты запрос тоже показывай, а не только текст ошибки, чай не экстрасенсы.

Спустя 12 часов, 2 секунды (16.09.2011 - 16:22) guttenberg написал(а):
Угу. С кавычками натупил. Разобрался немного вроде. Спасибо за помощь и советы.

Блин, хорошо, что на форум залез - обидно было бы сайт только что сделанный угробить.

Только вот еще один вопрос: все-таки как посоветуете обработать такой запрос:

$result = mysql_query ("SELECT * FROM settings WHERE page='index'",$db);


Page - это строка в БД. В ней лежит информация для страниц index, news, view_cat ну и других. Информация - это я подразумеваю описание мета тегов, краткое описание самой страницы и прочее. И для каждой страницы я подставляю в page необходимое значение

И вот еще: если при выводе из БД, обрабатываю данные htmlspecialchars, то теряется вся разметка и стили. Почитал про эту функцию. Понял, что это она и должна делать. Так получается ей только комментарии пользователей к моим заметкам обрабатывать надо и поисковые запросы, чтобы не добавили лишний код?

А если я свои данные вывожу из БД? То как тогда?

Спасибо. Сорри за ламерские формулировки - еще сложно лаконично объяснять что я имею в виду.

Спустя 3 минуты, 33 секунды (16.09.2011 - 16:26) vital написал(а):
Цитата
$db не нужен, если работаешь с 1 БД, что ты будешь делать в 99% случаев.

Не правда. зависит от настроек. Есть такой вариант, когда линк на соединение с бд надо указывать всегда. ПРичем, даже для функции mysql_real_escape_string()

Спустя 2 часа, 36 минут, 29 секунд (16.09.2011 - 19:02) inpost написал(а):
vital
Приведи пример. Ни разу в жизни этого не надо было, + в доках сказано, что если работаешь с 1 БД, то он не нужен. Может ты что-то перепутал? smile.gif Может ты говоришь про mysqli ?

guttenberg
Зачем тебе его обрабатывать? В запрос ничего не попадает из-вне, значит и обработка не нужна.
htmlspecialchars - это защита от той информации при выводе, что ввёл человек из-вне, если ты сам добавляешь, то обрабатывать не надо, чтобы стили не ломать.

Для комментариев существуют bb-коды, как на нашем форуме для формы. В инете полным полно готовых примеров, так же конкурс у нас был в разделе "конкурсы" на бб-декодер. Как дополнение, он же есть на irbis-team.com , там очень хороший пример.
Вообщем, для обычных посетителей можно только бб-коды делать, то есть сначала переменную прогоняют через htmlspecialchars, а потом через замену таких тегов: [ b] на такие <b> , и получаешь ты область допустимых юзерам тегов. Для себя использую обычную форму без всяких бб-тегов, если это для админки, то лучший вариант предоставить сразу 2 редактора, один обычный, где все теги работают, второй с бб-тегами для обработки в дальнейшем.

Спустя 8 часов, 9 минут, 39 секунд (17.09.2011 - 03:12) guttenberg написал(а):
Спасибо, impost. Укладывается в голове потихоньку)))

Попробовал сделать вот так вот:

if (isset ($_POST['text'])) {$text = $_POST['text'];}

$text = stripslashes ($text);
$text = htmlspecialchars ($text);
$text = mysql_real_escape_string ($text);


А тут уже соединение с БД вроде такого

$result = mysql_query ("INSERT INTO commetnts (text) VALUES ('$text')",$db);

JS скрипт попробовал - не проходит. Может так быть или это неправильно?
Спасибо.

Спустя 20 минут, 4 секунды (17.09.2011 - 03:32) inpost написал(а):
1. Если у тебя есть $_POST['text'], то мы создаём $text, а если нет? Что тогда? ТОгда $text не существует, но второй строчкой ты пытаешься обработать несуществующую переменную, как же так? Ошибка, её ведь нет.
2. Выше я писал, что надо использовать для обработки. Разве там что-то говорилось про "stripslashes" ?
3. Говорю, что не стоит использовать линк на БД, а ты всё равно его используешь.
4. Имена ячеек, таблиц надо брать в обратные одинарные кавычки, вот так:
$result = mysql_query ("INSERT INTO `commetnts` (`text`) VALUES ('".$text."')");

Хотя я бы сделал так запрос:
$result = mysql_query("INSERT INTO `commetnts` SET 
`text` = '"
.mysql_real_escape_string($_POST['text'])."'
"
) or die(mysql_error());

5. Оформляй код [ php] тегами, они есть в ББ кодах сверху, под цветами, на второй полоске.

Хотя самого твоего вопроса я так и не понял.

Спустя 4 дня, 19 часов, 18 минут, 19 секунд (21.09.2011 - 22:50) guttenberg написал(а):
Спасибо, inpost за подсказки и помощь. Как формировать запросы и зачем там обратные кавычки - разобрался.

А как вы оцениваете такую проверку регулярными выражениями, которую предлагает Попов



if (!preg_match("|^[\d]+$|", $cat)) {
exit ("<p> Неверный формат запроса. Проверьте URL! </p>");
}



Не будет ничего плохого, если я буду использовать ее и параллельно обрабатывать переменные, передаваемые методом GET функцией (int) ? У меня все переменные - имеют числовое значение.

Спустя 6 минут, 33 секунды (21.09.2011 - 22:57) Invis1ble написал(а):
Цитата
Не будет ничего плохого, если я буду использовать ее и параллельно обрабатывать переменные, передаваемые методом GET функцией (int) ? У меня все переменные - имеют числовое значение.

будет лишняя нагрузка на сервер
если ты приводишь данные к типу int, то данная проверка нафиг не нужна
и еще: вместо этой ^^ хрени существует нативная функция is_numeric()

Спустя 4 минуты, 1 секунда (21.09.2011 - 23:01) inpost написал(а):
die, exit - нельзя такое видеть. Человеку необходимо выдавать либо 404, либо внутрь страницы писать, что такая страница отсутствует.

Я уверен, что у тебя в итоге выйдет белый экран с надписью... а где дизайн, стиль, шарм? smile.gif В гугле напиши: "Красивые 404", и полюбуйся, как правильно оформлять.

К тому же надо не думать о том, как правильно пользоваться регуляркой, а понимать её суть и использовать по назначению smile.gif Можно с регулярки отправлять человека на 404, но никак не то, что тут используется. К тому же там же в адресной строке не всегда ты будешь цифры хранить.

Если абсолютно проверять, то как сказал Инвиз, is_numeric, но это всё лишнее smile.gif

Спустя 1 час, 26 минут, 28 секунд (22.09.2011 - 00:27) guttenberg написал(а):
Эх... Думал хоть кусочек Попова оставить))) На память.

Inpost, Invis1ble - спасибо за помощь и понятные новичку разъяснения. Интересная штука этот PHP. Буду учить дальше - и от работы отвлекаешься, отдыхаешь и как хобби - отличная штука.

Спустя 8 часов, 44 минуты, 13 секунд (22.09.2011 - 09:11) Dagot написал(а):
А почему вообще программисты становятся хакерами?
Помоему разработкой можно больше заработать, чем хакерством. huh.gif

Спустя 16 минут, 29 секунд (22.09.2011 - 09:28) Invis1ble написал(а):
Хакерами становятся не все программисты. Многим это не светит, имхо. Хакер - это уровень мастерства.
Я думаю, ты имеешь ввиду крекеров. Но мне кажется, что вопрос не совсем по адресу. Я например затрудняюсь на него ответить.

Спустя 1 минута, 57 секунд (22.09.2011 - 09:30) twin написал(а):
Хакер - слово изначально не ругательное. Хакерами были высококлассные специалисты, которые искали тонкие места в ПО, делали патчи и предоставляли разработчикам. Звание "хакер" нужно было заслужить, это была элита.

Потом появилась школота, которая не признает кодекс чести и использует знания либо в корыстных, либо в хулиганских целях. И понятие "хакер" дискредетировали.

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

Ну и ЧСВ у школоты.

ПСТО зохвачен!!11адынадын. и так далее. Не от большого ума.

Спустя 19 минут, 30 секунд (22.09.2011 - 09:49) Michael написал(а):
Цитата (Dagot @ 22.09.2011 - 08:11)
А почему вообще программисты становятся хакерами?
Помоему разработкой можно больше заработать, чем хакерством. huh.gif

Это еще протест.
Разработкой ПО по определению как бы должны заниматься программисты, но на практике программистов из многих областей "уходят". Мол дорого платить программисту. И что разработка ПО должна быть доступна обычным пользователям путем работы во всяких конструкторах и т.д. В вебе это видно на примерах Джумлы, Друпал и т.д. Настраивая, накидывая как они говорят ПО или сайт, сами такие создатели о том что внутри творения творится вообще не понимают. Бывает даже fullhtml фильтр для комментариев включают. Чем больше программистов "уходят"(не сами, а их), тем больше желание похакерить.

Спустя 17 часов, 8 минут, 27 секунд (23.09.2011 - 02:58) guttenberg написал(а):
Поубивал все заморочки Попова с циклами do...while, извлечением array (заменил на assoc как советовал на своем сайте Twin) выкинул практически во всех местах цикл printf, заменил обычным print, отказался от HEREDOC - кое-где пришлось пошурипить мозгами, но в итоге - ВСЕ работает!!! И мне кажется, может я, конечно, уже просто придумываю - но даже на Денвере, где я тестирую сайт, что стало как-то шустрее. Нет этого колеса загрузки, который был около секунды с поповским кодом. Клацаешь - и мгновенно открывает ссылки.

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

Кто-то из новичков проходил курсы? Трудно там? Или разобраться можно?



Спустя 6 минут, 27 секунд guttenberg написал(а):
Хотя, надо признаться, что поначалу воспринял ваш форум и сайт twin'а в штыки))) Как же так? На хорошего Попова, который учит программировать и гонят какие-то .... huh.gif

Потом стало доходить, что к чему))) В общем, спасибо большое.

Спустя 48 минут, 21 секунда (23.09.2011 - 03:46) Dagot написал(а):
Цитата (guttenberg @ 23.09.2011 - 00:04)
Хотя, надо признаться, что поначалу воспринял ваш форум и сайт twin'а в штыки))) Как же так? На хорошего Попова, который учит программировать и гонят какие-то ....  huh.gif

Потом стало доходить, что к чему))) В общем, спасибо большое.

Я тоже, но однако только после, жирафиков и верблюдов твина, более менее осознано начал подходить вообще к пхп. А через 3 месяца решил зарегаться тут.



Спустя 6 минут, 13 секунд Dagot написал(а):
Цитата (twin @ 22.09.2011 - 06:30)
Хакер - слово изначально не ругательное. Хакерами были высококлассные специалисты, которые искали тонкие места в ПО, делали патчи и предоставляли разработчикам. Звание "хакер" нужно было заслужить, это была элита.

Потом появилась школота, которая не признает кодекс чести и использует знания либо в корыстных, либо в хулиганских целях. И понятие "хакер" дискредетировали.

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

Ну и ЧСВ у школоты.

ПСТО зохвачен!!11адынадын. и так далее. Не от большого ума.

Да и сейчас хорошие хаккеры помоему элита.
Допустим группа хаккеров Anonimous. Разве они не хозяева инета. Стоит только им захотеть и твой сайт рухнет. А школота это так... они побалуются пару месяцев, поймут что это все не так круто как показывают в кино и успокаиваются.

з.ы. Ой я не знал что тут, посты друг к другу не приклеиваются, если два подрят запостить. Так вроде нельзя делать да?

Спустя 47 минут, 1 секунда (23.09.2011 - 04:33) Invis1ble написал(а):
Dagot
Цитата
Ой я не знал что тут, посты друг к другу не приклеиваются, если два подрят запостить

Приклеиваются. Посмотри, как волшебным образом это произошло! smile.gif
На самом деле, да, лучше редактировать предыдущий пост. Склеивать могут модераторы, эксперты и админы.

Спустя 5 дней, 11 часов, 37 минут, 54 секунды (28.09.2011 - 16:11) andrey888 написал(а):
Топик "несколько вопросов по безопасности" думаю мой вопрос можно здесь же спросить . Есть панель администратора - соответсвенно имя и пароль чтоб в нее зайти . После правильно введенных данных заходим . Нахождение в админке обеспечивает существование
$_SESSION["test"]=2;
как пример . Проверка с существованием этой переменной находтся в файле att.php опять же как пример . Этот файл помещен в начало всех файлов с которых производится та или иная монипуляция со скриптом , чтоб удостовериться что оная существует .. Вопрос такой , есть файлы как например functions.php где расположен один php с функциями , то есть никаких монипуляция с этой страницы сделать "по идее" нельзя . Нужно ли там тоже размещять файл att.php ? если не размещать то можно без логина и пароля перейти на эту страницу , на ней конечно не будет ничего , но безопасно ли такое ?

Спустя 1 день, 19 часов, 24 минуты, 3 секунды (30.09.2011 - 11:35) Белый Тигр написал(а):
Любые проверки должны быть только там где они необходимы. То есть в данном случае подключать этот файл к файлу с функциями не стоит. Где есть ограничение доступа - размещайте проверку там, но не более того.
P.S. а подобные подключаемые файлы с функциями и прочими "кишками" лучше всего запихнуть в одну директорию, и закрыть её .htaccess`ом от внешних обращений. Здесь как с проверкой сессии - доступ должен быть разрешён только к тем частям сайта, к которым это необходимо.

Спустя 2 часа, 51 минута, 41 секунда (30.09.2011 - 14:27) andrey888 написал(а):
Thanks ..
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.