Самьюэл Алекс
Шрифт:
Ситуация еще проще, если используется язык C++, где есть готовые строковые примитивы. В C++ ввод строки осуществляется так:
Буфер строки
Проблема переполнения буфера возникает при работе с любыми статическими массивами, а не только со строками. При написании безопасных программ следует тщательно проверять, не осуществляется ли запись в массив за его пределами.
10.6.2. Конкуренция доступа к каталогу /tmp
Другая распространенная проблема безопасности связана с созданием файлов с предсказуемыми именами, в основном в каталоге
В такой ситуации говорят о конкуренции. Она неявно существует между автором программы и хакером. Кто первым успеет создать временный файл, тот и победит.
Посредством этой атаки часто уничтожаются системные файлы. Создав нужную символическую ссылку, хакер может заставить программу, выполняющуюся с правами суперпользователя, затереть важный системный файл, например
Один из способов избежать такой атаки — создавать временные файлы со случайными именами. Например, можно прочитать из устройства
Другой подход заключается в вызове функции
В разделе 2.1.7, "Временные файлы", рассказывалось о применении функции
35
Монтирование данного каталога по сети — ошибка системного администратора.
Прием, который всегда работает, заключается в вызове функции
В листинге 10.5 представлена функция, которая пытается безопасно открыть файл в каталоге