Lỗi tràn bộ đệm là khi bộ nhớ bị ghi đè nhiều lần trên ngăn xếp (stack). Thông thường nó xảy ra người dùng gởi một lượng lớn dữ liệu đến server ứng dụng và sau đó tiêm độc hại tấn công vào lượng lớn dữ liệu này. Khi gởi một lượng lớn dữ liệu thì có một số vấn đề bắt đầu nảy sinh. Vì vậy các dữ liệu đầu vào nên được validate (xác nhận) một cách kỹ lưỡng. Nó cần được làm sạch và cần được xác minh (verified) trước khi lưu lại.
Ví dụ: Bạn thử copy 1 số nguyên, nhưng thay vì vậy bạn gửi 1 lượng lớn dữ liệu để nó chiếm không gian bộ nhớ gấp đôi bộ nhớ dành cho số nguyên. Với việc copy tùy ý, lượng dữ liệu lớn này sẽ được copy vào khu vực kế tiếp (next location) và được đặt trong ngăn xếp (trong bộ nhớ máy tính). Bây giờ lượng lớn dữ liệu đã đặt trong ngăn xếp, đôi khi dữ liệu này được lôi ra khỏi ngăn xếp và thực thi. Điều này có thể là ngay lập tức, hoặc 1 thời gian sau đó hoặc thậm chí đã từng làm hỏng hóc vùng nhớ dữ liệu khác.
Một malicious user có thể sử dụng lỗi tràn bộ đệm để phá hủy ứng dụng web hoặc website. Lỗi tràn bộ đệm được sử dụng để tấn công vào máy chủ giành quyền kiểm soát mà bình thường không hề xảy ra hoặc nó khởi động chương trình từ ngăn xếp. Một lỗi tràn bộ nhớ có thể thực hiện từ chối dịch vụ (DoS) hoặc phân phối dịch vụ (DDoS).
Làm thế nào để chống lại việc tràn bộ đệm (How to protect against buffer overflows)
Để bảo vệ chống tràn bộ đệm, việc xác nhận đầu vào là rất cần thiết. Bất kỳ field, form đăng ký, hoặc bất kỳ phương pháp khác mà có nhập đầu vào đều có thể một lỗ hổng tiềm tàng của việc tràn bộ đệm. Điều này không chỉ bao gồm một form field, HTTP header, giao diện XML, hoặc bất kỳ giá trị đầu vào nào khác. Bạn hãy nghĩ đến tất cả những giá trị input ở bất kì khu vực nào của ứng dụng phần mềm.
Một số trong những điều đơn giản hơn là dev cần thực hiện thiết lập kích thước giới hạn cho phép của các giá trị đầu vào. Mặc dù ai đó có thể có một cái tên với 100 kí tự trong đó, giới hạn kích thước của các field nhập dữ liệu. Bạn cần phải biết chính xác kích thước của dữ liệu tiềm năng này có thể đạt đến. Điều này có thể đơn giản như setting thẻ HTML trong input field, hoặc sử dụng một số javascript để kiểm tra và validate input field. Nhưng việc được cảnh báo như vậy là chưa đủ. Một malicious user sẽ không tuân theo việc sử dụng trình duyệt mà sẽ tự động set kích thước giá trị đầu vào và sử dụng javascript validate input. Một malicious user có thể và sẽ sử dụng cái gì khác. Một malicious user sẽ viết code của chính anh ấy, sử dụng netcat, hoặc một số hình thức khác của một trình duyệt để có được xung quanh những kiểm tra đơn giản. Giá trị đầu vào phải được xác nhận trong code của ứng dụng web chĩnh nó.
Tóm lại, việc kiểm tra html form, cần lưu ý những vấn đề sau:
- Limit HTML input tags with the html size tag
URL Encode all input, to protect against special characters
Use JavaScript to perform the initial input validation
Most important, the underlying code must verify and sanitize the input provided