1 | |
Как вы защищаете свои приложения от переполнения буфера?10.07.2015, 22:27. Показов 2562. Ответов 15
Метки нет (Все метки)
0
|
10.07.2015, 22:27 | |
Ответы с готовыми решениями:
15
Как вы защищаете свои сайты ASP.NET MVC от DDoS? Ошибка переполнения буфера Заблокировано защитой от переполнения буфера Избавиться от переполнения буфера (asm) |
Ушел с форума
|
|
11.07.2015, 10:31 | 3 |
XRoy, ты хочешь сказать, что в .NET-языках невозможно
(без unsafe-кода) вылезти за пределы буфера, намеренно или случайно ? Чет как-то не верится...
1
|
Ушел с форума
|
|
11.07.2015, 11:00 | 5 |
Да не, я не об этом.
Вот представь, что есть некий буфер, в левой части которого хранится, к примеру, строка подключения к базе данных, а в правой - пароль. И из-за некорректной обработки строки подключения может произойти выход за пределы левой части, т.е. пароль будет перезаписан или, наоборот, выставлен на всеобщее обозрение. Конечно, получить классическое переполнение буфера с перезаписью адреса возврата в стеке через такую уязвимость не получится, если только нет бага в реализации самой виртуальной машины, как ты написал. Ну короче, я хотел сказать, что между понятиями "маловероятно, практически нереализуемо" или "невозможно в принципе" все-таки есть определенная граница.
0
|
Администратор
|
||||||
11.07.2015, 17:21 | 8 | |||||
Как я понимаю, речь про AccessViolationException? А оно разве перехватываемо?
Сейчас попробуем... Добавлено через 17 минут Про небезопасный код уже было оговорено, но пока других идей не пришло. Для удобства, чиркнул на C++/CLI
Есть идеи, как создать AccessViolationException из безопасного кода?
1
|
17689 / 12874 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
11.07.2015, 17:24 | 9 |
Смотря что вы подразумеваете под буфером.
Если буфер — это массив данных, который логически разбит на несколько частей, как в вашем примере со строкой подключения и паролем, то рантайм, разумеется, ничего не знает об использовании этого массива и позволит вам менять его по своему желанию, перезаписывая в нем что угодно и как угодно. Но вот выйти за пределы самого массива рантайм вам уже не позволит — при попытке вылетит исключение. Добавлено через 1 минуту Комбинация классов GCHandle, Marshal и Random
2
|
Администратор
|
|||||||||||
11.07.2015, 17:39 | 10 | ||||||||||
Поймал, все до единой!
0
|
11.07.2015, 23:24 | 12 |
Нет, не нужно. В .NET автоматическая проверка границ массива. Вам не удастся выйти за рамки массива без использования unsafe кода.
И в целом: .NET относится к платформам с управляемой памятью. Это значит что среда исполнения самостоятельно занимается выделением памяти и всегда знает точный размер объектов, которые она хранит. Избегание побочных эффектов - одна из сильных сторон систем управляемой памяти. Собственно ради этого они и создавались. Поэтому переполнение буфера это последнее о чем вам нужно думать при разработке в .NET.
1
|
Администратор
|
||||||
12.07.2015, 10:39 | 14 | |||||
Обрабатывать IndexOutOfRangeException по всем участкам. Мне эта идея не особо нравится - слишком большой код в блоке try и с этим - трудности в отладке.
Можно предложить ещё идею - класс-обёртка над массивом - этакая "молчаливая коллекция", которая будет молча съедать неверные индексы, не генерируя исключения, а просто выставляя флаг ошибки. Накидал на скорую руку - ООП-подобие errno из Си.
1
|
Администратор
|
|
12.07.2015, 18:57 | 16 |
Alex9, ещё более производительное? Этот метод должен работать быстрее обработки исключений (если их будет достаточно много).
Других идей пока нет, можно этот код как-нибудь оптимизировать. Можно массив заменить неуправляемым (stackalloc, например), но про обобщения тогда придётся позабыть, да и будет ли работать намного быстрее?
1
|
12.07.2015, 18:57 | |
12.07.2015, 18:57 | |
Помогаю со студенческими работами здесь
16
Отлов исключения переполнения буфера Завершение программы из-за переполнения буфера WebBrowser Динамическое обнаружение ошибки переполнения буфера Простой эксплоит переполнения буфера не работает( Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |