it-swarm-es.tech

¿Cómo desarrollar una extensión segura de Joomla?

Antes de escribir mi primera extensión, me gustaría entender cómo diseñarla lo más invulnerable posible.

¿Existe un conjunto de reglas para escribir una extensión segura de Joomla?

Puedo imaginar solo inyección SQL como posible amenaza, así que sé que la entrada de formulario nunca se puede insertar directamente en el comando SQL 'tal cual'.

¿Qué otros vectores de ataque debo tener en cuenta al escribir un módulo o complemento personalizado?

7
miroxlav

Una cosa principal que ha señalado es la inyección SQL. Esto es algo que algunas personas que he visto parecen perderse por completo y comienzan a desarrollar usando estándares de codificación de Joomla que no son y comienzan a escribir colas SQL usando mysql_* comandos.

La segunda cosa que mencioné en el primer punto, que siempre se adhiere a los estándares de codificación de Joomla. El único momento en que no deberías es cuando Joomla no proporciona una alternativa.

En tercer lugar, si su extensión crea una carpeta o archivo, asegúrese de darles los permisos correctos y no comience a crear la carpeta chmod 777. Esta es la razón exacta por la cual K2, que es una de las extensiones más populares, se consideró vulnerable. y eliminado de JED temporalmente.

Siempre use tokens con formularios. Esto asegurará que no se puedan ejecutar ataques no autorizados de otros sitios. Para obtener más información sobre esto, eche un vistazo a lo siguiente:

http://docs.joomla.org/How_to_add_CSRF_anti-spoofing_to_forms

Si no está seguro de que algo ya haya realizado algunas pruebas, intente ir a Code Review Stackexchange ya que puede haber alguien dispuesto a verificar su código por usted.

Una cosa que puede hacer es echar un vistazo a Lista de extensiones vulnerables para ver las extensiones que se han eliminado temporalmente (hasta que se arreglen) del Directorio de extensiones de Joomla debido a que no son seguras.

Espero que esto te dé un poco de información y buena suerte con tu primera extensión

8
Lodder

Siguiendo la documentación oficial, aquí hay algunos pasos sobre el tema Pautas de codificación segura :

  • Valide cualquier dato que obtenga de la solicitud (POST, GET, COOKIES, etc.). No confíes en el usuario y sé lo más estricto posible. Si espera un integer, no permita que se acepte un string.

  • Carga de archivos - evite, siempre que sea posible, aceptar archivos en páginas web públicas. Si necesita validar la metainformación del archivo y hacer todas las verificaciones posibles.

  • Construyendo consultas SQL - entienda cómo funcionan las inyecciones SQL pero también cómo maneja los errores de la base de datos. Cuantos más errores muestres, más información darás sobre la estructura de tu base de datos. Idealmente, registra los errores pero no los muestra.

  • Formas seguras utilizando un token

7
Valentin Despa

Es principalmente seguro para la mayoría de las extensiones. Sin embargo, tenga mucho cuidado con cualquier cosa que necesite guardar/editar archivos, un filtrado o validación inadecuados pueden crear un punto de entrada.

Siempre que use la API de JDatabase correctamente, también debe estar protegido contra la inyección de SQL. Puedes mirar com_content o plg_system_loadpositon en una instalación de Joomla para ayudar a descubrir algunos de los puntos más finos de varias API de Joomla (ya que la documentación es un poco difícil de seguir).

También usando las API si fallan y se usa algún tipo de vulnerabilidad, la solución probablemente terminaría siendo una actualización central (si es JDatabase, puedo imaginar una versión de Joomla dentro de una hora si su descubrimiento: D), en lugar de una actualización a su extensión.

Esta es una falla importante del código abierto: cualquier persona que intente hacer daño tiene toda la información necesaria para hacerlo. Si es una extensión cerrada (no disponible públicamente), es probable que nunca haya un problema.

Por último, cuanto más simple es la extensión (menos código), más probable es que sea 'invulnerable'. A medida que crece una extensión, hay muchos más lugares donde puede ocurrir un pequeño error para crear un punto de entrada.

4
Jordan Ramstad