Уязвимость переполнения целого числа и ее защита
Переполнение целого числа — это распространенная уязвимость программирования, которая может возникнуть в большинстве языков программирования. Переполнение происходит, когда результат вычисления превышает диапазон представления целочисленного типа. Например, диапазон 32-битного беззнакового целого числа (uint32) составляет от 0 до 4,294,967,295. Если к 4,294,967,295 прибавить 1, результат "переполнится" и станет равным 0.
Такое переполнение может привести к серьезным ошибкам в программе, особенно при обработке финансовых данных. Например, если цена акций представлена 32-битным целым числом, когда цена превышает максимальное значение, она может быть ошибочно прочитана как 0, что, очевидно, приведет к огромному хаосу.
Целочисленное переполнение делится на два случая: переполнение сверху и переполнение снизу.
- Переполнение: результат превышает максимальное значение, например, uint32 0xFFFFFFFF + 1 = 0x00000000
- Низкое значение: результат меньше минимального значения, например,