Знати щось про безпеку - це гарна ідея перед тим, як спробувати написати багатокористувацьку гру, але такі речі, як сканування портів та взлом маршрутизатора, або навіть криптографія, - це не те, на що слід шукати на цьому етапі.
Швидше, те, про що слід дізнатися, - це довіра , валідація та надійність . Знати трохи про психологію, особливо про виклики та нагороди - теж не погано. Я не можу насправді навчити вас багато чого з короткої відповіді, як це, але ось кілька порад, щоб розпочати роботу із безпечним програмуванням:
Ставтесь до будь-яких вкладів, що знаходяться поза вашим безпосереднім контролем, так, ніби це може бути не те, що ви очікуєте. Це включає в себе всі дані користувачів, все, що ви отримуєте по мережі, і навіть що-небудь з інших частин вашої кодової бази. Постарайтеся , щоб в мисленні не думати про те , що вхід повинен містити, або навіть про те, що зловмисник може годувати вас замість цього, а просто про те, що вхід може можливо бути і як безпечно обробляти будь-який можливий внесок ви могли б отримати.
Оскільки ви згадуєте PHP та MySQL, почніть з перегляду ін'єкцій SQL та атак міжсайтового сценарію . Якщо ви також знайомі з мовами низького рівня, такими як C, вивчіть атаки переповнення буфера . Не думайте просто про те, як їх запобігти - подумайте, як би ви написали свій код, щоб подібні помилки просто не траплялися, випадково чи зловмисно. У вашій мові програмування майже напевно є інструменти, які дозволять вам це робити, якщо ви просто навчитесь ними користуватися, як вони призначені.
У багатокористувацькій грі, напевно, на комп’ютері гравця буде працювати якийсь код клієнта. Звикайте з думкою, що досить розумний і рішучий користувач завжди зможе поставити під загрозу такий код і змусити його робити те, що вони хочуть. Не довіряйте клієнту , якщо ви зможете цього уникнути. Якщо ви не можете цього уникнути, переконайтеся, що довіряєте йому лише наскільки це потрібно.
Намагайтеся не класти всі яйця в один кошик. Якщо ви не можете запустити свою гру, веб-сайт та свою базу даних на окремих серверах, принаймні запускайте їх під окремими обліковими записами та переконайтесь, що жоден з них не має більше доступу один до одного, ніж потрібно. Гаразд, можливо, і вашій грі, і вашому веб-сайту потрібен доступ до вашої бази даних користувачів, але їм точно не потрібен доступ адміністратора , чи не так? Можливо, їм навіть не потрібно більше, ніж лише читати доступ до нього. Принаймні, навіть якщо ви не застосуєте настільки суворої відділення для початку, спроектуйте свою гру так, щоб її можна було встановити пізніше - не змушуйте ваш ігровий сервер вимагати доступу адміністратора до бази даних. Пам'ятайте, що все програмне забезпечення має помилки, і рано чи пізно хтось зробить це знайти дірку в безпеці у вашому.
Взагалі, про безпеку потрібно зрозуміти, що це розум . Йдеться не про те, щоб знати найновіші головоломки щодо безпеки чи про те, як працюють останні атаки, або про те, що намагаються передбачити, що зроблять хакери, перш ніж вони це робитимуть (хоча всі ці речі можуть принести користь).
Фактичне безпечне програмування - це навчитися користуватися інструментами, якими ви користувалися, про поділ свого коду на шматки, досить малі, щоб ви могли зрозуміти, що робить кожен з них (і переконайтесь, що вони це роблять правильно, навіть якщо інші частини компрометовані) і про написання коду очікуйте несподіваного. Якщо ви все це зробите, вам не потрібно буде знати, що можуть спробувати хакери, адже ви будете готові до всього.