Tại sao bảo mật phần mềm là một kỹ năng mà tất cả các lập trình viên nên có?

Là một lập trình viên hoặc nhà phát triển, tầm quan trọng của việc tạo ra các ứng dụng bảo mật không thể xem nhẹ.

Bảo mật phần mềm giải quyết việc quản lý các cuộc tấn công độc hại bằng cách xác định những lỗ hổng tiềm ẩn trong phần mềm và thực hiện các biện pháp phòng ngừa cần thiết để bảo vệ chúng.

Phần mềm không bao giờ có thể bảo mật 100% vì nhà phát triển có thể bỏ qua một lỗi, tạo ra các lỗi mới trong khi khắc phục những trường hợp hiện có hoặc tạo ra các lỗ hổng mới thông qua những bản cập nhật.

Tuy nhiên, có hai phương pháp chính mà tất cả các nhà phát triển phần mềm có thể sử dụng để đảm bảo rằng họ tạo ra phần mềm bảo mật. Đó là viết code bảo mật ngay từ đầu và kiểm tra code một cách hiệu quả.

Bảo mật phần mềm đóng vai trò vô cùng quan trọng
Bảo mật phần mềm đóng vai trò vô cùng quan trọng

Cách viết code bảo mật

Viết code bảo mật chỉ có một điều cần làm duy nhất - đó là xử lý lỗi. Nếu bạn có thể đoán trước mọi giá trị tiềm năng mà người dùng có thể cung cấp cho ứng dụng và tạo phản hồi trong chương trình cho giá trị đó, thì bạn đang viết code bảo mật.

Điều này đơn giản hơn nhiều so với những gì bạn nghĩ, vì tất cả các nhà phát triển giỏi đều biết hầu hết mọi thứ về các ứng dụng mà họ phát triển. Do đó, bạn nên biết mọi giá trị mà ứng dụng của bạn yêu cầu để thực hiện một tác vụ (các giá trị đã được phê duyệt) và hiểu rằng mọi giá trị có thể tồn tại khác đều là giá trị chưa được phê duyệt.

Viết code bảo mật

Giả sử bạn muốn tạo một chương trình chỉ chấp nhận hai giá trị số nguyên từ người dùng và thực hiện một phép toán cộng trên chúng. Là một nhà phát triển giỏi, giờ đây bạn đã biết mọi thứ về ứng dụng của mình. Bạn biết tất cả các giá trị mà chương trình này sẽ chấp nhận (các giá trị nguyên) và bạn biết nhiệm vụ mà chương trình này sẽ hoàn thành (một phép toán cộng).

Ví dụ về tạo chương trình trong Java

import java.util.Scanner;
public class Main {
//The main function that executes the program and collects the two values
public static void main(String[] args) {
System.out.println("Please enter your two integer values: ");
int value1;
int value2;
Scanner input = new Scanner(System.in);
value1 = input.nextInt();
value2 = input.nextInt();
addition(value1, value2);
input.close();
}
//the function that collects the two values and displays their sum
private static void addition(int value1, int value2) {
int sum;
sum = value1 + value2;
System.out.println("The sum of the two integer values you entered: "+ sum);
}
}

Đoạn code trên tạo ra một ứng dụng phù hợp với các yêu cầu một cách chính xác. Khi thực thi, nó sẽ tạo ra dòng sau trong bảng điều khiển:

Please enter your two integer values:

Sau đó, ứng dụng sẽ vẫn bị tạm dừng cho đến khi người dùng nhập hai giá trị số nguyên vào bảng điều khiển (có nghĩa là nhập giá trị đầu tiên, nhấn phím Enter và lặp lại).

Nếu người dùng nhập các giá trị 54 trong bảng điều khiển, chương trình sẽ tạo ra kết quả sau:

The sum of the two integer values you entered: 9

Điều đó thật tuyệt. Chương trình thực hiện chính xác những gì nó phải làm. Tuy nhiên, nếu một người dùng bất chính đến và nhập một giá trị không phải số nguyên, chẳng hạn như “g”, vào ứng dụng của bạn thì sẽ có vấn đề. Điều này là do không có code nào trong ứng dụng bảo vệ khỏi các giá trị chưa được phê duyệt.

Tại thời điểm này, ứng dụng của bạn sẽ gặp sự cố, tạo ra một cổng tiềm năng vào ứng dụng của bạn để tin tặc biết chính xác phải làm gì tiếp theo.

Ví dụ về bảo mật chương trình

import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
//The main function that executes the program and collects the two values
public static void main(String[] args) {
try {
System.out.println("Please enter your two integer values: ");
int value1;
int value2;
//using the scanner class to read each input from the user,
//and assign it to is respective variable (throws an exception if the values are not integers)
Scanner input = new Scanner(System.in);
value1 = input.nextInt();
value2 = input.nextInt();
//calls the addition function and passes the two values to it
addition(value1, value2);
//closes the input stream after it has come to the end of its use
input.close();
//handle all the errors thrown in the try block
}catch(InputMismatchException e){
System.out.println("Please enter a valid integer value.");
}catch(Exception e) {
System.out.println(e.getMessage());
}
}
//the function that collects the two values and displays their sum
private static void addition(int value1, int value2) {
int sum;
sum = value1 + value2;
System.out.println("The sum of the two integer values you entered: "+ sum);
}
}

