Jesteś zatrudniony, aby naprawić mały błąd w witrynie wymagającej dużych zabezpieczeń. Patrząc na kod, jest wypełniony dziurami w zabezpieczeniach. Co robisz? [Zamknięte]

109

Zostałem zatrudniony przez kogoś do drobnych prac na stronie. To strona dla dużej firmy. Zawiera bardzo wrażliwe dane, więc bezpieczeństwo jest bardzo ważne. Po przeanalizowaniu kodu zauważyłem, że jest on wypełniony lukami w zabezpieczeniach - czytaj, wiele plików PHP rzuca dane wejściowe użytkownika bezpośrednio do żądań mysql i poleceń systemowych.

Problem polega na tym, że osoba, która stworzyła dla niego witrynę, jest programistą z rodziną i dziećmi zależnymi od tej pracy. Nie mogę po prostu powiedzieć: „Twoja strona to park rozrywki dla dzieciaków ze skryptami. Pozwól, że zrobię to za ciebie, a wszystko będzie dobrze”.

Co byś zrobił w tej sytuacji?

Aktualizacja:

Postępowałem zgodnie z kilkoma dobrymi radami i uprzejmie poinformowałem programistę, że znalazłem kilka możliwych luk bezpieczeństwa w witrynie. Wskazałem linię i powiedziałem, że może tam istnieć podatność na ataki typu SQL injection i zapytałem, czy on o tym wie. Odpowiedział: „Jasne, ale myślę, że aby go wykorzystać, atakujący powinien mieć informacje o strukturze bazy danych; muszę lepiej zrozumieć” .

Aktualizacja 2:

Powiedziałem, że nie zawsze tak jest i zasugerowałem, że podąża za linkiem do pytania Przepełnienie stosu, aby sobie z tym poradzić: Jak zapobiec iniekcji SQL w PHP? Powiedział, że to przestudiuje i podziękował mi za to, że mu wcześniej powiedziałem. Myślę, że moja część się skończyła, dzięki chłopaki.

MaiaVictor
źródło
29
Naprawdę podobałoby mi się rozwiązanie, które nie wiąże się z rujnowaniem czyjegoś życia. Zostawiłbym to w spokoju, ale wiem też, że taka dziura w bezpieczeństwie mogłaby też zrujnować życie niektórych ludzi. Skomplikowany.
MaiaVictor,
18
Osoba atakująca może wykorzystać exploit, aby uzyskać informacje o strukturze bazy danych. Nie należy nigdy bagatelizować żadnej luki w iniekcji SQL .
Dave Rager
17
Pokaż mu, jak wykorzystać jakąś lukę bez korzystania z wiedzy o bazie danych. To go przestraszy.
Euforia
74
Chcę tylko powiedzieć dobrą robotę za szukanie innej osoby / programisty, którego nie znasz. Zrujnowanie ich życia nie jest mniej straszne, ponieważ popełniły błąd, a ty ich nie znasz, i pochwalam cię za wzięcie tego pod uwagę.
Stal
8
@Dokkat Problem dotyczy równowagi. Z punktu widzenia programisty, niskiej jakości programista z żoną i dzieckiem faktycznie zagroził firmie, a tym samym pracy wielu pracowników z żonami i dziećmi. Ponadto problem często komplikuje emocjonalny problem: „Zły programista robi coś, co utrudnia mi życie. Teraz muszę stracić czas z rodziną. Są dla mnie ważniejsze niż on. Wydaje się to niesprawiedliwe. „ To irracjonalna reakcja, ale ludzie bądźcie ludźmi.
deworde

Odpowiedzi:

114

Przede wszystkim priorytetem jest zamknięcie luk bezpieczeństwa.

Jeśli współpracujesz bezpośrednio z inżynierem, który to napisał, udokumentuj wszystko i przekaż to innemu inżynierowi.

Jeśli nie, powiedz swojemu pracodawcy, że kwestie bezpieczeństwa są większe niż początkowo sądzono i że strona wymaga dużo pracy. Poproś o współpracę z głównym programistą, który jest na stronie, i zaoferuj nauczenie ich na temat bezpieczeństwa PHP (nie obiecuj, że będziesz ekspertem, ale zaoferuj szkolenie go we wszystkim, co wiesz), aby ta osoba mogła go przejąć po skończeniu.

Nie rób z tego problemu „ten facet jest zły, zwolnij go”. Podejdź do tego z perspektywy „Hej, znalazłem kilka potencjalnych błędów, które wymagają naprawy statystyk, które wydają się wynikać z pewnych ignorancji / powszechnych nieporozumień na temat bezpieczeństwa witryny. Chciałbym również porozmawiać o twoim rozwoju, abyśmy mogli ulepszyć twoją stronę i miejmy nadzieję, że w przyszłości uniknę tych problemów ”.

Eric Hydrick
źródło
1
Świetne odpowiedzi ogólnie. Temat jest subiektywny, więc zaznaczę twój jako najbardziej akceptowany przez społeczność.
MaiaVictor,
1
Jeśli pracujesz Z inżynierem, ale otrzymujesz wynagrodzenie od kierownictwa, czy nie powinieneś zgłaszać TO do kierownictwa? Co się stanie, jeśli inżynier Ci podziękuje, ale w momencie wyjścia niszczy raport?
Konerak,
Albo powiedz obu, albo najpierw powiadom inżyniera i sprawdź, czy błędy są tworzone i śledzone w dowolnym systemie, którego używają. Jeśli błędy nie zostaną utworzone, powiedz zarządowi.
Eric Hydrick
2
Bardziej podobała mi się ta odpowiedź: programmers.stackexchange.com/a/189206/28351 , ponieważ dla pracodawcy priorytety są różne. Najpierw zgłoś dziury w zabezpieczeniach, a następnie napraw mały błąd.
dokładnie
80

