LINUX.ORG.RU

Атаки переполнения буфера и их контрмеры!


0

0

Проблемы "переполнения буфера" всегда ассоциировались с уязвимостями в системе. В прошлом, многие брехи в системе появлялись именно из-за проблем "переполнения буфера". Эта документация рассказывает что такое "переполнение буфера", как оно может быть использовано и какие меры надо предпринять чтобы их избежать.

>>> Подробности

anonymous

Проверено: green

И добавить особо нечего :)

alman ★★★
()

А нефиг на си писать. Вот на паскале никакого переполнения не будет, там строки высокоуровневые, выдаст ошибку и все.

anonymous
()

Pascal - прибежище недопрограммистов, пойди удавись в сортире, сволочь!

anonymous
()
Ответ на: комментарий от anonymous

Кто тебе сказал такую чушь? Поди почитай стандарт, там написано что переполнение строки приведет к неопределенному результату.

green ★★★★★
()
Ответ на: комментарий от anonymous

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

anonymous
()

Но все-таки паскалевские строки лучше чем сишные!

anonymous
()

Одназначно, паскалевские строки лучше.

anonymous
()

Паскалевые строки не лучше т.к. ограничены 255
символами (1 байт длины).

anonymous
()

В новых паскалях huge strings размером до 4 гигабайт. ;)

anonymous
()

В Си нет типа строка, есть только массивы символов, а в Паскале есть тип строка, ясно что встроенный тип лучше, чем его отсутствие.

В С++ либе STL есть строки(класс), вот они куда лучше Паскалевских (по возможностям).

И самое главное - сравнивать 2 языка не стоит, идите куда-нибудь в другое место.

anonymous
()

А Джава вообще рулит, для тех кто не знал. И Джава приложения скоро будут использовать меньше памяти и работать также быстро как и С/С++ приложения благодаря технологии предложенная компанией Apple!

anonymous
()

Эт конечно интересно, но вот если бы нашелся человек, который бы перевел статейку на русский... :) Было бы вообще супер.

sdmitry
()

Да там в этой статейке ничего переводить не надо, достаточно примеры на си посмотреть - и все понятно.

anonymous
()

Поищите на void.ru, там об этом на русском.

anonymous
()

На лоре уже были ссылки и на более информативные туториалы по теме

cyberian
()

Все просто НЕ ПИШИТЕ В МАССИВ 20-ый ЭЛЕМЕНТ если там обявлено 10 и не вызывайте функции которые так работают и не давайте функциям такие результаты (Почему они не контролируют эту ситуацию автоматически для меня так и останется загадкой)

anonymous
()

Bounds Checking Patch for GCC in Gentoo ??

Вопрос а в Gentoo есть такой eubuild или самому делать ??

D_D
()

Атаки переполнения буфера и их контрмеры!

И никогда не пользуйтесь NULL-terminated strings! 90% сабжа происходят из-за них. Pascal-style strings = рулезз!

anonymous
()

> И никогда не пользуйтесь NULL-terminated strings! 90% сабжа происходят из-за > них. Pascal-style strings = рулезз! Ага. И никогда не ешьте огурцов! 100% программистов, в программах которых происходит переполнение буфера, ели огурцы! На самом деле всё просто - программы надо делать аккуратно и вдумчиво. Короче - голову надо использовать по назначению ;)

anonymous
()

эта просто пиздец. повылазили "знатоки". толи дети, толи ламера - хуй прассышь.

фанату явы: и там баги делают. определяющий фактор не язык, а девайс "мозги". на с++ пишутся очень даже прямые программы и утечки/переполнения/выход за пределы массива и прочая херь лечатся при наличии прямых рук

sg
()

Null-terminated - плохие строки. Из-за них (иногда) страдают ANSI-строки. А вообще - глупо ограничивать строку каким-то символом (в т.ч. и #0). 255 символов, конечно, маловато, но... Идея ставить длину строки в начало, а не в конец, хорошая.

FoodTechnologist
()

Классический пример для строки:

char s[40000+1];

int i;

s[0]='\000';

for (i = 0; i<40000; i++)

strcat(s, ' ');

Да, пример дебильный! Но сам факт налицо: большая часть времени здесь уходит на поиск конца строки. Получается алгоритм Шлемиеля :) (кто читал, тот знает, а кто не читал - www.joelonsoftware.com). Есть два варианта: 1) чтобы strcat возвращал ссылку на конец строки. но это не универсально. 2) Хранить длину строки, если угодно, в начале. Сразу видно преимущества.

Ну и третий, на закуску, хранить длину строки и максимальный размер строки. Получается элементарная структура: int, int, char[]. Заточить для работы с этим строковым типом можно любую строковую функцию из стандартной библиотеки. Но это не сделано.

Так что, паскалевские строки, безусловно, рулят.

Но вот C++ STL - извините, кушайте сами. Строка должна быть простым типом, а не пятиглавым монстром, который еще и не так легко скомпилять пом линухом и виндой одновременно. Сам для себя делаю маленький реализующий строку класс, со специальными, одному мне и только в этом проекте нужными функциями. Работы с тестами - на 1.5 часа.

Да и в Java есть проблемы, типа неизменности строки - хорошо конечно, но не всегда удобно, StringBuffer забывешь использовать. С другой стороны, за тебя весь мусор убирают, а если какой критичный участок, то можно и помучиться :)

Так что для меня (внимание --- имхо)

1) java.lang.String

2) Самописная C++

3) Паскалевская в дельфи

4) С char*

5) C++ STL

anonymous
()

А почему все решили, что переполнение буффера может произойти только в строке. Если у меня массив из int, он что переполниться не может?
Да вообще, сколько можно писать про переполнение буффера, уже столько написано.

rust
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.