Что такое безопасное программирование ?

Тема в разделе "WASM.ZEN", создана пользователем X-Shar, 17 фев 2018.

  1. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    1
    Регистрация:
    11 июн 2004
    Сообщения:
    3.020
    Адрес:
    Russia
    Indy_, RET,
    эт вы ребят говорите говорите, да не заговаривайтесь. Предупреждение обоим за оффтоп.
     
  2. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    3.527
    во многом всё тобой описанное есмь недостижимый идеал. к примеру, прописать кучу обработчиков ошибок == еть не просто муторно, еть может уронить производительность кода в Зеро. А при всём сём..

    1. сделать 100500ую защиту от дурака НЕВОЗМОЖНО.
    2. аки б ты тщательно не строфал свой код == он (твой код) подгружает бинарники/скрипты/вм-ки от третьих сторон, то бЫшь в твоей вариации разработки нужно ладить кучу чужого кода. И не надо говорить, мол-де ты токЪ проверенный используешь: житухи тебе не хватит на проверку всего и вся.
    3. имеют место быть косяки железок и от них опять
    НЕВОЗМОЖНО 100500ую защиту.
    4. проблемы лицух: в коде может использоваться проприетарный дравер/кодек/.. третьей стороны и си лицухи могут не просто ограничивать диапазон возможных решений, они ещё могут меняться в одностороннем порядке.
    5. магия опенсорца нам допомо}|{Э 777 :) увы и @}{, ни }{¥.. == нормальная дистра линя сейчас напичкана проприетарщиной, а труЪ линь можно себе поставить, если захотел порыдать :grin::sarcastic_hand::laugh1::crazy::hunter:

     
  3. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    3.527
    upload_2018-4-16_14-50-54.png
    в защиту РМН приведу забавный пример..
     
  4. im.

    im. Member

    Публикаций:
    0
    Регистрация:
    16 сен 2017
    Сообщения:
    130
    UbIvItS,
    И? OpenSSL хорошая разработка.
    Есть фанаты сверх-надежных решений, которые создали LibreSSL с более параноидальным подходом к безопасности в работе со строкам/памятью.
    Именно об этом я и веду речь.
    Я сам не использую OpenSSL и собрал билд Tor'а через LibreSSL, в своих проектах отдаю предпочтение MBEDTLS ранее известному как PolarSSL.
     
  5. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    3.527
    пример забавен ужо одним тем, что дырень была активна в районе 2х летов. а вот иЗЪЧ:crazy: примерр..
    и на аком основание ты делаешь свой выбор 777 Ты тестишь сам используемые либы на предмет дырявости иль просто сообществу доверяешь 7:)
    фанатизм и параноидальность есь несколько не те свойства, кои способны обеспечить безопасность/надёжность :) + помимо сих критериев имеются и прочие, идущие в разрез..

    1. производительность.
    2. энергозатратность.
    +++
    есть ещё, но пока особого смысла про них вспоминать нет.

    Короче говоря, я веду к тому, что рассказы про "безопасное программирование" сейчас во многом лукавы/теоретичны :grin:
     
  6. im.

    im. Member

    Публикаций:
    0
    Регистрация:
    16 сен 2017
    Сообщения:
    130
    UbIvItS, ты полную чушь пишешь. Даже объяснять тебе не буду. Уже ранее все сказано. Разгонять про Heartbleed это баянище и попса, в данном контексте ни о чем ни говорит. Если хочешь выделиться как-то, то имеешь право, но приведи конкретные примеры по коду со своими объяснениями. Надоели пустые разгоны, как тот же Meltdown, который на практике смешная нелепая чушь.
     
    Последнее редактирование: 25 апр 2018
  7. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    3.527
    ну, так и приведи пример кода, кой ты считаешь ИДЕАЛОМ :grin: прикол в том, что я встречал кучу разговоров, мол-де проги надо без ошибок писать и ваще. Токь вот я лично таких кодов в живую не встречал :)
     
  8. im.

    im. Member

    Публикаций:
    0
    Регистрация:
    16 сен 2017
    Сообщения:
    130
    Слушай. Как же ты бесишь. Зацитируй конкретно, где было сказано про "ИДЕАЛ" или балабол.
     
  9. im.

    im. Member

    Публикаций:
    0
    Регистрация:
    16 сен 2017
    Сообщения:
    130
    Здесь набор инструментов для работы со строками, от самых базовых, до безопасно-ориентированных. Это форк предыдущих наработок оформленных в более легком стиле, и здесь отсутствует централизация как в моем прошлом проекте. Централизация как boost, где все зависит друг от друга ошибочный подход, из собственного опыта.
    P.S. Могут быть ошибки, пока нет времени на развитие, это альфа.
     

    Вложения:

    • str.7z
      Размер файла:
      16,8 КБ
      Просмотров:
      25
  10. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    3.527
    глянул я и улыбнулся.. вот пример из твоего кода
    Код (Text):
    1. #include "../cfg.h"
    2. #include "../include/lib.h"
    3.  
    4. ///////////////////////////////////////////////////////////////////////////////////////////////////
    5.  
    6. #include "strcpy.h"
    7. #include "strcpy.hpp"
    8.  
    9. ///////////////////////////////////////////////////////////////////////////////////////////////////
    10.  
    11. size_t apilib::strcpy_a(char* dst, const char* src)
    12. {
    13.   return apilib::__strcpy_x<char>(dst, src);
    14. }
    а можь стоило акь-то так написать 777
    Код (Text):
    1.  
    2. size_t apilib::strcpy_a(char* dst, const char* src)
    3. {
    4. int lngth=strlen(src);
    5. char *buff=new char[lngth];
    6. if (buff == NULL){
    7.    printf("string is too long\n");
    8. return 0;
    9. }
    10. dst=buff;
    11.   return apilib::__strcpy_x<char>(dst, src);
    12. }
    акь видишь == тожь не идеал:blush2: но во всяком случае не будет переполнения буфера дажь на подлой сишечке:crazy: :):grin:
     
  11. im.

    im. Member

    Публикаций:
    0
    Регистрация:
    16 сен 2017
    Сообщения:
    130
    UbIvItS,
    strdup_a имеется, от переполнений есть процедурки с литерами 'l' и 'n' в постфиксе, например strlen_na, strcpy_la и пр.
    общий подход для 'l' процедур это возвращать размер сигнализирующий о переполнении, т.е. превышающий maxcnt, maxsize на входе, при этом переполнение избегается ессно.
     
  12. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    3.527
    любая функа копирования должна явно обрабатывать сю ситюЁвину.
     
  13. im.

    im. Member

    Публикаций:
    0
    Регистрация:
    16 сен 2017
    Сообщения:
    130
    UbIvItS, каждая процедура имеет свои обязательства, обычные strcpy нужны для работы со статическими размерами, там где абсолютно не требуется проверка на переполнение, таких ситуаций полно при форматировании текста и указывать размеры буфера там вообще ни к месту, работают эти процедуры быстрее. Для работы с данными получаемыми из вне, где возможно переполнение были придуманы процедуры с литерой 'n', их есть два варианта, те что копируют 'n' из source и те, что пишут 'n' в destination (и не более чем 'n'), позже для безопасного кодинга запилены процедуры с литерой 'l', которые в отличии от 'n' имеют обязательства о сигнализации нарушения в работе процедуры с сохранением контекста без сбоя, т.е. они говорят о наличии переполнения не разрушая ничего в работе. Отличие всех подходов в зоне ответственности и обязательствах, чем выше секурность, тем шире обязательства. Ничего тут не надо доказывать. Все программирование строится на базовых допущениях и уровнях абстракции. Ерундой можно заниматься до такой степени, что будешь в каждую strcpy пихать IsBadReadPtr и VirtualQuery для проверки аттрибутов участка памяти. В стандартных решениях, где нет проверки на NULL-указатели, там корректность входящих данных должна проверяться кодером, но так как это не всегда возможно сделать грамотно и по месту, то и возникают сбои, и вот поэтому ответственность перекладывается с плеч кодера на 'n' и 'l' решения, никакой магии, это УПРАВЛЕНИЕ, классическое УПРАВЛЕНИЕ.
     
  14. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    3.527
    то есть никому не придёт в голову устроить сим функам переполнение 777 :)
     
  15. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.385
    Адрес:
    г. Санкт-Петербург
    Вы про такое понятие, как "контракт" слышали? Мы делаем спецификацию функции, где явно указываем, что она не осуществляет проверок на переполнение, то есть возлагаем ответственность делать проверки на вызывающий код. Благодаря этому последовательность вызовов данной функции будет работать быстрее, так как проверки отсутствуют.
    Если разработчик баран и не следует контракту - то увы и ах.
     
  16. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    3.527
    тогда целевые пользователи такой софтины вполне могут закидать тапками столь забавную контору в судах. пока таких историй, конечно, мало, но не удивлюсь == ежель за такие инновации начнут сажать. :)
     
  17. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.385
    Адрес:
    г. Санкт-Петербург
    Вообще-то, это не инновации, а старо как мир. Каждая функция сопровождается документацией, что с ней можно делать, а что - нет. Если вас не устраивает отсутствие проверок - либо ищите другую либу, либо реализуйте дополнительную прослойку, которая будет эти проверки делать.
    Но помните о законе дырявых абстракций: http://russian.joelonsoftware.com/Articles/LeakyAbstractions.html
     
  18. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    3.527
    SadKo, в конце-то концов запуск кода с переполнением буфера в большинстве случаев стоит дороже..

    1. либо эксплойтик подогнали.
    2. включена в оси защита стека и куда подевается скорость небезопасной функи 7:)
    3. работа аверок опять сжирает весь выигрыш.
    +++
    единственный, пожалуй, вариант для подобных финтов есь буст в мат. моделях без доступа к ним всякой токсичной публики. Но и тамо оно весьма спорное :)
     
  19. im.

    im. Member

    Публикаций:
    0
    Регистрация:
    16 сен 2017
    Сообщения:
    130
    UbIvItS, какой ты эксплоит напишешь в статичных внутренних копированиях строк? Даже если будет переполнение, а у тебя нет доступа к нему, то что ты сделаешь?

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

    Проверки нужны там, где они нужны, а не там где теоретически можно пронести автомат в дверь, потому чторазмер двери это позволяет сделать.
     
  20. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    3.527
    акь минимум еть даёт возможность обрушить работу кода. Вообще, приведи пример, пожалуйста, такой статики :)