Popraw bezpieczeństwo naszych aplikacji dzięki PHP

Spisie treści
PHP pojawił się jako uniwersalny język, który pozwala nam manipulować danymi wprowadzanymi przez formularz HTMLOczywiście w jego konstytucji jest więcej narzędzi i możliwości niż tylko to.
Wszechstronność i łatwość użycia sprawiają, że jest to jeden z najczęściej używanych języków na całym świecie w projektach internetowych, od prostych formularzy kontaktowych, po bycie podstawą dużych aplikacji na początku, takich jak Facebook.
Problem z wszechstronnością i łatwością użycia polega na tym, że programista nie jest zmuszony do pisania bezpiecznego kodu, ale przy bardzo niepewnych funkcjach kod będzie działał idealnie i tu pojawiają się problemy.
Bezpieczeństwo aplikacji internetowych to coś, czego nie masz od samego początku PHPNie oznacza to jednak, że jest to niepewny język, ponieważ bezpieczeństwo odpowiada zestawowi technik i stylów pracy, które programista musi znać, aby zastosować je w swoich skryptach.
RamyPrawdą jest, że wraz z pojawieniem się frameworki Wiele funkcji bezpieczeństwa jest dołączonych domyślnie, jednak nie każdy programista używał struktura w starszych aplikacjach i możliwe jest, że dla niektórych funkcji użyje struktura być nadmiarem.
Klucze do osiągnięcia bezpieczeństwa w naszych aplikacjach z PHP Są to: kontrola i doprecyzowanie danych, które użytkownik wprowadza do formularza, weryfikacja pochodzenia żądań HTTP jakie otrzymuje nasza aplikacja, a wreszcie unikamy bezpośredniego wykonywania dyspozycji poprzez formularze.
W programowaniu obowiązuje zasada i jest ona uniwersalna, to znaczy nie dotyczy tylko PHPChodzi o to, że wszystkie dane, które nie są generowane przez aplikację, są potencjalnie złośliwe, co oznacza, że ​​jeśli nie jest to wynik, który zaprogramowaliśmy, nie możemy ufać.
Zasada ta dotyczy wartości formularzy, plików, Bazy danych, więc pierwszym krokiem do poprawy naszego bezpieczeństwa jest filtrowanie danych, jeśli musimy wejść w interakcję z tymi elementami.
Wymienimy niektóre z najlepszych praktyk, które możemy zastosować podczas filtrowania danych wprowadzanych do naszego formularza:
Użyj list dozwolonych wartościDzięki tej praktyce wiemy, że jeśli dane, które przechodzą przez formularz, nie przechodzą przez naszą listę dozwolonych i bezpiecznych wartości, to nie powinny trafiać do przetwarzania, w tym momencie należy wysłać wiadomość do użytkownika, aby poprawić swoje dane.
Nigdy nie poprawiaj nieprawidłowych danychMoże wydawać się kuszące stworzenie bardzo inteligentnego systemu, który koryguje dane z niespójnościami, ale na dłuższą metę może to przynieść nam problemy i podatności, dlatego jeśli wykryjemy coś nieprawidłowego, nie powinniśmy tego przetwarzać.
Użyj konwencji nazewnictwaDzięki tej praktyce możemy odróżnić bezpieczne dane i wartości od tych danych i wartości wprowadzonych przez użytkownika, dzięki temu wzmocnimy w ramach programowania wykorzystanie tych pierwszych do przetwarzania.
Jest dwa rodzaje filtrowania co możemy zrobić, pierwsza dotyczy wartości, które znamy, a druga wartości, których nie znamy.
ten pierwszy Jest to bardzo łatwe do wykonania, wystarczy wykonać procedury z listami znanych elementów i porównać je, jednak jest to kłopotliwe i trudne do wykonania w większych aplikacjach. ten druga Oznacza to tworzenie procedur, które oceniają strukturę wartości i jeśli odpowiada ona tej, którą uważamy za bezpieczną, oddajemy ją do przetwarzania, w przeciwnym razie zgłaszamy błąd, mając charakter dynamiczny, jest to zalecany format.
Zobaczmy poniżej przykładowy kod pierwszego typu filtrowania:
W poniższym kodzie zobaczymy, jak tworzymy formularz, który ma element Wybierz Aby użytkownik mógł wybrać kolor, ponieważ użytkownik nie musi bezpośrednio wpisywać danych, możemy popełnić błąd nie walidacji informacji, ale to tylko oznacza, że ​​mamy lukę w zabezpieczeniach, ponieważ z formularzem, który ma zastosowanie tych samych nazw możemy otrzymać potencjalnie niebezpieczne informacje.
Dlatego po przesłaniu wartości formularza POCZTA, nasz skrypt ocenia możliwe wartości, a w przypadku, gdy jest to jedna z oczekiwanych, przekazujemy ją do naszej tablicy bezpiecznych wartości, jak widać poniżej.

