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?
9
Odpowiedzi:
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
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.
źródło
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:
Kiedyś był okrągły.
źródło
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.
źródło
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.
źródło
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
$_GET
ani$_POST
tablic. Zamiast kwerendy je poprzez funkcjęRequest::get('parameter', 'filter')
z filtrów, takich jakint
,text
i kilka innych. (IRequest::post()
oczywiście dla danych POST.)źródło
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.
źródło
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).
źródło
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?
źródło
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.
źródło
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)
źródło