За последние 24 часа нас посетили 22769 программистов и 1154 робота. Сейчас ищут 598 программистов ...

Защита приложений, написанных на PHP

Тема в разделе "PHP для новичков", создана пользователем Psih, 13 окт 2008.

  1. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Нашел 2 статьи возможностях взлома PHP приложениях, они описывают баги и дырки в интерпритаторе и некоторых функциях. Читать всем, кто не читал это ещё. Новичкам must read (только не нужно изобретать монструозную защиту, она делается легко и парой небольших функций, а так же правильной настройкой как сервера, так и проектированием приложения)

    http://vingrad.ru/blogs/dominus/rokovyie-oshibki-php/
    http://vingrad.ru/blogs/dominus/rokovyi ... ki-php-v2/

    Добавляйте прочие статьи, только следите что бы не пересекалось.
    Дубли и бред буду удалять, дабы не захламлять. Так что не обижайтесь если ваше сообщение съест НЛО © Habrahabr
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    http://phpclub.ru/detail/
    «Вопросы безопасности»

    Статьи старые, но до сих пор актуальные
     
  3. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    register_globals off и mysql_escape_string основа основ безопасных приложений. Фильтрация хорошо, но экранировать лучше все данные, которые идут в базу.

    Ну и до кучи:
    http://php.net/basename если нужно подключить файл основываясь на внешних данных
    http://php.net/escapeshellcmd для данных идущих в консоль

    Соблюдение этих правил минимизирует возможность взлома приложения.
     
  4. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    а мне «php|architect's Guide to PHP Security» by Ilia Alshanetsky понравилась :)
     
  5. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    почитал сабжевые ссылки, ни одной "баги" у себя не увидел ввиду отсутствия всяких регистров_глобалс и прочей мути. еще пара статей банальной "мудрости".
     
  6. decoder

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

    С нами с:
    11 фев 2006
    Сообщения:
    469
    Симпатии:
    0
    Это в каком номере какого года?
     
  7. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Это отдельное издание. Книга.
     
  8. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    погугли, pdf найти свободно можно
     
  9. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    antonn
    а move_uploaded_file и copy_uploaded_file ?
    И прочие. Поверьте, через это взламываются сайты и довольно много. Сами ломали конкурентов и делали дефейсы именно через такие глюки :)
     
  10. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Psih
    move_uploaded_file использую. какие в нем баги, с учетом того, что url-имена отключены (как и удаленные инклуды), инклуды не делаются, меджики включены, регистр_глобалс отключен, все запросы проходят через прцоедурку, которая экранирует автоматически, а в htaccess не дается пхп выполнять код в папке, куда аплоадится?
     
  11. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Просто прочитай внимательно про null-byte. Он между прочим определяет конец строки, поетому вполне возможно, что проскочит. Проверь :)
     
  12. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Добавлю ещё, что все данные приходящие в регулярку извне должны обрабатываться функцией http://php.net/preg_quote
     
  13. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Там тоже может прокатить нуль-байт? Или я заблуждаюсь?
     
  14. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Kreker
    Поидее должна и это обработать, т.к. она безопастна для обработки данных в двоичной форме. Ну а если хочешь знать 100% - проверь! :)
     
  15. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    бл*, про serialize не знал...
     
  16. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    не повезло =))
     
  17. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Я знал, что глобалс - зло, но не подозревал, насколько злое это зло! :twisted:
    Про нулевой байт тоже стало новостью. А регулярки их разве не обрабатывают? о_0
     
  18. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Psih
    ты конкретно скажи где там подвох, дай конкретную ссылку. Потому что после заявлений "сами ломали конкурентов" я не отстану. Вот даже пример набросал. Некоторые настройки я выше перечислил.
    Код (Text):
    1. $attach=$_FILES['attach'];
    2. if ($attach['name'] != "" && is_uploaded_file($attach['tmp_name']) ) {
    3.  $attach['name']=stripslashes($attach['name']);
    4.   if (preg_match("/^[-0-9A-Z_]+$/i", $attach['name'])){
    5.      $attachname=md5($attach['name']);
    6.      move_uploaded_file($attach['tmp_name'], "./forum/attachments/".$attachname);
    7.  
    8.   }
    9. }
     
  19. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    А если просто не давать загружать файлы .php и т.д.? Ну, что-то типа
    PHP:
    1. <?php
    2. ... ...
    3. $file_ext = explode(".", $userfilename);
    4. $num_parts = count($file_ext);
    5. if($file_ext[($num_parts - 1)] == "jpg") {
    6.   # сохраняем
    7.  } else {
    8.   # так нельзя
    9.  }
    10. ... ...
    11. ?>
     
  20. kostyl

    kostyl Guest

    а еще плюс к этому всему рекомендуется читать раз в месяц журнал Хакер.ru, там очень много полезного, и эксплойты можно посмотреть какими вас будут атаковать...
     
  21. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    sobachnik
    Прикол с null byte именно в том, что он указывает на окончание строки, поетому то, что находится за null byte функции могут не увидеть, в итоге получится взломать вас :)
     
  22. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    а у меня трюк не прошёл кстати,
    не знаю, у меня регулярками расширение вырезается...
     
  23. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    То есть (применительно к моему примеру выше) что получится? Функция explode будет разбивать по точке переменную $userfilename до тех пор, пока не наткнётся на этот null byte? А дальше? Последнему элементу массива $file_ext будет присвоено всё, что осталось после null byte? Что там произойдёт-то?
     
  24. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    короче он напишет .jpgNULL-BITE.php
    у тебя загрузит как картинку, а на сервере получится что загрузился скрипт
     
  25. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Факт в том, что этим грешили move_uploaded_file, copy_uploaded_file. Как щас - незнаю. Мысль в том, что не известно, какие функции подвержены таким проблемам, тут нужно методом тыка проверять.