Основные положения по разработке ПО
Общие рекомендации по написанию устойчиво работающих алгоритмов
(необходимое, но не достаточное условие их информационной безопасности):
- не используйте экзотические и недокументированные возможности
языка программирования : Вы не уверены в том, как они реализуются
на самом деле
- оформляйте исходный текст ясно и четко, используйте необходимые
комментарии
- используйте скобки для явного указания порядка операций :
компилятор может оптимизировать выполнение выражений и начать,
скажем, сложение F(1)+F(2)+F(3) со второго знака "+", тем самым
вызвав сначала функцию F от 2, затем от 3, а только затем от 1
если в функции изменяются какие-либо глобальные переменные
это может привести к непредсказумым последствиям
- при всех удобных случаях используйте передачу параметров функции
в качестве аргументов, а не в глобальных переменных
- используйте структурное программирование : разбивайте сложные
блоки кода на процедуры с ясной структурой и легко контролируемым
набором параметров
- никогда не программируйте недокументированные возможнности :
технология "reverse engineering" дизассемблирование и обратная
компиляция" на сегодняшний день достигла огромных результатов,
особенно в отношении высокоуровневых языков программирования
- закрывайте файлы сразу же по окончании работы с ними, а если
Вы записываете важную информацию в течение долгого времени
периодически вызывайте функции сброса файлового буфера на дисковый
накопитель
- проверяйте свободное место на диске перед записью в файл :
некоторые операционные выдают ошибки при записи на переполненный
диск нестандартным образом, результат этого может быть плачевным
- блокируйте файлы и наборы данных, если Вы обращаетесь к ним
по записи из нескольких параллельно работающих процессов или программ
- старайтесь как можно сильнее сократить время записи в совместно
используемые файлы, а, следовательно, и время их блокирования
- не будьте заранее уверенными, что программа запущена из той
директории, где расположен ее исполнимый файл, одной из
первых команд после запуска программы явно смените каталог на
желаемый
- при работе с внешними и сетевыми устройствами и дисками стройте
циклы ожидания таким образом, чтобы из них был возможен выход
по истечении определенного периода ожидания ответа тайм-аута
- очень тщательно разрабатывайте схему синхронизации паралелльно
работающих с одними и теми же данными процессов
- тщательно проверяйте алгоритмы на синдром "мертвой петли"
это ситуация, когда процесс A, начав изменять объект 1 и заблокировав
его в связи с этим, ожидает снятия блокирования с объекта 2, в
то время как процесс B, в то же самое время начавший изменять
объект 2 и заблокировав его, ожидает снятия блокировки с объекта
1 подобная проблема при такой схеме синхронизации теоретически
неразрешима, единственный выход из нее рассматривать объекты
1 и 2 как единое целое с возможностью только совместной блокировки
- аккуратно выделяйте и очищайте объекты в динамической памяти
- при необходимости используйте криптографию
- никогда не передавайте пароль открытым текстом
- используйте криптостойкие алгоритмы шифрования и хеширования
- вычищайте блоки оперативной памяти после того как информация
(пароли, ключи, конфиденциальные данные), находившаяся в них,
стала ненужной
- всегда проверяйте длины строк и массивов перед началом работы
с ними
- встрайвайте в Ваши системы требование регистрации каждого оператора
с уникальным паролем и записью как можно большего количества информации
о сеансе в лог-файл, недоступный для изменения операторам
- тщательно тестируйте Ваши приложения, в том числе на больших
и неправильных входных данных
Назад | Содержание
| Вперед
|