Lỗi tràn bộ đệm là một điều kiện bất thường khi một tiến trình lưu dữ liệu vượt ra ngoài biên của một bộ nhớ đệm có chiều dài cố định. Kết quả là dữ liệu đó sẽ đè lên các vị trí bộ nhớ liền kề. | Lỗi tràn bộ đệm Trong các lĩnh vực an ninh máy tính và lập trình một lỗi tràn bộ nhớ đệm hay gọi tắt là lỗi tràn bộ đệm là một lỗi lập trình có thể gây ra một ngoại lệ truy nhập bộ nhớ máy tính và chương trình bị kết thúc hoặc khi người dùng có ý phá hoại họ có thể lợi dụng lỗi này để phá vỡ an ninh hệ thống. Lỗi tràn bộ đệm là một điều kiện bất thường khi một tiến trình lưu dữ liệu vượt ra ngoài biên của một bộ nhớ đệm có chiều dài cố định. Kết quả là dữ liệu đó sẽ đè lên các vị trí bộ nhớ liền kề. Dữ liệu bị ghi đè có thể bao gồm các bộ nhớ đệm khác các biến và dữ liệu điều khiển luồng chạy của chương trình program flow control . Các lỗi tràn bộ đệm có thể làm cho một tiến trình đổ vỡ hoặc cho ra các kết quả sai. Các lỗi này có thể được kích hoạt bởi các dữ liệu vào được thiết kế đặc biệt để thực thi các đoạn mã phá hoại hoặc để làm cho chương trình hoạt động một cách không như mong đợi. Bằng cách đó các lỗi tràn bộ đệm gây ra nhiều lỗ hổng bảo mật vulnerability đối với phần mềm và tạo cơ sở cho nhiều thủ thuật khai thác exploit . Việc kiểm tra biên bounds checking đầy đủ bởi lập trình viên hoặc trình biên dịch có thể ngăn chặn các lỗi tràn bộ đệm. Mô tả kỹ thuật Một lỗi tràn bộ nhớ đệm xảy ra khi dữ liệu được viết vào một bộ nhớ đệm mà do không kiểm tra biên đầy đủ nên đã ghi đè lên vùng bộ nhớ liền kề và làm hỏng các giá trị dữ liệu tại các địa chỉ bộ nhớ kề với vùng bộ nhớ đệm đó. Hiện tượng này hay xảy ra nhất khi sao chép một xâu ký tự từ một bộ nhớ đệm này sang một vùng bộ nhớ đệm khác. Ví dụ cơ bản Trong ví dụ sau một chương trình đã định nghĩa hai phần tử dữ liệu kề nhau trong bộ nhớ A là một bộ nhớ đệm xâu ký tự dài 8 bytes và B là một số nguyên kích thước 2 byte. Ban đầu A chỉ chứa toàn các byte giá trị 0 còn B chứa giá trị 3. Các ký tự có kích thước 1 byte. hình 1 Bây giờ chương trình ghi một xâu ký tự excessive vào bộ đệm A theo sau là một byte 0 để đánh dấu kết thúc xâu. Vì không kiểm tra độ dài xâu nên xâu ký tự mới đã đè lên giá trị của B Hình 2 .