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

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

  1. sato

    sato Member

    Публикаций:
    0
    Регистрация:
    15 янв 2012
    Сообщения:
    244
    а можно ли как то проверить надёжность программы написанной на высоко уровневом языке программировании?
    например PHP HTML .
     
  2. X-Shar

    X-Shar Member

    Публикаций:
    0
    Регистрация:
    24 фев 2017
    Сообщения:
    114
    Что вы понимаете под надежностью ?

    Во первых HTML это не язык программирования, а язык разметки. Дебажить его можно при помощи разных браузеров.

    Если говорить про PHP, то есть различные инструменты для статического анализа, можно их загуглить, вот примеры:

    https://habr.com/post/248971/
    https://xakep.ru/2010/02/16/51166/

    Можно также проверять на уязвимости, не только PHP кода, но и сервера, например при помощи Netsparker.

    Также можно писать нагрузочные тесты.

    Хочу добавить, если говорить про тесты, есть неплохие фреймворки:

    1)Для С++:https://ru.wikipedia.org/wiki/Google_C++_Testing_Framework

    2)Для Си:https://habr.com/post/244835/
     
  3. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.258
    Адрес:
    Fryazino
    Надёжность трудно измерить и высчитать. Вот к приему надёжность SSD 100 лет, а гарантия 1 год!
    А у программ ещё хлеще. Не может у них функция сломаться как то делает электроника. Вот электроника она состоит из электрических элементов транзисторы, резисторы, катушки, конденсаторы и каждый этот элемент имеет срок службы и вероятность отказа. К примерупленочные конденсаторы расслаиваются с течением времени, маслянные конденсаторы высыхают. Катушка если она в моторе можете перетереться или перегреться и разорваться от тряски

    Вот вы скажете, но у программистов такого нет! И ошибётесь. Эту историю мне пересказывали ни раз и не два, причем даты разнились на пару десятков.
    Вот её пересказ от Самат Кудайбергенов на портале warhead.su. Он утверждает, что ни самая сильная армия в мире, ни штат программистов, ни новейшее вооружение не спасут от смерти, если в дело вмешаются математика и невнимательный кодер! Такая вот математическая оплошность в ЗРК Patriot привела к гибели пятой часть всех погибших американцев за всё время войны в Заливе.

    По другой версии эта история произошла на пару десятков раньше в 70-тых годах и с неё зародилась программная надёжность.
    Но до сих пор мы толком не умеем ни считать ни измерять надёжность.

    Одна из причин это детерминированность программ. Что предлагается?
    I. Статическое тестирование.
    Все мы компилировали программы и видели журнал компилятор он обычно ругается на ошибки, а так же даёт предупреждения. Вот это и есть статическое тестирование.
    Ворнингы как раз и предупреждают программиста о ошибках. Обычно такие анализаторы проверяют типичные ошибки, позволяя вспомнить, то о чем он забыл.
    Разные статические анализаторы работают по разному, можно выделить 3 разных. Встроенный в компилятор делает минимум проверок. Для расширенного анализа следует скачать PVS-Studio Analyzer или любой другой. А есть 3 вид анализаторов направленный на выявление уязвимостей.
    II. Фазинг - словно слово из фантастического фильма.
    На самом деле это очень большой труд по написанию тестов.
    Фазинг техника проверки кода, когда вы подбираете входные данные для тестов чтобы зайти во все ветки условий и циклов.
    Процитирую ГОСТ РВ 51719-2001
    - Тестирование это процесс проверки функционирования программ с использованием представленных входных данных или условий, для которых известны ожидаемые результаты.
    - Каждая ветвь программы должна быть опробована по крайней мере один раз.

    В основном фазинг делается вручную иногда автоматически. А что-бы облегчить себе жизнь применяют генераторы программ. Такие как protobuf. Считается что сгенерированный код вам тестировать не нужно, а это забота разработчика генератора.

    Для нативных ЯП автоматический фазинг сделать проще если программа выдала исключение или упала это свидетельствуют о ошибках в коде. Автоматический фазинг годится для проверки форматов файлов а так же протоколов но почти не годится для проверки бизнес логики. Тут уже придётся писать тесты вручную.
    ---------------------

    Покрытие кода тестами выявляет большинство ошибок. Что касается PHP, то тут проверка на пустые страницы, не активные кнопки.
    По нажимать кнопками можно автоматически через Accessibility вот парочка фреймворков .
    https://www.joecolantonio.com/2018/02/08/accessibility-testing-tools-automation/
    https://habr.com/company/infopulse/blog/253729/
     
    Mikl___ и Indy_ нравится это.
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.160
    sato,

    > а можно ли как то проверить надёжность программы написанной на высоко уровневом языке программировании?

    В общем случае нет. Атака происходит обычно на среду исполнения, это интерпретатор/вирт машина. Со сложной обвеской, ручные тесты не представляются возможными, это всё слишком толстое. По причине невозможности нормального тестирования это всё уязвимо к автоматике, так там баги и походу находят. В целом же уровень скриптов не соответствует тому, о котором можно говорить про безопасность и защиту.
     
    Mikl___ и sato нравится это.