Pointer nó như 1 công cụ đa năng vậy. Xài ko đúng cách thì sẽ phát sinh nhiều vấn đề.
Trong C++ ko có GC vì vấn đề performance. Ngay cả smartpointer thì tạm coi như là 1 bản fix cho quá nhiều lỗi xảy ra trên các hệ thống lớn với raw pointer. Cái smartpointer rất hay, nhưng mà các codebase lớn ko chuyển qua C++11/14 ngay được. Ví dụ như Chromium, phải 2015 mới chuyển qua C++11, nhưng bên trong vẫn còn rất nhiều raw pointer.
Một số issue nghiêm trọng liên quan tới raw pointer mà có thể ảnh hưởng tới security thì như thế này:
Cái out-of-bound chính là cái issue mà
@flowerfx2 nhắc tới. Ông có 1 list 10 item, mà ông access vào item -1 hay item 11, vậy chuyện gì xảy ra?
Với những memory unsafe language như C/C++, thì lúc này, trừ khi thằng dev kiểm tra một cách chặt chẽ, còn ko, nó vẫn sẽ trả về cái vùng nhớ ở địa chỉ đó, còn với memory safe language thì sẽ trả về lỗi, crash, v.v... Nhưng ít nhất nó đỡ hơn là cho phép đọc.
Ví dụ giờ cái item ở vị trí 11 là ... key của SSL/TLS thì sao, ok lúc này chúng ta có Heart bleed
https://en.wikipedia.org/wiki/Heartbleed
Heart Bleed chính là điển hình của việc lợi dụng lỗi out-of-bound để đọc thông tin private key.
Lỗi này xuất hiện trong thư viện OpenSSL.
Cứ tưởng tượng lỗi tương tự với Chrome xem
Cách đây 20 năm, performance nó là cái gì đó rất quan trọng. Nhưng bây giờ thì ko!
Khi phát triển 1 phần mềm/hệ thống như Chrome/Chromium, thì security nó mới là ưu tiên hàng đầu.
Phần cứng phát triển mạnh, giá rẻ, giờ một cái điện thoại tầm trung bây giờ có khi còn mạnh hơn một cái máy tính cá nhân thường thường 10 năm trước.