Dzięki temu rozwiązaliśmy problem w prosty sposób, jednak gdyby na liście zamiast trzech kolorów było ich sto, historia prostoty byłaby inna.
W poniższym przykładzie dynamicznie walidujemy pole wpisane przez użytkownika w odpowiedni sposób, do tego musimy użyć wyrażenia regularne i w ten sposób unikamy wprowadzania znaków, które narażają nasze przetwarzanie na ryzyko, oceniamy również rozmiar wpisu, a tym samym unikamy a przelewowy lub przeciążenie naszego typu danych w przetwarzaniu programu. Zobaczmy kod na obrazku:

POWIĘKSZAĆ

Tutaj kluczem do osiągnięcia walidacji jest poprawna wiedza o tym, co chcemy przetworzyć, na przykład w przypadku nazwy użytkownika, o co zwykle prosimy, to znaki alfanumeryczne i myślniki, dlatego w zwykła fraza Sprawdzamy to, potrzebujemy również, aby było większe niż 0 znaków i maksymalnie 32, jeśli to, co wprowadzi użytkownik, spełnia to wszystko, przechodzi walidację, najlepsze jest to, że działa to z wartością taką jak sto, ponieważ jest całkowicie dynamiczny .
Kolejnym zagrożeniem, przed którym musimy się zabezpieczyć, jest wykonywanie skryptów z innych stron, dzięki AJAX Możemy wysyłać formularze od klienta na trasę, uwzględniając rodzaj żądania i żądane przez nas wartości.
SłabośćTen rodzaj słabości sprawia, że ​​bardzo łatwo jest komuś sprawdzić nasz formularz i sprawdzić nasze pola, gdzie posiadając te nazwy i metodę HTTP Spróbuj wysłać niezabezpieczone wartości, aby tego uniknąć, musimy zastosować techniki, które pozwolą nam zweryfikować, skąd pochodzi żądanie i czy można bezpiecznie pozwolić na jego wykonanie, w przeciwnym razie unikaj kontynuowania ścieżki w naszym programie.
Aby uniknąć tego problemu, system tokeny Tak sesje, dzięki czemu po przesłaniu formularza oceniamy, czy sesja jest taka sama, jak ta ustanowiona w bezpieczny sposób, a zatem złośliwy użytkownik nie może kontynuować.
Kluczowym celem atakującego jest możliwość wstawienia swojego kodu do naszego środowiska, w tym celu używają wstrzyknięć kodu SQL, ten atak jest znany jako Wstrzyknięcie SQL, gdzie przy niezabezpieczonych formularzach i niewłaściwym przetwarzaniu możemy otrzymać instrukcje SQL bezpośrednio bez ograniczeń. Na przykład, jeśli nasza ocena SQL jest następujący w naszym skrypcie PHP:

Możemy użyć dowolnego użytkownika systemu jako nazwy użytkownika i dla hasło używamy dwóch skryptów “--” dzięki temu możemy bez problemu przekazać bezpieczeństwo, ponieważ dwa skrypty to komentarz SQL i dlatego hasło nie zostanie ocenione.
Właściwy sposób na ocenić SQL które pochodzi od użytkownika, usuwa znaki specjalne i niebezpieczne, oceniając tylko bezpieczne wyrażenia. Zobaczmy poniżej przykład, jak uniknąć poprzedniego przypadku:
Pierwszą rzeczą, którą musimy zrobić, to: sanityzacja danych, to znaczy zapobiegać przejściu czystego z formy do naszego SQL; Drugą rzeczą jest to, że musimy ocenić, czy jeśli dwie wartości odpowiadają dawaniu dostępu, ale ta ostatnia odpowiada logice każdej z nich, zobaczmy na obrazku, jak osiągamy cel:

POWIĘKSZAĆ

Tutaj to, co zrobiliśmy, to skorzystanie z narzędzia przygotowanych oświadczeń na co pozwala nam księgarnia ChNP do połączenia z Baza danych, dzięki temu osiągamy, że to, co jest wprowadzane, nigdy nie jest brane w innym kontekście, który nie jest danymi, widzimy również, że zamiast używać metody POCZTA Skorzystaliśmy z naszej bezpiecznej macierzy, co oznacza, że ​​nasze dane są już zweryfikowane, więc ryzyko jest mniejsze.
Na tym zakończyliśmy ten samouczek, ponieważ widzimy, że działania, które możemy podjąć, aby nasza aplikacja była bezpieczniejsza, są proste, nie wymagają ludzkiego wysiłku, jednak pomagają nam uniknąć najczęstszych i być może najczęstszych ataków są podane. Istnieje zła percepcja PHP tych, którzy twierdzą, że jest to niepewny język, ale w rzeczywistości brak bezpieczeństwa jest wytwarzany przez programistę, ponieważ język ma tylko narzędzia, których możemy używać do ulepszania i zapobiegania atakom na nasze aplikacje za pomocą danych wprowadzonych przez użytkownika.
wave wave wave wave wave