Đoạn code trên bảo mật vì nó thực hiện xử lý ngoại lệ. Do đó, nếu bạn nhập một giá trị không phải số nguyên, chương trình sẽ tạo ra dòng code sau:

Please enter a valid integer value.

Exception handling (Xử lý ngoại lệ) là gì?

Xử lý ngoại lệ
Xử lý ngoại lệ

Về cơ bản, exception handling là phiên bản xử lý lỗi hiện đại, nơi bạn tách mã xử lý lỗi khỏi code xử lý thông thường. Trong ví dụ trên, tất cả code xử lý bình thường (hoặc code có khả năng tạo ngoại lệ) đều nằm trong block try và tất cả code xử lý lỗi đều nằm trong block catch.

Nếu xem xét kỹ hơn ví dụ trên, bạn sẽ thấy rằng có 2 block catch. Đầu tiên lấy một đối số InputMismatchException - đây là tên của ngoại lệ được đưa ra nếu một giá trị không phải là số nguyên được nhập. Thứ hai lấy đối số Exception và điều này quan trọng vì mục đích của nó là tìm ra bất kỳ ngoại lệ nào trong code mà nhà phát triển không tìm thấy trong quá trình thử nghiệm.

Kiểm tra code

Bạn đừng bao giờ đánh giá thấp sức mạnh của việc thử nghiệm và kiểm tra lại code. Nhiều nhà phát triển (và người dùng ứng dụng) tìm thấy các lỗi mới sau khi phần mềm được cung cấp cho công chúng.

Kiểm tra kỹ lưỡng phần code đảm bảo rằng bạn biết ứng dụng của mình sẽ làm gì trong mọi tình huống có thể hình dung được và điều đó cho phép bạn bảo vệ ứng dụng khỏi các cuộc vi phạm dữ liệu.

Hãy xem xét ví dụ trên. Điều gì sẽ xảy ra nếu sau khi hoàn thành, bạn chỉ kiểm tra ứng dụng với các giá trị nguyên? Bạn có thể rời khỏi ứng dụng vì nghĩ rằng bạn đã xác định thành công tất cả các lỗi tiềm ẩn khi thực tế không phải như vậy.

Thực tế là bạn có thể không xác định được tất cả các lỗi tiềm ẩn. Đây là lý do tại sao quá trình xử lý lỗi hoạt động song song với việc kiểm tra code của bạn. Việc kiểm tra chương trình ở trên cho thấy một lỗi tiềm ẩn sẽ xảy ra trong một tình huống cụ thể.

Tuy nhiên, nếu một số lỗi khác không xuất hiện trong quá trình thử nghiệm đang tồn tại, thì block catch thứ hai trong code ở trên sẽ xử lý nó.

Bảo mật cơ sở dữ liệu

Nếu ứng dụng của bạn kết nối với cơ sở dữ liệu, cách tốt nhất để ngăn truy cập vào cơ sở dữ liệu đó là đảm bảo rằng tất cả các khía cạnh của ứng dụng đều được bảo mật. Tuy nhiên, điều gì sẽ xảy ra nếu ứng dụng của bạn được thiết kế với mục đích duy nhất là cung cấp giao diện cho cơ sở dữ liệu nói trên?

Đây là nơi mọi thứ trở nên thú vị hơn một chút. Ở dạng cơ bản nhất, cơ sở dữ liệu cho phép người dùng thêm, truy xuất, cập nhật và xóa dữ liệu. Hệ quản trị cơ sở dữ liệu là một ứng dụng cho phép người dùng tương tác trực tiếp với cơ sở dữ liệu.

Hầu hết các cơ sở dữ liệu đều chứa dữ liệu nhạy cảm, do đó, để duy trì tính toàn vẹn và giới hạn quyền truy cập vào dữ liệu này, cần có một yêu cầu - kiểm soát truy cập.

Kiểm soát truy cập

Kiểm soát truy cập tìm cách duy trì tính toàn vẹn của cơ sở dữ liệu bằng cách xác định kiểu người có thể truy cập cơ sở dữ liệu và hạn chế kiểu truy cập mà họ có. Do đó, một hệ thống quản lý cơ sở dữ liệu tốt phải có khả năng ghi lại những ai truy cập vào cơ sở dữ liệu, vào thời điểm nào và họ đã làm gì.

Nó cũng có thể ngăn người dùng đã đăng ký truy cập hoặc chỉnh sửa dữ liệu mà họ không được phép tương tác.

Thứ Hai, 17/05/2021 16:55
52 👨 286
0 Bình luận
Sắp xếp theo