Как программист или разработчик важность создания безопасных приложений невозможно переоценить.
Безопасность программного обеспечения связана с управлением вредоносными атаками путем выявления потенциальных уязвимостей в программном обеспечении и принятия необходимых мер предосторожности для защиты от них.
Программное обеспечение никогда не может быть на 100% безопасным, потому что разработчик может пропустить ошибку, создать новые ошибки, пытаясь исправить существующие случаи, или создать новые уязвимости с помощью обновлений.
Однако есть два ключевых метода, которые могут использовать все разработчики программного обеспечения, чтобы гарантировать, что они создают безопасное программное обеспечение, в первую очередь, защищая код и эффективно тестируя ваш код.
Как написать безопасный код
Написание безопасного кода сводится к одной обработке ошибок. Если вы можете предвидеть каждое потенциальное значение, которое пользователь может ввести в ваше приложение, и создать ответ в вашей программе для этого значения, то вы пишете безопасный код.
Это намного проще, чем вы думаете, потому что все хорошие разработчики знают почти все о разрабатываемых ими приложениях. Следовательно, вы должны знать каждое значение, которое требуется вашему приложению для выполнения задачи (утвержденные значения), и понимать, что все остальные возможные значения являются неутвержденными.
Написание безопасного кода
Допустим, вы хотите создать программу, которая принимает от пользователя только два целых числа и выполняет над ними операцию сложения. С этим единственным предложением, как хороший разработчик, вы теперь знаете все о своем приложении. Вы знаете все значения, которые эта программа примет (целые числа), и знаете задачу, которую эта программа выполнит (операция сложения).
Создание программы на примере Java
импортировать java.util. Сканер;
public class Main {
// Основная функция, которая выполняет программу и собирает два значения
public static void main (String [] args) {
System.out.println ("Пожалуйста, введите два целых числа:");
int value1;
int value2;
Вход сканера = новый сканер (System.in);
значение1 = input.nextInt ();
значение2 = input.nextInt ();
сложение (значение1, значение2);
input.close ();
}
// функция, которая собирает два значения и отображает их сумму
частное статическое добавление void (int value1, int value2) {
int sum;
сумма = значение1 + значение2;
System.out.println ("Сумма двух введенных вами целочисленных значений:" + сумма);
}
}
Приведенный выше код создает приложение, которое точно соответствует требованиям. При выполнении он выдаст в консоли следующую строку:
Введите два целых числа:
Затем приложение будет приостановлено до тех пор, пока пользователь не введет два целых значения в консоль (что означает ввод первого значения, нажатие клавиши ввода и повторение).
Если пользователь вводит значения 5 а также 4 в консоли программа выдаст следующий вывод:
Сумма двух введенных вами целочисленных значений: 9
Это здорово; программа делает именно то, что должна. Однако, если подлый пользователь придет и введет в ваше приложение нецелое значение, такое как «g», возникнут проблемы. Это связано с тем, что никакой код в приложении не защищает от неутвержденных значений.
На этом этапе ваше приложение выйдет из строя, создав потенциальный шлюз в ваше приложение для хакера, который точно знает, что делать дальше.
Пример защиты вашей программы
импортировать java.util. InputMismatchException;
импортировать java.util. Сканер;
public class Main {
// Основная функция, которая выполняет программу и собирает два значения
public static void main (String [] args) {
пытаться {
System.out.println ("Пожалуйста, введите два целых числа:");
int value1;
int value2;
// использование класса сканера для чтения каждого ввода от пользователя,
// и присвоить его соответствующей переменной (выдает исключение, если значения не являются целыми числами)
Вход сканера = новый сканер (System.in);
значение1 = input.nextInt ();
значение2 = input.nextInt ();
// вызывает функцию сложения и передает ей два значения
сложение (значение1, значение2);
// закрывает входной поток после того, как он подошел к концу своего использования
input.close ();
// обрабатываем все ошибки, выданные в блоке try
} catch (InputMismatchException e) {
System.out.println («Пожалуйста, введите действительное целочисленное значение.»);
} catch (Exception e) {
System.out.println (e.getMessage ());
}
}
// функция, которая собирает два значения и отображает их сумму
частное статическое добавление void (int value1, int value2) {
int sum;
сумма = значение1 + значение2;
System.out.println ("Сумма двух введенных вами целочисленных значений:" + сумма);
}
}
Приведенный выше код безопасен, поскольку выполняет обработку исключений. Следовательно, если вы введете нецелочисленное значение, программа завершится правильно, создав следующую строку кода:
Пожалуйста, введите действительное целочисленное значение.
Что такое обработка исключений?
По сути, обработка исключений - это современная версия обработки ошибок, в которой вы отделяете код обработки ошибок от обычного кода обработки. В приведенном выше примере весь нормальный код обработки (или код, который потенциально может вызвать исключение) находится в пределах пытаться блок, и весь код обработки ошибок находится внутри ловить блоки.
Если вы внимательно посмотрите на приведенный выше пример, вы обнаружите, что есть два блока захвата. Первый занимает InputMismatchException аргумент; это имя исключения, которое возникает, если вводится нецелое значение. Второй занимает Исключение аргумент, и это важно, потому что его цель - перехватить любое исключение в коде, которое разработчик не обнаружил во время тестирования.
Связанный: Исключения Java: правильно ли вы с ними обращаетесь?
Тестирование вашего кода
Никогда не следует недооценивать силу тестирования и повторного тестирования вашего кода перед упаковкой. Многие разработчики (и пользователи их приложений) обнаруживают новые ошибки после того, как программное обеспечение становится общедоступным.
Тщательное тестирование вашего кода гарантирует, что вы знаете, что ваше приложение будет делать при всех возможных сценариях, и это позволит вам защитить ваше приложение от утечки данных.
Связанный: Как получить свою первую работу по тестированию программного обеспечения
Рассмотрим пример выше. Что, если после завершения вы тестируете приложение только с целочисленными значениями? Вы можете выйти из приложения, думая, что вы успешно определили все потенциальные ошибки, когда это не так.
Дело в том, что вы не сможете выявить все возможные ошибки; вот почему обработка ошибок работает рука об руку с тестированием вашего кода. Тестирование приведенной выше программы показывает, что в конкретном сценарии может произойти одна потенциальная ошибка.
Однако, если существует какая-либо другая ошибка, которая не возникла во время тестирования, второй блок catch в приведенном выше коде обработает ее.
Безопасность вашей базы данных
Если ваше приложение подключается к базе данных, лучший способ предотвратить доступ к этой базе данных - обеспечить безопасность всех аспектов вашего приложения. Однако что, если ваше приложение разработано с единственной целью - предоставить интерфейс для указанной базы данных?
Здесь все становится немного интереснее. В своей основной форме база данных позволяет пользователю добавлять, извлекать, обновлять и удалять данные. Система управления базой данных - это приложение, которое позволяет пользователю напрямую взаимодействовать с базой данных.
Большинство баз данных содержат конфиденциальные данные, поэтому для поддержания целостности и ограничения доступа к этим данным существует одно требование - контроль доступа.
Контроль доступа
Контроль доступа направлен на поддержание целостности базы данных путем определения типа людей, которые могут получить доступ к базе данных, и ограничения типа доступа, который у них есть. Следовательно, хорошая система управления базами данных должна иметь возможность регистрировать, кто обращался к базе данных, в какое время и что они делали.
Он также должен иметь возможность запретить зарегистрированному пользователю доступ или редактирование данных, с которыми он не уполномочен взаимодействовать.
Безопасность программного обеспечения - ключевой навык для всех разработчиков
Разработка хорошего программного обеспечения является синонимом обеспечения того, чтобы ваше программное обеспечение могло противостоять любым вредоносным атакам. Этого можно достичь только путем написания безопасного кода, постоянного тестирования приложения и поддержания контроля над тем, кто имеет доступ к вашим данным.
Теперь, когда вы знаете, как защитить свое программное обеспечение, вы можете узнать о некоторых этапах разработки программного обеспечения.
Готовитесь написать свою первую программу? Обязательно следуйте этим ключевым этапам разработки программного обеспечения.
Читать далее
- Программирование
- Кибербезопасность
- Советы по кодированию
Кадейша Кин (Kadeisha Kean) - разработчик программного обеспечения полного стека и автор статей по техническим / технологическим вопросам. У нее отличная способность упрощать некоторые из самых сложных технологических концепций; производство материала, понятного любому новичку в технологии. Она увлечена писательством, разработкой интересного программного обеспечения и путешествиями по миру (с помощью документальных фильмов).
Подписывайтесь на нашу новостную рассылку
Подпишитесь на нашу рассылку, чтобы получать технические советы, обзоры, бесплатные электронные книги и эксклюзивные предложения!
Еще один шаг…!
Пожалуйста, подтвердите свой адрес электронной почты в электронном письме, которое мы вам только что отправили.