Почему безопасность программного обеспечения – это навык, которым должны обладать все программисты

Как программист или разработчик важность создания безопасных приложений невозможно переоценить.

Безопасность программного обеспечения связана с управлением вредоносными атаками путем выявления потенциальных уязвимостей в программном обеспечении и принятия необходимых мер предосторожности для защиты от них.

Программное обеспечение никогда не может быть на 100% безопасным, потому что разработчик может пропустить ошибку, создать новые ошибки, пытаясь исправить существующие случаи, или создать новые уязвимости с помощью обновлений.

Однако есть два ключевых метода, которые могут использовать все разработчики программного обеспечения, чтобы гарантировать, что они создают безопасное программное обеспечение: в первую очередь написание безопасного кода и эффективное тестирование вашего кода.

Как написать безопасный код

Написание безопасного кода сводится к одному – обработке ошибок. Если вы можете предвидеть каждое потенциальное значение, которое пользователь может передать вашему приложению, и создать ответ в вашей программе для этого значения, значит, вы пишете безопасный код.

Это намного проще, чем вы думаете, потому что все хорошие разработчики знают почти все о разрабатываемых ими приложениях. Следовательно, вы должны знать каждое значение, которое требуется вашему приложению для выполнения задачи (утвержденные значения), и понимать, что все другие существующие возможные значения являются неутвержденными.

Написание безопасного кода

Допустим, вы хотите создать программу, которая принимает от пользователя только два целых числа и выполняет над ними операцию сложения. С этим единственным предложением, как хороший разработчик, вы теперь знаете все о своем приложении. Вы знаете все значения, которые эта программа примет (целые числа), и знаете задачу, которую эта программа выполнит (операция сложения).

Создание программы на примере 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);
}
}

Приведенный выше код создает приложение, которое точно соответствует требованиям. При выполнении он выдаст в консоли следующую строку:

 
Please enter your two integer values:

Затем приложение будет приостановлено до тех пор, пока пользователь не введет два целых значения в консоль (что означает ввод первого значения, нажатие клавиши ввода и повторение).

Если пользователь вводит значения 5 и 4 в консоли, программа выдаст следующий вывод:

 
The sum of the two integer values you entered: 9

Это здорово; программа делает именно то, что должна. Однако, если подлый пользователь придет и введет в ваше приложение нецелое значение, такое как «g», возникнут проблемы. Это связано с тем, что никакой код в приложении не защищает от неутвержденных значений.

На этом этапе ваше приложение выйдет из строя, создав потенциальный шлюз в ваше приложение для хакера, который точно знает, что делать дальше.

Пример защиты вашей программы

 
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);
}
}

Приведенный выше код безопасен, поскольку выполняет обработку исключений. Следовательно, если вы введете нецелочисленное значение, программа завершится правильно, создав следующую строку кода:

 
Please enter a valid integer value.

Что такое обработка исключений?

По сути, обработка исключений – это современная версия обработки ошибок, в которой вы отделяете код обработки ошибок от обычного кода обработки. В приведенном выше примере весь код нормальной обработки (или код, который потенциально может вызвать исключение) находится в блоке try , а весь код обработки ошибок находится в блоках catch .

Если вы внимательно посмотрите на приведенный выше пример, вы обнаружите, что есть два блока catch. Первый принимает аргумент InputMismatchException ; это имя исключения, которое возникает, если вводится нецелое значение. Второй принимает аргумент Exception , и это важно, потому что его цель – перехватить любое исключение в коде, которое разработчик не обнаружил во время тестирования.

Связанный: Исключения Java: правильно ли вы с ними обращаетесь?

Тестирование вашего кода

Никогда не следует недооценивать силу тестирования и повторного тестирования кода перед упаковкой. Многие разработчики (и пользователи их приложений) обнаруживают новые ошибки после того, как программное обеспечение становится общедоступным.

Тщательное тестирование вашего кода гарантирует, что вы знаете, что ваше приложение будет делать при всех мыслимых сценариях, и это позволит вам защитить ваше приложение от утечки данных.

Связанный: Как получить свою первую работу по тестированию программного обеспечения

Рассмотрим пример выше. Что, если после завершения вы тестируете приложение только с целочисленными значениями? Вы можете выйти из приложения, думая, что вы успешно определили все потенциальные ошибки, когда это не так.

Дело в том, что вы не сможете выявить все возможные ошибки; вот почему обработка ошибок работает рука об руку с тестированием вашего кода. Тестирование указанной выше программы показывает, что в конкретном сценарии может произойти одна потенциальная ошибка.

Однако, если существует какая-либо другая ошибка, которая не возникла во время тестирования, второй блок catch в приведенном выше коде обработает ее.

Безопасность вашей базы данных

Если ваше приложение подключается к базе данных, лучший способ предотвратить доступ к этой базе данных – обеспечить безопасность всех аспектов вашего приложения. Однако что, если ваше приложение разработано с единственной целью – предоставить интерфейс для указанной базы данных?

Здесь все становится немного интереснее. В своей основной форме база данных позволяет пользователю добавлять, извлекать, обновлять и удалять данные. Система управления базой данных – это приложение, которое позволяет пользователю напрямую взаимодействовать с базой данных.

Большинство баз данных содержат конфиденциальные данные, поэтому для поддержания целостности и ограничения доступа к этим данным существует одно требование – контроль доступа.

Контроль доступа

Контроль доступа направлен на поддержание целостности базы данных путем определения типа людей, которые могут получить доступ к базе данных, и ограничения типа доступа, который у них есть. Следовательно, хорошая система управления базой данных должна иметь возможность регистрировать, кто обращался к базе данных, в какое время и что они делали.

Он также должен иметь возможность запретить зарегистрированному пользователю доступ или редактирование данных, с которыми он не уполномочен взаимодействовать.

Безопасность программного обеспечения – ключевой навык для всех разработчиков

Разработка хорошего программного обеспечения является синонимом обеспечения того, чтобы ваше программное обеспечение могло противостоять любым вредоносным атакам. Этого можно достичь только путем написания безопасного кода, постоянного тестирования приложения и поддержания контроля над тем, кто имеет доступ к вашим данным.

Теперь, когда вы знаете, как защитить свое программное обеспечение, вы можете узнать о некоторых этапах разработки программного обеспечения.