Las decisiones básicas de diseño pueden servir como medidas de seguridad de "primer paso" para desincentivar los exploits. El principio fundamental es diseñar sistemas donde hacer trampa sea imposible o no proporcione una ventaja significativa, en lugar de intentar detectar y prevenir la trampa después de que haya ocurrido.
Considera un juego de disparos donde los jugadores ganan puntos por muertes. Un explotador podría crear bots que teletransportan a la misma ubicación para ser asesinados repetidamente por puntos fáciles. Este escenario ilustra la diferencia entre enfoques reactivos y defensivos:
| Enfoque | Resultado predecible |
|---|---|
| Perseguir bots escribiendo código que intente detectarlos (enfoque reactivo). | |
| Reducir o eliminar las ganancias de puntos por muertes de jugadores recién aparecidos (enfoque defensivo). |
Escenarios adicionales de diseño defensivo:
| Escenario de posible exploit | Enfoque reactivo (menos efectivo) | Enfoque defensivo (más efectivo) |
|---|---|---|
| (Obby) El explotador se teletransporta al final para reclamar recompensas | Solo verificar la posición final del jugador e intentar detectar tiempos de finalización imposibles | Diseñar con puntos de control obligatorios y secuenciales. El servidor valida que cada punto de control fue activado en orden antes de otorgar recompensas. Puedes agregar otra capa marcando a los jugadores que completan etapas más rápido de lo humanamente posible. El diseño de la experiencia (requiriendo puntos de control) es lo que permite la validación efectiva del lado del servidor. |
| (Combate) El cliente informa de daños imposibles | Intentar detectar y filtrar valores de daño imposibles | El servidor calcula todo el daño a partir de las estadísticas de armas del lado del servidor y valida los impactos mediante raycasting del lado del servidor |
| (Economía) El explotador duplica artículos a través de solicitudes rápidas | Intentar detectar solicitudes duplicadas o patrones inusuales | Implementar tiempos de reutilización del lado del servidor y validar todas las transacciones contra el estado actual del inventario del jugador |