За последние 24 часа нас посетили 30526 программистов и 1754 робота. Сейчас ищут 968 программистов ...

Безопасное программирование...

Тема в разделе "Прочее", создана пользователем Elkaz, 17 мар 2008.

  1. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Сегодня зашел на freelance-сайт. Было задание, перенести сайт c bbPress на IPB. Стало интересно, что это за зверь такой, bbPress...
    Вошел на сайт, где стоит этот форум (исходников еще не качал).
    Насторожило, что когда нажал на "Зарегестрироваться" в строке браузера появилось:
    Ага. Добавил в user значение Admin - принял, отобразил в качестве value для текстового поля. Идем дальше.
    Далее ввел в качестве имя такого зверя
    HTML:
    1.  
    2. " onmouseover = "alert('Hi');"
    3.  
    Самое удивительное - он его принял. Теперь при наводе на поле мне вылезает окошко с алертом :)
    И еще вылезла ошибка:
    Т.е что мы идеем:
    а) XSS (межсайтовый скриптинг)
    б) SQL-инъекцию
    И это только через 40 секунд просмотра...
    Еще я узнал название таблицы и поле логина.

    Вроде бы разработкой занималась достаточно раскрученная команда - WordPress. А оказалось решето... Разочарован.
    Ощущение, что разработкой занимались люди, абсолютно не знающие основы веб-безопасности...
     
  2. Clone

    Clone Guest

    Как ни странно, некоторые популярные проекты на самом деле решето... Например, PHP-Nuke... Хотя вроде и живут уже достаточно времени, но дыры латаются абы как...
     
  3. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Clone
    Сейчас, если не ошибаюсь, PHP-Nuke не так популярен. На постсоветском пространстве наиболее распространены DLE (нуленная :D), Drupal, Joomla, самописные.
    А в качестве движка блога каждый 3-ий использует WordPress... )
     
  4. Anonymous

    Anonymous Guest

    Меня прикалывает, что куча питонистов использует ненавидимый вордпресс, написанный на ненавистном пхп, что бы писать в блоге, какой питон хороший а пхп плохой )
     
  5. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Горбунов Олег
    +1))))))
     
  6. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Elkaz
    Тоже ковырялся там :). Даже ифреймы принимает на ура. Только не верится мне что так оно в самом движке. Скорее всего чудо-программисты "протюнинговали".
     
  7. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Чему вы удивляетесь ?
    Это жизнь, такие проекты всегда будут делать ламеры, так как чем больше денег есть на раскрутку тем меньше остаётся на программистов.
     
  8. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Установил исходный движок. Там всё тип топ.

    Владельцы наняли программиста из разряда "Начал изучать РНР. Прикольно". Дали задание ему добавить к стандартным несколько полей при регистрации. Тот, не мудрствуя лукаво, сделал как в примере в той книге, не копаясь в исходниках ББпреса и не используя его средства. Интересно, сколько запалатили ему.
     
  9. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Больше, чем нам. Ведь он - "программист, да еще и с таким большим проектом работает!" )))
     
  10. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    А сами как программируете?
    Просто у меня с давних времен привычка осталась - при получении данных, записывать их в отдельную переменную, потом работать только с ней. Напрямую с REQUEST никогда не работал :)
    А у вас есть какие-то наработки, которые вы используете всегда при разработке приложений? Имеется ввиду именно наработки, касаемые обработки данных, пришедших от пользователя :)

    З.ы
    И отключаете ли вы при релизе сайта дебаггинг? Т.е
    or die (mysql_error()) - присутствует или нет?
     
  11. Clone

    Clone Guest

    1. Фильтрация POST, GET переменных только при работе, то есть нафиг фильтровать POST, если с ним не работаешь. Значения POST тож не меняю, а выглядит это у меня вроде mysql_escape_string($_POST['name'])
    2. QuickForm, класс для работы с бд, сами всё фильтруют.
    3. Отключаю показ ошибок, а строк or die (mysql_error()) у меня и в помине нет. Они убираются сразу же после того, как проверено, что вызов запроса будет происходить корректно.
     
  12. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Clone
    А поля, где не должно быть html/js кода как обрабатываешь? :)))
    Дай глянуть что-нибудь из проектов :)
     
  13. Clone

    Clone Guest

    Раньше был специальный класс, который с бб-кодами и прочим работал, но перестал нравиться, так что в неторопливом поиске замены.
     
  14. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Я когда учился программировать, работал только с REQUEST, а точнее c extract() и регистр_глобалс вкл. - потому что движок к которому писал дополнения (сиречь, на нём учился) был так построен.

    Сейчас все GET фильтруются, все HTTP_* у SERVER фильтруются. Все данные заносятся только через POST на котором стоит чекер форм. А к базе я через DbSimple он в основном и фильтрует. Ну GET это GET, а POST это POST - никаких REQUEST (но ещё и потому что у меня на неймспейсы фетиш :)).

    Код (Text):
    1. or die (mysql_error())
    Подобного никогда, слава богу, не было. Все ошибки, данные дебага и т.д. собираются в кучку и выводяться только при желании и только Тем, Кто Знает Как Вывести.
     
  15. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    lexa
    Как в IPB? =) В строку браузера выводится debug=1? =)
    Под REQUEST я подразумевал любые данные от юзверя (cookie, post, get).

    :) Сейчас надеюсь с выключенными globals ;)
    Можно глянуть пример? :) Всегда интересно узнать что-то новое
     
  16. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Не, указывается в настройках и для групп пользователей с абсолютными правами.

    Я так и понял. Просто охватить весь список суперглобальных лениво. :) Session туда же.

    Фетишировать на неймспейс нельзя, когда $var это и $_POST['var'], и $_GET['var'], и т.д. :)

    Я потом сюда выложу линк (в "Решения, алгоритмы"). Пока неудобно как-то. Хочется доделать движок и сайтов на нём поклепать. В движке есть Идея, ради которой всё и затевалось, но как на практике будет работать и будет ли - вопрос. Нужно самому увериться, Эго простимулировать. :)
     
  17. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    +1 ;)

    Редко когда возникают ситуации, когда один и тот же ключ находится в POST и GET :) вообще стараюсь везде префиксы указывать
    register_name
    register_email
    ...
    login_name
    login_password
    :) Так удобнее.

    lexa
    :) Движком поделишься?)))))) Поковыряться)