Общие рекомендации по
написанию устойчиво работающих алгоритмов
(необходимое, но не достаточное условие их
информационной безопасности):

  • не используйте экзотические и
    недокументированные возможности языка
    программирования : Вы не уверены в том, как они
    реализуются на самом деле

  • оформляйте исходный текст ясно и
    четко, используйте необходимые комментарии

  • используйте скобки для явного
    указания порядка операций : компилятор может
    оптимизировать выполнение выражений и начать,
    скажем, сложение F(1)+F(2)+F(3) со второго знака
    "+", тем самым вызвав сначала функцию F от 2,
    затем от 3, а только затем от 1 если в функции
    изменяются какие-либо глобальные переменные это
    может привести к непредсказумым последствиям

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

  • используйте структурное
    программирование : разбивайте сложные блоки
    кода на процедуры с ясной структурой и легко
    контролируемым набором параметров

  • никогда не программируйте
    недокументированные возможнности :
    технология "reverse engineering"
    дизассемблирование и обратная компиляция"
    на сегодняшний день достигла огромных
    результатов, особенно в отношении
    высокоуровневых языков программирования

  • закрывайте файлы сразу же по
    окончании работы с ними, а если Вы записываете
    важную информацию в течение долгого времени
    периодически вызывайте функции сброса файлового
    буфера на дисковый накопитель

  • проверяйте свободное место на диске
    перед записью в файл : некоторые операционные
    выдают ошибки при записи на переполненный диск
    нестандартным образом, результат этого может
    быть плачевным

  • блокируйте файлы и наборы данных,
    если Вы обращаетесь к ним по записи из нескольких
    параллельно работающих процессов или программ

  • старайтесь как можно сильнее
    сократить время записи в совместно используемые
    файлы, а, следовательно, и время их блокирования

  • не будьте заранее уверенными, что
    программа запущена из той директории, где
    расположен ее исполнимый файл, одной из первых
    команд после запуска программы явно смените
    каталог на желаемый

  • при работе с внешними и сетевыми
    устройствами и дисками стройте циклы ожидания
    таким образом, чтобы из них был возможен выход по
    истечении определенного периода ожидания ответа
    тайм-аута

  • очень тщательно разрабатывайте схему
    синхронизации паралелльно работающих с одними и
    теми же данными процессов

  • тщательно проверяйте алгоритмы на
    синдром "мертвой петли" это ситуация,
    когда процесс A, начав изменять объект 1 и
    заблокировав его в связи с этим, ожидает снятия
    блокирования с объекта 2, в то время как процесс B,
    в то же самое время начавший изменять объект 2 и
    заблокировав его, ожидает снятия блокировки с
    объекта 1 подобная проблема при такой схеме
    синхронизации теоретически неразрешима,
    единственный выход из нее рассматривать
    объекты 1 и 2 как единое целое с возможностью
    только совместной блокировки

  • аккуратно выделяйте и очищайте
    объекты в динамической памяти

  • при необходимости используйте
    криптографию

  • никогда не передавайте пароль
    открытым текстом

  • используйте криптостойкие алгоритмы
    шифрования и хеширования

  • вычищайте блоки оперативной памяти
    после того как информация (пароли, ключи,
    конфиденциальные данные), находившаяся в них,
    стала ненужной

  • всегда проверяйте длины строк и
    массивов перед началом работы с ними

  • встрайвайте в Ваши системы
    требование регистрации каждого оператора с
    уникальным паролем и записью как можно большего
    количества информации о сеансе в лог-файл,
    недоступный для изменения операторам

  • тщательно тестируйте Ваши
    приложения, в том числе на больших и неправильных
    входных данных

 

Оставит комментарий