web-dev-qa-db-fra.com

Comment développer une extension Joomla sûre?

Avant d’écrire ma première extension, je voudrais comprendre comment la concevoir aussi invulnérable que possible.

Existe-t-il un ensemble de règles pour écrire une extension Joomla sécurisée?

Je ne peux imaginer que injection SQL comme menace possible, donc je sais que la saisie de formulaire ne peut jamais être insérée directement dans la commande SQL 'en l'état'.

Quels sont les autres vecteurs d'attaque que je devrais connaître lorsque j'écris un module ou un plugin personnalisé?

7
miroxlav

Une des principales choses que vous avez soulignée est l’injection SQL. C’est une chose que quelques personnes que j’ai déjà vue semblent manquer complètement et commencent à se développer à l’aide de non normes de codage Joomla et commencent à écrire du code SQL queires en utilisant mysql_* commandes.

Deuxième chose que j'ai en quelque sorte mentionnée dans le premier point, qui est toujours conforme aux normes de codage Joomla. La seule fois où vous ne devriez pas, c'est quand Joomla ne fournit pas d'alternative.

Troisièmement, si votre extension crée un dossier ou un fichier, assurez-vous de leur attribuer les autorisations appropriées et ne commencez pas à créer le dossier chmod 777. C’est la raison exacte pour laquelle K2, l’une des extensions les plus populaires, était considérée comme vulnérable. et retiré temporairement de JED.

Toujours utiliser des jetons avec des formulaires. Cela garantira qu'aucune attaque non autorisée provenant d'autres sites ne pourra être exécutée. Pour plus d'informations à ce sujet, consultez les éléments suivants:

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

Si vous n'êtes pas sûr que quelque chose ait déjà effectué des tests, essayez de vous reporter à Code Review Stackexchange , car il se peut qu'une personne soit prête à vérifier votre code pour vous.

Vous pouvez notamment consulter la liste Liste des extensions vulnérables pour voir les extensions temporairement supprimées du répertoire d'extensions Joomla pour cause de sécurité.

J'espère que cela vous donne un peu de perspicacité et bonne chance avec votre première extension

8
Lodder

Après la documentation officielle, voici quelques étapes sur le sujet Instructions de codage sécurisé :

  • Validez toutes les données que vous obtenez de la demande (POST, GET, COOKIES, etc.). Ne faites pas confiance à l'utilisateur et soyez aussi strict que possible. Si vous attendez un integer, n'autorisez pas un string à être accepté.

  • Chargement de fichiers - évitez, dans la mesure du possible, d’accepter des fichiers sur des pages Web publiques. Si vous devez valider les méta-informations du fichier et effectuer toutes les vérifications possibles.

  • Construction de requêtes SQL - comprend le fonctionnement des injections SQL mais également la gestion des erreurs de base de données. Plus vous affichez d'erreurs, plus vous donnez d'informations sur la structure de votre base de données. Idéalement, vous enregistrez les erreurs mais ne les affichez pas.

  • Sécurisez les formulaires en utilisant un jeton

7
Valentin Despa

Il est généralement sans danger pour la plupart des extensions. Cependant, soyez très prudent sur tout ce qui peut nécessiter de sauvegarder/éditer des fichiers, un filtrage ou une validation inadéquat peut créer un point d’entrée.

Tant que vous utilisez correctement l'API de JDatabase, vous devez également être sécurisé contre l'injection SQL. Vous pouvez regarder com_content ou plg_system_loadpositon dans une installation de Joomla pour vous aider à comprendre certains des points les plus fins des différentes API Joomla (car la documentation est un peu difficile à suivre).

En utilisant également les API si elles échouaient et si une sorte de vulnérabilité était utilisée, le correctif finirait probablement par être une mise à jour principale (si son JDatabase, je peux imaginer une version de Joomla dans l’heure si sa découverte: D), plutôt qu’une mise à jour. à votre extension.

Ceci est un défaut majeur de l'open source, c'est que toute personne voulant faire du mal a toutes les informations nécessaires pour le faire. S'il s'agit d'une extension fermée (non disponible publiquement), il y aura des chances qu'il n'y ait jamais de problème.

Enfin, plus l'extension est simple (moins de code), plus il est probable qu'elle sera "invulnérable". Au fur et à mesure que l'extension se développe, il y a beaucoup plus d'endroits où une légère erreur peut arriver pour créer un point d'entrée.

4
Jordan Ramstad