Lỗ hổng tràn số nguyên và biện pháp phòng ngừa
Tràn số nguyên là một lỗ hổng lập trình phổ biến, có thể xảy ra trong hầu hết các ngôn ngữ lập trình. Khi kết quả tính toán vượt quá phạm vi biểu diễn của kiểu số nguyên, sẽ xảy ra tràn. Ví dụ, phạm vi của số nguyên không dấu 32 bit (uint32) là từ 0 đến 4,294,967,295. Nếu cộng 1 vào 4,294,967,295, kết quả sẽ "tràn" và trở thành 0.
Sự tràn này có thể dẫn đến lỗi chương trình nghiêm trọng, đặc biệt là trong việc xử lý dữ liệu tài chính. Ví dụ, nếu giá cổ phiếu được biểu diễn bằng số nguyên 32 bit, khi giá vượt quá giá trị tối đa, nó có thể bị đọc sai thành 0, điều này rõ ràng sẽ gây ra sự hỗn loạn lớn.
Tràn số nguyên được chia thành hai trường hợp: tràn lên và tràn xuống.
- Tràn: Kết quả vượt quá giá trị tối đa, như uint32 của 0xFFFFFFFF + 1 = 0x00000000
- Giảm dưới: kết quả nhỏ hơn giá trị tối thiểu, như