Jako programista lub deweloper nie można przecenić znaczenia tworzenia bezpiecznych aplikacji.

Bezpieczeństwo oprogramowania zajmuje się zarządzaniem złośliwymi atakami poprzez identyfikację potencjalnych luk w oprogramowaniu i podejmowanie niezbędnych środków ostrożności w celu ochrony przed nimi.

Oprogramowanie nigdy nie może być w 100% bezpieczne, ponieważ programista może przeoczyć błąd, stworzyć nowe błędy, próbując naprawić istniejące przypadki lub stworzyć nowe luki w zabezpieczeniach poprzez aktualizacje.

Istnieją jednak dwie kluczowe praktyki, które wszyscy programiści mogą zastosować, aby upewnić się, że w pierwszej kolejności utworzą bezpieczny kod do pisania oprogramowania i skutecznie przetestują Twój kod.

Jak napisać bezpieczny kod

Pisanie bezpiecznego kodu sprowadza się do jednej rzeczy, obsługi błędów. Jeśli potrafisz przewidzieć każdą potencjalną wartość, którą użytkownik może zasilić Twoją aplikację, i stworzyć odpowiedź w swoim programie na tę wartość, to piszesz bezpieczny kod.

instagram viewer

Jest to o wiele prostsze, niż mogłoby się wydawać, ponieważ wszyscy dobrzy programiści wiedzą prawie wszystko o tworzonych przez siebie aplikacjach. Dlatego powinieneś znać każdą wartość, której aplikacja wymaga do wykonania zadania (zatwierdzone wartości) i rozumieć, że każda inna możliwa istniejąca wartość jest wartością niezatwierdzoną.

Pisanie bezpiecznego kodu

Powiedzmy, że chcesz utworzyć program, który akceptuje tylko dwie liczby całkowite od użytkownika i wykonuje na nich operację dodawania. Dzięki temu jednemu zdaniu, jak dobry programista, wiesz już wszystko o swojej aplikacji. Znasz wszystkie wartości, które ten program zaakceptuje (wartości całkowite) i znasz zadanie, które ten program wykona (operacja dodawania).

Tworzenie programu w języku Java - przykład


import java.util. Skaner;
public class Main {
// Główna funkcja, która wykonuje program i zbiera dwie wartości
public static void main (String [] args) {
System.out.println ("Proszę podać dwie wartości całkowite:");
int wartość1;
int wartość2;
Wejście skanera = nowy skaner (System.in);
wartość1 = input.nextInt ();
wartość2 = input.nextInt ();
dodawanie (wartość1, wartość2);
input.close ();
}
// funkcja, która zbiera dwie wartości i wyświetla ich sumę
prywatne statyczne dodanie void (int value1, int value2) {
int sum;
suma = wartość1 + wartość2;
System.out.println ("Suma dwóch wprowadzonych wartości całkowitych:" + suma);
}
}

Powyższy kod tworzy aplikację, która dokładnie spełnia wymagania. Po wykonaniu wyświetli w konsoli następujący wiersz:


Wprowadź dwie wartości całkowite:

Aplikacja pozostanie wtedy wstrzymana, dopóki użytkownik nie wpisze w konsoli dwóch wartości całkowitych (co oznacza wpisanie pierwszej wartości, naciśnięcie klawisza enter i powtórzenie).

Jeśli użytkownik wprowadzi wartości 5 i 4 w konsoli program wygeneruje następujące dane wyjściowe:


Suma dwóch wprowadzonych wartości całkowitych: 9

To jest świetne; program robi dokładnie to, co powinien. Jeśli jednak pojawi się niecny użytkownik i wpisze do aplikacji wartość inną niż całkowita, na przykład „g”, wystąpią problemy. Dzieje się tak, ponieważ żaden kod w aplikacji nie chroni przed niezatwierdzonymi wartościami.

W tym momencie aplikacja ulegnie awarii, tworząc potencjalną bramę do aplikacji dla hakera, który dokładnie wie, co robić dalej.

Przykład zabezpieczenia programu


import java.util. InputMismatchException;
import java.util. Skaner;
public class Main {
// Główna funkcja, która wykonuje program i zbiera dwie wartości
public static void main (String [] args) {
próbować {
System.out.println ("Proszę podać dwie wartości całkowite:");
int wartość1;
int wartość2;
// użycie klasy scanner do odczytania każdego wejścia od użytkownika,
// i przypisz ją do odpowiedniej zmiennej (zgłasza wyjątek, jeśli wartości nie są liczbami całkowitymi)
Wejście skanera = nowy skaner (System.in);
wartość1 = input.nextInt ();
wartość2 = input.nextInt ();
// wywołuje funkcję dodawania i przekazuje do niej dwie wartości
dodawanie (wartość1, wartość2);
// zamyka strumień wejściowy po zakończeniu jego używania
input.close ();
// obsłuż wszystkie błędy wyrzucone w bloku try
} catch (InputMismatchException e) {
System.out.println ("Wprowadź prawidłową wartość całkowitą.");
} catch (wyjątek e) {
System.out.println (e.getMessage ());
}
}
// funkcja, która zbiera dwie wartości i wyświetla ich sumę
prywatne statyczne dodanie void (int value1, int value2) {
int sum;
suma = wartość1 + wartość2;
System.out.println ("Suma dwóch wprowadzonych wartości całkowitych:" + suma);
}
}

Powyższy kod jest bezpieczny, ponieważ wykonuje obsługę wyjątków. W związku z tym, jeśli wprowadzisz wartość inną niż całkowita, program zakończy działanie poprawnie, tworząc następujący wiersz kodu:


