Wiedza na temat bezpieczeństwa jest dobrym pomysłem przed napisaniem gry wieloosobowej, ale takie rzeczy jak skanowanie portów i hackowanie routerów, a nawet kryptografia, nie są tym, na co powinieneś zwrócić uwagę na tym etapie.
Zamiast tego powinieneś dowiedzieć się o zaufaniu , walidacji i solidności . Wiedza o psychologii, zwłaszcza o wyzwaniach i nagrodach, nie jest zła. Naprawdę nie mogę się tego wiele nauczyć w krótkiej odpowiedzi, takiej jak ta, ale oto kilka wskazówek, które pomogą rozpocząć bezpieczne programowanie:
Traktuj wszelkie dane wejściowe spoza Twojej bezpośredniej kontroli, jakby nie były zgodne z oczekiwaniami. Obejmuje to cały wkład użytkowników, wszystko, co otrzymujesz przez sieć, a nawet wszystko z innych części bazy kodu. Postaraj się nie myśleć o tym, co powinno zawierać dane wejściowe , a nawet o tym, co atakujący mógłby cię w zamian nakarmić, ale po prostu o tym, co może być dane wejściowe i jak bezpiecznie obsługiwać wszelkie możliwe dane wejściowe.
Ponieważ wspominasz o PHP i MySQL, zacznij od spojrzenia na iniekcję SQL i ataki typu cross-site scripting . Jeśli znasz również języki niskiego poziomu, takie jak C, przyjrzyj się atakom przepełnienia bufora . Nie myśl tylko o tym, jak im zapobiegać - pomyśl o tym, jak napiszesz swój kod, aby takie błędy po prostu nie mogły się zdarzyć, przypadkowo lub ze złej woli. Twój język programowania prawie na pewno ma narzędzia, które ci to umożliwiają, jeśli tylko nauczysz się korzystać z nich tak, jak powinny.
W grze wieloosobowej prawdopodobnie na komputerze gracza działa kod klienta. Przyzwyczaj się do idei, że wystarczająco inteligentny i zdeterminowany użytkownik zawsze będzie w stanie skompromitować taki kod i sprawić, że zrobi to , co chce. Nie ufaj klientowi , jeśli możesz tego uniknąć. Jeśli nie możesz tego uniknąć, upewnij się, że ufasz tylko tak dalece, jak musisz.
Staraj się nie wkładać wszystkich jajek do jednego koszyka. Jeśli nie możesz uruchomić gry, witryny i bazy danych na osobnych serwerach, przynajmniej uruchom je na osobnych kontach i upewnij się, że żaden z nich nie ma do siebie dostępu więcej niż potrzebują. OK, może zarówno Twoja gra, jak i witryna potrzebują dostępu do bazy danych użytkowników, ale na pewno nie potrzebują do niej dostępu administracyjnego , prawda? Być może nie potrzebują nawet więcej niż tylko dostępu do odczytu . Przynajmniej, nawet jeśli na początku nie wymuszasz tak ścisłego podziału na przedziały, zaprojektuj swoją grę, aby można ją było wprowadzić później - nie wymagaj od serwera gry dostępu administratora do bazy danych. Pamiętaj, że całe oprogramowanie ma błędy, a wcześniej czy później ktoś to zrobi znajdź dziurę w swoim.
Ogólnie rzecz biorąc, należy pamiętać o bezpieczeństwie, ponieważ jest to sposób myślenia . Nie chodzi o znajomość najnowszych modnych słów bezpieczeństwa ani o to, jak działają najnowsze ataki, ani o próbę przewidzenia, co zrobią hakerzy, zanim to zrobią (chociaż wszystkie te rzeczy mogą się przydać).
Rzeczywiste bezpieczne programowanie polega na nauczeniu się korzystania z narzędzi, które masz tak, jak powinny być używane, na dzieleniu kodu na części wystarczająco małe, abyś mógł zrozumieć, co robi każdy z nich (i upewnić się, że robią to dobrze, nawet jeśli inne części są zagrożone), a także o napisaniu kodu, aby spodziewać się nieoczekiwanego. Jeśli to wszystko zrobisz, nie będziesz musiał wiedzieć, co hakerzy mogą spróbować, ponieważ będziesz przygotowany na wszystko.