Istnieje różnica między ignorancją a niekompetencją. Był czas, kiedy nie wiedziałeś, co to jest wstrzyknięcie SQL, i nie ma powodu, aby sądzić, że oryginalny programista nie jest w stanie naprawić problemów, gdy tylko zostanie o nich poinformowany.

Więc powiedz im. Bądź konkretny i obiektywny i bądź gotów odpowiedzieć na pytania, podać przykłady exploitów i rekomendacje dotyczące poprawek. Jeśli nadal nie otrzymają tego po tym momencie, możesz naprawdę nie umieścić na stronie żadnych swoich danych osobowych.

Karl Bielefeldt
źródło
26
+1. Ignorancję można naprawić. Niekompetencja to dla niektórych kariera!
Mitch Wheat
20

Twoim zadaniem nie jest ponowne wykonanie dla niego witryny. To naprawić mały błąd. Jeśli jednak zauważysz problemy z bezpieczeństwem, które powinny zostać naprawione, możesz porozmawiać o tym z właścicielem witryny i zaoferować wgląd w problem.

Nie krytykuj ani nie mów negatywnie o pierwotnym deweloperze, ani nie komentuj, jak okropny jest ten kod. Bądź pełen szacunku i profesjonalny. Możesz zaoferować współpracę z programistą w celu rozwiązania problemów. Nie próbuj go naprawiać samodzielnie ani nie oferuj rozwiązania, chyba że masz umowę dotyczącą rozwiązania problemu. Jeśli zastosują się do twoich rad, a mylisz się, mogą do ciebie wrócić.

Dave Rager
źródło
17

Przede wszystkim napraw to, za co cię wynajęli. Jeśli tego nie zrobisz, będziesz postrzegany jako typ konsultanta, który jest zainteresowany zrobieniem dla siebie więcej pracy niż jej wykonaniem.

Wraz z poprawkami musisz podać im listę rzeczy, które zauważyłeś, że są złe z punktu widzenia bezpieczeństwa, i dlaczego te rzeczy są złe.

Michael Kohne
źródło
13

Nie zrobi nic dobrego, jeśli nie zgłosi problemów. Jeśli wykonałeś konkretne zadanie, do którego zostałeś zatrudniony, ale udokumentuj inne problemy związane z bezpieczeństwem i zgłoś je odpowiedniej osobie, prawdopodobnie osobie, dla której zgłaszasz się za zadanie, do którego zostałeś zatrudniony.

Jest to sytuacja, w której przydadzą się silne umiejętności miękkie, ponieważ radzenie sobie z tym taktem będzie wymagało nie odkładania pracy wykonanej przez innych na stronie i nie wywoływania poczucia, że ​​deweloper kwestionuje jego talent.

Oczywiście unikaj słów takich jak „bzdury, złe, złe, zagadkowe”, odnosząc się do kodu / wad i podobnych słów dla programisty, który napisał witrynę.

Takielunek
źródło
4
Dodałbym: upewnij się, że programista jest świadomy wagi wad i tego, jak można je wykorzystać. Poświęcenie czasu na przeprowadzenie kontrolowanego „ataku” na lokalną maszynę z obecnym deweloperem może wiele zrobić, aby uświadomić mu problem, co pozostawia wiele do zaoferowania, jak zahartować kod.
Andrew Gray,
7

Oprócz innych odpowiedzi, co możesz zrobić, to wskazać deweloperowi na niektóre zasoby, na temat tego, jak łatwo można wykorzystać problemy z wstrzykiwaniem SQL, na przykład sqlmap, które jest zautomatyzowanym narzędziem do wykorzystywania SQL Injection.

To, co w przeszłości okazało się skuteczne w zademonstrowaniu powagi tego rodzaju problemów, to pokazanie, co można z tym zrobić, więc jeśli rzucisz coś takiego przeciwko deweloperowi. kopię witryny, aby pokazać wyodrębnianie danych itp., możesz przekonać ich o powadze.

Ross McCune
źródło
4
Pamiętaj, że wiąże się to z pewnym ryzykiem, ponieważ możesz sprawić, że będziesz wyglądać jak „haker”. Menedżerowie niekoniecznie rozumieją pojęcia takie jak „istniejąca luka”, „kopia rozwojowa” i „analityk bezpieczeństwa w białym kapeluszu”
deworde
0

Pierwszy i jedyny; Kierownictwo nie chce słyszeć o problemach. Zostałem zwolniony z Biura Zarządzania Personelem (poświadczenia bezpieczeństwa dla białego domu), ponieważ wskazałem, jak niepewny jest ich system. To było dawno temu, ale postawy kierownictwa się nie zmieniły.

Rozwiąż problem z deweloperem za pośrednictwem poczty e-mail, aby uzyskać ślad, a następnie iść lub uciec. Kiedy w końcu będą mieli problem, jako kontrahent będą próbować obwinić cię, bez względu na jakiekolwiek zaangażowanie, nawet zdalnie związane z problemem.

Problem tak fundamentalny jak wstrzyknięcie SQL wskazuje, że były one tanie, kiedy początkowo opracowywali system, i są szanse, że są teraz w najlepszym razie tanie. Zdobądź od nich to, co możesz, gdy są jeszcze w biznesie, ale szukaj rozwoju biznesu gdzie indziej.

Joe
źródło
3
„Zarząd nie chce słyszeć o problemach” - dodać kilka rozumowania / odniesień do obsługi twierdzenie (które brzmi wiarygodnie do mnie, ale to naprawdę nie ma znaczenia) i będę odwołać downvote
komara