Czy aktywnie myślisz o bezpieczeństwie podczas kodowania?

9

Czy podczas kodowania aktywnie myślisz o tym, że Twój kod może zostać wykorzystany w sposób, w jaki pierwotnie nie był przeznaczony, a tym samym uzyskać dostęp do chronionych informacji, uruchamiać polecenia lub robić coś innego, czego nie chcieliby Twoi użytkownicy?

gablin
źródło
Co kodujesz? Robię wiele różnych rzeczy.
David Thornley,
9
Tak, często. Zwykle w zdaniach podobnych do „cholera, nie mam czasu, mam nadzieję, że nikt się nie dowie”.
liori

Odpowiedzi:

10

Rodzaj. Uwaga: Jestem ochroniarzem;)

Tak więc pracuję tak, że mam swój model zagrożenia, który opisuje, jakie rodzaje ataków są prawdopodobne przez jakiego rodzaju atakujących. Pomaga to wypracować wymagania bezpieczeństwa. Kiedy faktycznie koduję, robię zwykłe praktyki „bezpiecznego kodowania”, takie jak uważanie, aby zmienne kursora zawsze znajdowały się w granicach, skażone dane wejściowe są dezynfekowane, obsługiwane są błędy. Następnie wracam do mojego modelu zagrożeń, aby zobaczyć, które moduły są najczęściej atakowane przez osoby atakujące; te otrzymują dodatkową recenzję.


źródło
4

Używam standardowych praktyk branżowych, takich jak używanie parametrów SQL. Korzystam z „bezpiecznych” platform, takich jak .NET Framework, i korzystam z funkcji bezpieczeństwa, takich jak tokeny zapobiegające fałszowaniu w ASP.NET MVC. Nie piszę własnych algorytmów szyfrowania, ale rozumiem, co zapewniają te szyfrowania w celu uzyskania korzyści bezpieczeństwa i kiedy muszę ich użyć, aby uzyskać te korzyści bezpieczeństwa.

Krótko mówiąc, korzystam z najlepszych praktyk, ale nie rozwijam własnych narzędzi bezpieczeństwa. W tym względzie nie jestem ekspertem od bezpieczeństwa; Opieram się na innych ekspertach ds. Bezpieczeństwa, którzy prawdopodobnie już głęboko zastanowili się nad tymi problemami i doskonale rozumieją ryzyko i korzyści.

Moje podstawowe podejście do bezpieczeństwa, oprócz zwykłego korzystania z narzędzi bezpieczeństwa, polega na wyeliminowaniu wszelkich możliwych danych wejściowych do systemu, oprócz tych, których oczekuję. Jeśli mam pole numeru ubezpieczenia społecznego, jedyne znaki, które powinny się faktycznie pojawić, to cyfry i myślniki według określonego wzoru.

Sprawdzam poprawność danych wejściowych użytkownika zarówno na kliencie, jak i na serwerze.

Robert Harvey
źródło
Zgadzam się z wykorzystaniem wbudowanych funkcji bezpieczeństwa, ale na pewno musisz pomyśleć o tym, kiedy i jak należy z nich korzystać. Muszę powiedzieć, że jestem zaniepokojony poleganiem na innych, którzy myślą o bezpieczeństwie twojego produktu. Nie zrobili tego.
Michael Shaw
@Ptolemy: Kiedy nie można sparametryzować instrukcji SQL? Kiedy to nie właściwe wykorzystanie token przed fałszerstwem? Jeśli dane są wrażliwe, gdy jest to nie odpowiedni do szyfrowania użyciu?
Robert Harvey
Zastanówmy się przez chwilę nad szyfrowaniem. Pierwsze pytanie, jakiego szyfrowania używasz? użycie złego szyfrowania daje fałszywe poczucie bezpieczeństwa. W pewnym momencie musisz odszyfrować dane. W którym momencie to robisz, jakie jest to ryzyko w porównaniu ze złożonością kodu. Jaką rzeczywistą ochronę zapewnia szyfrowanie? Czy Twój bajtowy kod DLL jest zaszyfrowany lub czy klucz szyfrujący można odczytać z biblioteki DLL? właśnie dlatego używanie funkcji z niewielkim zrozumieniem lub bez zrozumienia jest niebezpieczne.
Michael Shaw
@Ptolemy: Jeśli to masz na myśli mówiąc o bezpieczeństwie, to zgadzam się, że musisz znać te rzeczy, aby prawidłowo korzystać z tych narzędzi.
Robert Harvey
3

Absolutnie.

Bezpieczeństwo jest wszystkim. A dzięki oprogramowaniu numerycznemu idzie to dwukrotnie.
Jeszcze jednego dnia użytkownikowi udało się znaleźć i wykorzystać błąd w jednym z moich starych programów. Szkody były nie do naprawienia. Patrz poniżej:

alternatywny tekst

Kiedyś był okrągły.

Wieża
źródło
7
To wymaga dalszego wyjaśnienia :)
Toby Allen
Dun dun dun dun ...
Mateen Ulhaq
2

Nie, ponieważ nie pracuję w dziedzinie problemów, w których bezpieczeństwo jest istotne (oprogramowanie do masowej wizualizacji danych). I robić pęczku twierdzi w moim kodu (sprawdzanie indeksu, sprawdzanie spójności, etc.), a nie ze względów bezpieczeństwa, ale dlatego, że tak jak błędny kod awarię wcześnie i crash widocznie.

zvrba
źródło
1

Absolutnie. Myślę o lukach w zabezpieczeniach związanych z wstrzykiwaniem, a także o tym, jak moja logika biznesowa będzie działać w środowisku stacjonarnym w porównaniu ze środowiskiem internetowym, oraz o tym, w jaki sposób zabezpieczenia są wdrażane w obu typach środowisk.

