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.
źródło
Odpowiedzi:
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 ”.
źródło
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.
źródło
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ć.
źródło
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.
źródło
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ę.
źródło
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.
źródło
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.
źródło