Wprowadź prawidłową liczbę całkowitą.

Co to jest obsługa wyjątków?

Zasadniczo obsługa wyjątków to nowoczesna wersja obsługi błędów, w której oddziela się kod obsługi błędów od normalnego kodu przetwarzania. W powyższym przykładzie cały normalny kod przetwarzania (lub kod, który może potencjalnie zgłosić wyjątek) znajduje się w pliku próbować blok, a cały kod obsługi błędów jest w nim łapać Bloki.

Jeśli przyjrzysz się bliżej powyższemu przykładowi, zobaczysz, że są tam dwa bloki catch. Pierwszy zajmuje plik InputMismatchException argument; jest to nazwa wyjątku, który jest generowany w przypadku wprowadzenia wartości innej niż całkowita. Drugi ma plik Wyjątek argument, a to jest ważne, ponieważ jego celem jest wychwycenie każdego wyjątku w kodzie, którego deweloper nie znalazł podczas testowania.

Związane z: Wyjątki w Javie: czy dobrze sobie z nimi radzisz?

Testowanie Twojego kodu

Nigdy nie należy lekceważyć potęgi testowania i ponownego testowania kodu przed zapakowaniem. Wielu programistów (i użytkowników ich aplikacji) znajduje nowe błędy po udostępnieniu oprogramowania.

Dokładne przetestowanie kodu zapewni, że wiesz, co zrobi Twoja aplikacja w każdym możliwym scenariuszu, a to pozwoli Ci chronić aplikację przed wyciekiem danych.

Związane z: Jak zdobyć pierwszą pracę testowania oprogramowania

Rozważ powyższy przykład. Co jeśli po zakończeniu przetestujesz aplikację tylko z wartościami całkowitymi? Możesz odejść od aplikacji myśląc, że udało Ci się zidentyfikować wszystkie potencjalne błędy, podczas gdy tak nie jest.

Faktem jest, że możesz nie być w stanie zidentyfikować wszystkich potencjalnych błędów; dlatego obsługa błędów działa w parze z testowaniem kodu. Testowanie powyższego programu pokazuje, że w określonym scenariuszu wystąpi jeden potencjalny błąd.

Jeśli jednak istnieje jakiś inny błąd, który nie pojawił się podczas testowania, zostanie on obsłużony przez drugi blok catch w powyższym kodzie.

Zabezpieczanie bazy danych

Jeśli aplikacja łączy się z bazą danych, najlepszym sposobem zapobiegania dostępowi do tej bazy danych jest zapewnienie bezpieczeństwa wszystkich aspektów aplikacji. A co, jeśli Twoja aplikacja została zaprojektowana wyłącznie w celu zapewnienia interfejsu do wspomnianej bazy danych?

Tutaj sprawy stają się trochę bardziej interesujące. W swojej najbardziej podstawowej formie baza danych umożliwia użytkownikowi dodawanie, pobieranie, aktualizowanie i usuwanie danych. System zarządzania bazą danych to aplikacja, która umożliwia użytkownikowi bezpośrednią interakcję z bazą danych.

Większość baz danych zawiera dane wrażliwe, dlatego w celu zachowania integralności tych danych i ograniczenia dostępu do nich istnieje jeden wymóg kontroli dostępu.

Kontrola dostępu

Kontrola dostępu ma na celu zachowanie integralności bazy danych poprzez zdefiniowanie typu osób, które mogą uzyskać dostęp do bazy danych i ograniczenie tego, jaki mają one dostęp. Dlatego dobry system zarządzania bazą danych powinien być w stanie rejestrować, kto uzyskuje dostęp do bazy danych, o której godzinie i co zrobił.

Powinien również być w stanie uniemożliwić zarejestrowanemu użytkownikowi dostęp do danych, do których nie jest upoważniony, lub ich edycję.

Bezpieczeństwo oprogramowania to kluczowa umiejętność dla wszystkich programistów

Tworzenie dobrego oprogramowania jest równoznaczne z zapewnianiem, że jest ono odporne na każdy złośliwy atak. Można to osiągnąć tylko poprzez pisanie bezpiecznego kodu, ciągłe testowanie aplikacji i utrzymywanie kontroli nad tym, kto ma dostęp do Twoich danych.

Teraz, gdy wiesz, jak zabezpieczyć oprogramowanie, możesz chcieć poznać niektóre etapy tworzenia oprogramowania.

E-mail
6 etapów tworzenia oprogramowania, o których powinni wiedzieć wszyscy programiści

Przygotowujesz się do kodowania swojego pierwszego programu? Pamiętaj, aby przestrzegać tych kluczowych etapów tworzenia oprogramowania.

Czytaj dalej

Powiązane tematy
  • Programowanie
  • Bezpieczeństwo cybernetyczne
  • Wskazówki dotyczące kodowania
O autorze
Kadeisha Kean (15 opublikowanych artykułów)

Kadeisha Kean jest pełnoprawnym programistą i autorem techniczno-technologicznym. Ma wyraźną umiejętność upraszczania niektórych najbardziej złożonych koncepcji technologicznych; wytwarzanie materiału zrozumiałego dla każdego nowicjusza w dziedzinie technologii. Pasjonuje się pisaniem, tworzeniem ciekawego oprogramowania i podróżowaniem po świecie (poprzez filmy dokumentalne).

Więcej od Kadeishy Kean

Zapisz się do naszego newslettera

Dołącz do naszego biuletynu, aby otrzymywać wskazówki techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!

Jeszcze jeden krok…!

Potwierdź swój adres e-mail w wiadomości e-mail, którą właśnie wysłaliśmy.

.