Prácticas recomendadas de seguridad
Un resumen condensado de las 25 prácticas de seguridad de programas más importantes extraídas de todas las páginas de esta sección.
Busca en todas las páginas de la documentación
Un resumen condensado de las 25 prácticas de seguridad de programas más importantes extraídas de todas las páginas de esta sección.
Signer en cada mutación: Asocia cada movimiento de lamport/token a un Signer requerido (Comprobaciones de Signer y Propietario).
Cuentas tipadas sobre UncheckedAccount: Usa Account<'info, T> por defecto; documenta las excepciones.
has_one para campos de autoridad: Vincula las claves públicas de autoridad del estado a las cuentas de firma.
Restricciones de Mint y propietario: Las cuentas de token deben coincidir con el mint esperado y el enlace de la bóveda (Validación de Cuentas).
Semillas canónicas de PDA: Almacena el bump en la inicialización; usa seeds + bump en cada ix de PDA (Ataques de PDA).
Evita init_if_needed: Prefiere init dedicado; si se usa, protégelo con is_initialized (Reinicialización).
Matemáticas comprobadas en todas partes: No uses +/- simples en saldos (Aritmética).
Intermedios u128: Multiplica antes de dividir para las matemáticas de participación y AMM.
Redondea contra los usuarios: Las comisiones se redondean hacia arriba; los pagos se redondean hacia abajo - documenta la política.
Comprobaciones-efectos-interacciones: Actualiza el estado antes de CPI (Riesgos de CPI).
Lista de permitidos de programas de CPI: require_keys_eq! en cada ID de programa externo.
Programa de token tipado: Usa Program<'info, Token> en lugar de AccountInfo en bruto.
Antigüedad de oráculo: get_price_no_older_than con una antigüedad máxima estricta (Oráculos).
Fija las claves públicas de oráculo: Nunca las proporcione el usuario sin una lista de permitidos.
Sin metadatos de cuenta duplicados: constraint = a.key() != b.key() donde sea posible el doble conteo.
Sysvars tipados: Sysvar<'info, Clock> en lugar de cuentas falsificables.
Atributo close de forma segura: close = destination solo con comprobaciones de autoridad.
Ejecuta el catálogo de Sealevel por PR: Pase rápido contra S1-S15 (Catálogo).
Pruebas negativas de LiteSVM: Conjuntos de cuentas adversarias para cada ix (Pruebas de CPIs).
Fuzzing de rutas matemáticas: Trident en los manejadores de depósito/retiro/intercambio (Fuzzing).
Compilaciones verificables: Publica el hash de solana-verify con las versiones.
Autoridad de actualización multisig: Sin actualización de clave única en TVL de producción.
Minimiza el alcance de invoke_signed: Estrecha las semillas de PDA por CPI.
Audita antes de la TVL en mainnet: Sigue el Flujo de trabajo de auditoría.
Cierre ante fallos: Cuando la validación sea incierta, devuelve un error; nunca continúes con esfuerzo mínimo.
Restricciones de Signer + mint + propietario en todas las instrucciones de token: previene la mayoría de los exploits históricos.
Prohíbelo en rutas de administración de producción; si se usa para la incorporación de usuarios, es obligatorio el guardián is_initialized.
Las restricciones añaden CU pero son mucho más baratas que los exploits: optimiza solo después de la cobertura de seguridad.
Versiones de la pila: Esta página se escribió para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0 y LiteSVM 0.6.x.
Revisado por Chris St. John·Última actualización: 16 jul 2026