Знать что-то о безопасности - хорошая идея, прежде чем пытаться написать многопользовательскую игру, но такие вещи, как сканирование портов и взлом роутеров, или даже криптография, не являются тем, на что вы должны обратить внимание на данном этапе.
Скорее, вещи, о которых вы должны узнать, это доверие , проверка и надежность . Знание немного о психологии, особенно о проблемах и наградах, тоже не плохо. Я не могу многому научить вас в таком коротком ответе, как этот, но вот несколько советов, которые помогут вам начать работу с безопасным программированием:
Относитесь к любому входу извне вашего прямого контроля, как если бы он мог не соответствовать вашим ожиданиям. Это включает в себя весь пользовательский ввод, все, что вы получаете по сети, и даже что-нибудь из других частей вашей кодовой базы. Постарайтесь не думать о том, что должен содержать ввод , или даже о том, что злоумышленник вместо этого может кормить вас, а просто о том, что ввод может быть, и как безопасно обрабатывать любой возможный ввод, который вы можете получить.
Поскольку вы упоминаете PHP и MySQL, начните с рассмотрения внедрения SQL-кода и межсайтовых скриптовых атак. Если вы также знакомы с языками низкого уровня, такими как C, изучите атаки переполнения буфера . Не просто думайте о том, как их предотвратить, подумайте, как бы вы написали свой код, чтобы такие ошибки просто не могли произойти, будь то случайно или со злым умыслом. Ваш язык программирования почти наверняка имеет инструменты, позволяющие вам это делать, если вы просто научитесь использовать их так, как они предназначены.
В многопользовательской игре, вероятно, на компьютере игрока будет работать некоторый клиентский код. Привыкайте к мысли, что достаточно умный и решительный пользователь всегда сможет скомпрометировать такой код и заставить его делать то, что он хочет. Не доверяйте клиенту , если вы можете избежать этого. Если вы не можете избежать этого, убедитесь, что доверяете только так, как вам нужно.
Старайтесь не класть все яйца в одну корзину. Если вы не можете запустить свою игру, свой веб-сайт и свою базу данных на разных серверах, хотя бы запустите их под разными учетными записями и убедитесь, что ни один из них не имеет больше доступа друг к другу, чем им нужно. Хорошо, может быть, и вашей игре, и вашему сайту нужен доступ к вашей базе данных пользователей, но им, безусловно, не нужен доступ администратора , не так ли? Возможно, им даже не нужно больше, чем доступ только для чтения. По крайней мере, даже если вы сначала не применяете такую строгую компартментализацию, спроектируйте свою игру так, чтобы она могла быть реализована позже - не заставляйте ваш игровой сервер требовать административного доступа к базе данных. Помните, что все программное обеспечение имеет ошибки, и рано или поздно кто- то найти дыру в безопасности в вашем.
В общем, что нужно понимать о безопасности, так это то, что это образ мышления . Речь идет не о знании последних модных слов безопасности, ни о том, как работают последние атаки, ни о попытках предугадать, что хакеры будут делать до того, как они это сделают (хотя все эти вещи могут быть полезны).
На самом деле безопасное программирование - это изучение того, как использовать имеющиеся у вас инструменты так, как они должны были быть использованы, разделение вашего кода на достаточно маленькие части, чтобы вы могли понять, что делает каждый из них (и убедиться, что они делают это правильно, даже если другие части скомпрометированы), и о написании вашего кода ожидать неожиданного. Если вы сделаете все это, вам не нужно будет знать, что могут попробовать хакеры, потому что вы будете готовы ко всему.