Tim Claason
źródło
1

Nie jestem ekspertem od bezpieczeństwa, ale kiedy koduję aplikacje internetowe, zawsze zakładam, że dane wejściowe użytkownika mogą zawierać różnego rodzaju dziwactwa i zawsze należy w pełni uciec i tym podobne. Ponadto staram się, aby Ajax dzwonił z powrotem do serwera, aby sprawdzić, czy użytkownik jest zalogowany (jeśli powinien to zrobić w przypadku tego konkretnego zdarzenia) i czy ma uprawnienia do robienia tego, co chce.

Baza kodów ma zestaw filtrów wejściowych. Nigdy nie sprawdzam bezpośrednio PHP $_GETani $_POSTtablic. Zamiast kwerendy je poprzez funkcję Request::get('parameter', 'filter')z filtrów, takich jak int, texti kilka innych. (I Request::post()oczywiście dla danych POST.)

Wymuskany
źródło
1

Tak. Kiedy pracowałem nad grą dla wielu graczy, wszyscy byli paranoikami exploitów i sposobów oszukiwania. Oszukiwanie może całkowicie zniszczyć grę, nie wspominając o modelach biznesowych związanych ze sprzedażą rzeczy w grze. Tak więc kwestie bezpieczeństwa i środki zapobiegające manipulowaniu były bardzo wysoko na liście priorytetów. Podobało mi się to bardzo. Pracowałem wcześniej nad innymi projektami, w których musiałeś czuć się winny za dłuższą pracę nad kodem, aby upewnić się, że jest bezpieczny.

Promień
źródło
0

Tak. Bezpieczeństwo jest ważne i nie powinno być późniejszą refleksją; dodawanie zabezpieczeń po fakcie jest na ogół trudniejsze niż projektowanie go w aplikacji, a jeśli dodasz je później, prawdopodobnie pewnie coś przegapisz (lub po prostu nie będziesz w ogóle zawracał sobie głowy dodawaniem go).

mipadi
źródło
0

Poznaj ogólne zasady bezpieczeństwa (uczciwość, uwierzytelnianie, autorytet), a następnie przeczytaj kilka książek o tym, jak ludzie od tysiącleci obalają te filary bezpieczeństwa, a będziesz w połowie drogi.

Następnie przeczytaj kilka dobrych książek na temat strategii projektowania i testowania, a dowiesz się, jak zaprojektować testowalność w swojej architekturze.

Teraz dochodzimy do tego, że myślę o bezpieczeństwie. Zastanawiam się, jak mogę zweryfikować źródło danych. Czy to ważne, czy dane zostały zmienione, kto jest źródłem danych, czy jestem tego pewien? jak można to zmienić itp ...

Wpływa to na projekt. Pliki konfiguracyjne mogą mieć zaszyfrowane sekcje kluczowe lub poszczególne pola mogą być jawne z powiązanym polem podpisu. Sprawy stają się bardziej skomplikowane w przypadku usług internetowych, ponieważ należy spodziewać się tam większego poziomu wrogości.

Następnie podczas testowania, jak to wszystko przetestować. Jakie są twoje maksymalne wpisy danych, co się stanie, jeśli przekroczysz granice oprogramowania, jak sobie z tym poradzi? Czym on ufa? jak możesz sfałszować to zaufanie?

Michael Shaw
źródło
0

Tak.

W przeszłości miałem do czynienia z wystarczającą liczbą hakerów, aby wiedzieć, że nieustannie próbują skompromitować każdą dużą witrynę, a jest tam wystarczająco dużo botów, że nawet małe witryny nie są bezpieczne.

Cały czas staram się myśleć jak haker , do tego stopnia, że ​​czasami martwię się moimi współpracownikami o zwykłe komentarze na temat tego, w jaki sposób systemy, które uważamy za oczywiste, mogą być grane.

realworldcoder
źródło
0

Powinno to być coś, co każdy programista wbudowuje w proces od podstaw, w większym lub mniejszym stopniu, w zależności od aplikacji itp. Niestety, ponieważ deweloperzy zwykle nie podają ceny za bezpieczeństwo, kupujący nie myślą o tym ( Wiem, że jest to trochę catch-22, ponieważ jeśli kupujący chcą najtańszej oferty, może nie obejmować bezpieczeństwa)

Jako programista możesz zyskać wyraźną przewagę, jeśli jesteś specjalistą w tej dziedzinie - szczególnie myślę o bankach i usługach finansowych, ale mają zastosowanie również inne branże. Obecnie mogą przeznaczyć 70–100 tys. Na szkolenie nowego absolwenta, którego zadaniem będzie przyspieszenie procesów, bezpieczeństwa i innych aspektów tej organizacji. Jeśli możesz zaoszczędzić im 30 tys., To jest to dobre CV plus!

W Wielkiej Brytanii, Institute of Information Security Professionals oraz w Szkocji Centre of Excellence in Security and Cybercrime ściśle współpracują z uniwersytetami, pomagając w przeglądaniu materiałów szkoleniowych, prowadząc wykłady gościnne na temat rzeczywistych skutków złego kodowania i ułatwiając letnie staże (np. programiści umieszczeni w działach oszustw w organach ścigania.) Większość organizacji wspierających robi to za darmo, ponieważ może potencjalnie zaoszczędzić im dużą ilość pieniędzy - dla mnie brzmi to jak wartość.

(zrzeczenie się odpowiedzialności - byłem pracownikiem ds. bezpieczeństwa w różnych globalnych organizacjach)

Rory Alsop
źródło