Mục lục:
- Không giả định về đầu vào của người dùng
- Xử lý thất bại Tạm thời
- Duy trì nhật ký chương trình
- Thực hiện theo một quy trình phát triển tốt
- Thực hiện kiểm soát phiên bản tốt
- Xác thực người dùng an toàn
- Quản lý các phiên họp từ xa
- Tắc nghẽn mã của bạn
- Ký mã của bạn bằng chứng nhận số
- Sử dụng mã hoá bảo mật ở bất cứ nơi nào cần thiết
Video: Cách viết virus mã hóa dữ liệu, WannaCry hoạt động như thế nào ? 2025
Là một lập trình C + +, bạn cần học những điều bạn nên làm trong mã C ++ để tránh viết các chương trình dễ bị hacker tấn công. Ngoài ra còn có các tính năng mà bạn có thể kích hoạt nếu hệ điều hành của bạn hỗ trợ chúng, chẳng hạn như Địa chỉ Không gian Giao diện ngẫu nhiên (ASLR) và Phòng Chống Thực hiện Dữ liệu (DEP).
Không giả định về đầu vào của người dùng
tầm nhìn đường hầm của trình lập trình ổn trong giai đoạn phát triển ban đầu. Tuy nhiên, tại một thời điểm nào đó, lập trình viên (hoặc tốt hơn nữa, một số lập trình viên khác không liên quan gì đến sự phát triển của mã) cần phải ngồi lại và quên đi vấn đề ngay lập tức. Cô ấy cần tự hỏi bản thân mình, "Chương trình này phản ứng như thế nào với đầu vào bất hợp pháp? "
Đây là một số quy tắc để kiểm tra đầu vào:
-
Không giả sử về độ dài của đầu vào.
-
Không chấp nhận đầu vào nhiều hơn bạn có chỗ trống trong vùng đệm có độ dài cố định (hoặc sử dụng bộ đệm có kích thước biến).
-
Kiểm tra phạm vi của mỗi giá trị số để đảm bảo rằng nó có ý nghĩa.
-
Kiểm tra và lọc các ký tự đặc biệt mà một hacker có thể sử dụng để chèn mã.
-
Không được chuyển đầu vào thô vào một dịch vụ khác, chẳng hạn như máy chủ cơ sở dữ liệu.
Và thực hiện tất cả các kiểm tra tương tự trên các giá trị được trả về từ các dịch vụ từ xa. Hacker có thể không ở phía đầu vào, anh ta có thể ở phía phản ứng.
Xử lý thất bại Tạm thời
Chương trình của bạn nên phản ứng hợp lý đối với những thất bại xảy ra trong chương trình. Ví dụ, nếu cuộc gọi của bạn đến một hàm thư viện trả về một nullptr, chương trình sẽ phát hiện ra điều này và làm một cái gì đó hợp lý.
Hợp lý ở đây được hiểu một cách khá tự do. Chương trình không cần phải đánh hơi xung quanh để tìm ra chính xác tại sao chức năng đã không trả lại một địa chỉ hợp lý. Nó có thể là yêu cầu được cho quá nhiều bộ nhớ do đầu vào không hợp lý. Hoặc nó có thể là nhà xây dựng phát hiện một số loại đầu vào bất hợp pháp.
Không quan trọng. Vấn đề là chương trình nên khôi phục lại trạng thái của nó tốt nhất có thể và thiết lập cho bit tiếp theo của đầu vào mà không bị hỏng hoặc hư hỏng cấu trúc dữ liệu hiện có như heap.
Duy trì nhật ký chương trình
Tạo và duy trì các bản ghi thời gian thực cho phép ai đó khôi phục lại những gì đã xảy ra trong trường hợp thất bại về bảo mật. (Thực tế, điều này cũng đúng với trường hợp có bất kỳ loại thất bại nào) Ví dụ: bạn có thể muốn đăng nhập mỗi lần ai đó đăng nhập vào hoặc ra khỏi hệ thống của bạn.
Bạn chắc chắn muốn biết ai đã đăng nhập vào hệ thống của bạn khi một sự kiện bảo mật xảy ra - đây là nhóm có nhiều nguy cơ mất an ninh nhất và người đáng ngờ nhất khi tìm kiếm thủ phạm.Ngoài ra, bạn sẽ muốn đăng nhập bất kỳ lỗi hệ thống nào sẽ bao gồm hầu hết các trường hợp ngoại lệ.
Một chương trình sản xuất trong thế giới thực có một số lượng lớn các cuộc gọi trông giống như sau:
log (DEBUG, "Người dùng% s nhập mật khẩu hợp pháp", sUser);
Đây chỉ là một ví dụ. Mỗi chương trình sẽ cần một số loại chức năng đăng nhập. Có hay không nó thực sự được gọi là log () là không quan trọng.
Thực hiện theo một quy trình phát triển tốt
Mỗi chương trình phải tuân theo quy trình phát triển chính thức và được cân nhắc kỹ lưỡng. Quá trình này phải bao gồm ít nhất các bước sau:
-
Thu thập và yêu cầu tài liệu, bao gồm các yêu cầu bảo mật.
-
Xem lại thiết kế.
-
Tuân theo một tiêu chuẩn mã hóa.
-
Thử nghiệm đơn vị.
-
Thực hiện các bài kiểm tra chấp nhận chính thức dựa trên yêu cầu ban đầu.
Ngoài ra, các cuộc đánh giá đồng đẳng phải được tiến hành tại các điểm chính để xác minh rằng các yêu cầu, thiết kế, mã và thủ tục kiểm tra chất lượng cao và đáp ứng các tiêu chuẩn của công ty.
Thực hiện kiểm soát phiên bản tốt
Phiên bản kiểm soát là một điều kỳ lạ. Thật tự nhiên không phải lo lắng về phiên bản 1. 1 khi bạn đang ở dưới khẩu súng để có được phiên bản 1. 0 ra khỏi cửa và vào tay người đang chờ đợi của người đang ở ngoài. Tuy nhiên, kiểm soát phiên bản là một chủ đề quan trọng cần phải được giải quyết sớm bởi vì nó phải được xây dựng trong thiết kế ban đầu của chương trình và không bắt buộc vào sau này.
Một khía cạnh gần như nhỏ của kiểm soát phiên bản là biết phiên bản của chương trình người dùng đang sử dụng. Khi người dùng gọi đến và nói, "Nó thực hiện điều này khi tôi nhấp vào đó", bàn trợ giúp thực sự cần biết phiên bản của chương trình người dùng đang sử dụng. Anh ta có thể mô tả một vấn đề trong phiên bản của anh ta đã được khắc phục trong phiên bản hiện tại.
Xác thực người dùng an toàn
Xác thực người dùng phải đơn giản: Người dùng cung cấp tên tài khoản và mật khẩu, và chương trình của bạn sẽ xem tên tài khoản trong một bảng và so sánh mật khẩu. Nếu mật khẩu khớp, người dùng được xác thực. Nhưng khi nói đến chống hack, không có gì là đơn giản.
Trước tiên, không bao giờ tự lưu mật khẩu vào cơ sở dữ liệu. Đây được gọi là lưu trữ chúng trong rõ ràng và được coi là rất xấu hình thức. Nó quá dễ dàng cho một hacker có được bàn tay của mình vào tập tin mật khẩu. Thay vào đó, hãy lưu một biến đổi mật khẩu an toàn.
Quản lý các phiên họp từ xa
Bạn có thể đưa ra các giả định nhất định khi tất cả ứng dụng của bạn chạy trên một máy tính. Một điều, một khi người sử dụng đã chứng thực bản thân mình, bạn không cần phải lo lắng về anh ta được biến đổi thành một người khác. Các ứng dụng giao tiếp với máy chủ từ xa không thể giả định này - một hacker đang lắng nghe trên đường dây có thể đợi cho đến khi người dùng xác nhận chính mình và sau đó bắt giữ phiên làm việc.
Lập trình an toàn có thể làm gì để tránh tình trạng này? Bạn không muốn liên tục hỏi người dùng về mật khẩu của mình chỉ để đảm bảo rằng kết nối không bị cướp. Giải pháp thay thế là thiết lập và quản lý một phiên . Bạn thực hiện việc này bằng cách yêu cầu máy chủ gửi ứng dụng từ xa một cookie phiên khi người dùng đã xác thực thành công.
Tắc nghẽn mã của bạn
Mã khó hiểu là hành động làm cho tệp thi hành khó khăn cho một hacker hiểu rõ nhất có thể.
Logic là đơn giản. Càng dễ dàng hơn khi một hacker hiểu mã của bạn hoạt động như thế nào, thì hacker sẽ dễ dàng tìm ra các lỗ hổng.
Bước đơn giản nhất bạn có thể thực hiện là đảm bảo rằng bạn chỉ phát hành phiên bản Release của chương trình mà không bao gồm thông tin biểu tượng gỡ lỗi. Khi bạn tạo tệp dự án lần đầu tiên, hãy đảm bảo chọn cả phiên bản Gỡ lỗi và Phiên bản phát hành.
Không bao giờ bao giờ, phân phối các phiên bản của ứng dụng của bạn với thông tin biểu tượng bao gồm.
Ký mã của bạn bằng chứng nhận số
Ký hiệu mã hoạt động bằng cách tạo ra một mã băm an toàn của mã thực thi và kết hợp nó với chứng chỉ do cơ quan phát hành chứng chỉ hợp lệ cấp. Quy trình hoạt động như sau: Công ty tạo chương trình phải đăng ký bản thân với một trong các cơ quan chứng nhận.
Một khi cơ quan chứng nhận được thuyết phục rằng Công ty của tôi là một thực thể phần mềm hợp lệ, nó sẽ cấp chứng chỉ. Đây là một số dài mà mọi người có thể sử dụng để xác minh rằng người giữ chứng chỉ này là Công ty của tôi ở San Antonio nổi tiếng.
Sử dụng mã hoá bảo mật ở bất cứ nơi nào cần thiết
Giống như bất kỳ cảnh báo tốt nào, lời cảnh báo này có nhiều phần. Đầu tiên, "Sử dụng mã hóa bất cứ nơi nào cần thiết. "Điều này có xu hướng làm suy nghĩ về việc truyền đạt thông tin tài khoản ngân hàng qua Internet, nhưng bạn nên suy nghĩ tổng quát hơn.
Dữ liệu đang được truyền đạt qua Internet hoặc qua một phạm vi nhỏ hơn thường được gọi chung là Dữ liệu trong Chuyển động. Dữ liệu trong Motion nên được mã hóa trừ khi nó không có hại cho một hacker.
Dữ liệu được lưu trữ trên đĩa được gọi là Dữ liệu ở phần còn lại. Dữ liệu này cũng phải được mã hóa nếu có cơ hội bị mất, đánh cắp hoặc sao chép đĩa. Các doanh nghiệp thường mã hóa ổ cứng trên máy tính xách tay của công ty trong trường hợp máy tính xách tay bị mất cắp tại máy quét an ninh tại sân bay hoặc để ở trong một chiếc taxi ở đâu đó.
Các thiết bị lưu trữ di động nhỏ, chẳng hạn như ổ đĩa nhỏ, đặc biệt dễ bị mất - dữ liệu trên các thiết bị này phải được mã hóa.