Re: Совершенный код. Трудности перевода или неясная мысль?
От: Ignoramus  
Дата: 07.11.05 15:22
Оценка:
Здравствуйте, D1g174LM4n14c, Вы писали:

DLM>С. Макконнелл, книга "Совершенный Код".


DLM>Часть II, Глава 8 — Защитное программирование.

DLM>Раздел 8.3 — Способы обработки ошибок.

DLM>Описываеются варианты способов обработки ошибок, среди которых следующий:


DLM>"Вызвать процедуру или объект — обработчик ошибок"


DLM>

DLM>Другим подходом к централизованной обработке ошибок является создание глобальной специализированной процедуры или объекта. Преимущество его в том, что контроль над обработкой ошибок сосредоточен в одном месте, что облегчает отладку.

DLM>...

DLM>Этот подход может очень серьезно повлиять на безопасность. Если в программе возникнет переполнение буфера, злоумышленник сможет узнать адрес метода (объекта)-обработчика. Таким образом, при переполнении буфера во время работы приложения использовать этот способ небезопасно.


DLM>Я выделил жирным шрифтом тот момент, который остался для меня неясным. Хотя я знаю, что такое переполнение буфера и как это работает, — я не понял что имел ввиду автор. Во-первых, каким образом при переполнении можно узнать адрес обработчика (в общем случае),


Наверное имеется в виду, что злоумышленник может намеренно вызвать какое-нибудь исключение, к примеру — переполнение буфера и наблюдая поведение программы (очевидно, в дизассемблере ), получить относительный адрес обработчика этого исключения. И поскольку этот обработчик в данном случае единственный, то достаточно его перезаписать своим кодом и вуаля — можно делать (теоретически) с программой все что хочешь. Я эту фразу так понял, хотя не совсем представляю как сделать описанное на практике .

DLM>а во-вторых, чем это может быть опасно?

По-моему относительно недавно была обнаружена дыра в безопасности Internet Explorer кажется как раз на переполнении буфера основанная...

DLM>Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.