Voici la dernière mise à jour (je l'espère) avant la version 2.5 finale, je me suis attaché à améliorer la sécurité de Kajax, après une batterie de tests, je publierais bientôt un nom d'utilisateur et son pass associé pour vous permettre d'aller voir l'administration de Kajax.
Au programme :
-
Optimisation du main index et du htaccess mère, les pages pointant vers upload/ckeditor ainsi que jump et rsh_blank sont dans une boucle bien spécifique maintenant
-
La classe user ne possède plus les fonctions d'auth, elles sont dans la classe m_auth (étendu à user et non m_rights) du module rights (j'ai été obligé d'ajouter une setteur dynamique dans la classe user afin d'éviter que la variable de session qui stock les données de l'utilisateur soit une instance de m_auth au lieu de user, cependant il est blindé par un mot de passe et ne peut donc pas être exploité)
-
Le login et le mot de passe sont maintenant chiffrés avec RSA via une clé publique de 2048 bits (J'ai opté pour une paire figée car c'est beaucoup trop lourd pour le système de devoir systématiquement regénérer une paire pour chaque user), le modulo et l'exposant de chiffrement (autrement dit la clé publique) sont stockés dans la lib auth en dure (pour le moment, je vais revoir ça bientôt). Le lifetime du string est de 5 secondes et ce afin d'éviter qu'il soit utilisable par un tiers manuellement - Attention cela reste vulnérable aux attaques via MITM automatisé. (je l'ajusterais après sondage en fonction du ping moyen) - ATTENTION, pour le moment, ce chiffrement est unilatéral, je suis en train de faire des tests pour le rendre bilatéral, le problème vient de la lourdeur du processus de génération d'une paire de clé côté client (si on veut que la paire soit fiable autrement dit >=2048bits)
-
Le class crypt gère maintenant un chiffrement/déchiffrement avec RSA (crypt::chiffreRSA et crypt::dechiffreRSA), il faut qu'OpenSSL soit disponible ainsi que ses fonctions php
-
Ajout d'une librairie de chiffrement RSA en Javascript (je remercie leurs auteurs respectifs (http://www-cs-students.stanford.edu/~tjw/jsbn/) et je leurs prie de bien vouloir m'excuser d'avoir mergées et compressées leurs sources, mais le gaspillage de bande passante m'insupporte réellement)
-
Mise à jour du module rights 1.0 vers 1.1
-
Mise à jour des modules disponibles
-
Mise à jour de la routine de génération de mots de passe (2 [a-Z], 2 [A-Z], 2 [0-9] et 4 [a-zA-Z0-9] le tout mélangé)
-
Les droits sont maintenant mis en cache cependant, on vérifie systématiquement si le groupe (et donc les droits qui lui sont associés) sont toujours valides en vérifiant que la date d'attribution des droits au user est bien supérieure ou égale à la date de modification du groupe si non, on recharge les droits
-
Diffusion des droits dans les modèles, les scripts ajax, les méthodes des différentes classes, ainsi que dans les scripts js (j'ai rajouté des éléments dans les flux XML) - la vérification des droits est très lourde, mais dans la mesure où les administrateurs ont accès au code php, ils peuvent faire tout et n'importe quoi, il est donc important de vérouiller tous les maillons de la chaine. Je vais bientôt mettre en place un système de gestion de droits multi users sur la base pour empécher la manipulation de certaines tables (dont celle qui gère les droits)
-
Mis en place d'une routine qui auto check les droits induits par certains droits (exemple : l'ajout/édition d'article implique que l'utilisateur a le droit de voir et créer des tags)
-
Dorénavant, toutes les requêtes ajax dont la longueur est inférieure à 2000 caractères (arrondi à partir de la limite théorique d'Internet Explorer de 2083) sont envoyés en GET au lieu de POST, merci d'utiliser la global $in pour récupérer vos variables ($in merge le contenu de $_GET et $_POST). D'après Yslow, il est plus optimisé d'utiliser systématiquement du GET, car la plupart des navigateurs envoient 2 paquets TCP/IP au lieu d'un seul quand c'est du POST (grossièrement).
-
Le système de vérification des JS/CSS déjà chargés côté client ne se fait plus à partir de l'empreinte MD4 du path mais à partir du CRC32 du path. (ce qui réduit de 75% la taille des données échangées à ce niveau) - Au vu du nombre négligeable de combinaisons possibles (moins de 200), il est très improbable qu'il y ait une collision
-
Standardisation des variables d'entrées, elles sont toutes mergées dans $in dans cette ordre : $_GET, $_POST (si elle existe), $_REQUEST_URI (si elle possède des paramètres) - Attention aux collisions !
-
Optimisation de la génération des pages, ainsi que de l'algorithme d'extraction puis de vérification des crc32 des js/css déjà load côté client
-
Mise à jour du module actualite 4.4 vers 4.41
-
Les classes m_comment et m_categorie ont été allégées en 2 sous classe 'admin only'
-
Le système de sauvegarde automatique des articles et des pages/dossiers se sert du document.title pour alerter le user si la sav est bien passée ou non (l'enregistrement auto étant soumis aux mêmes contraintes que l'enregistrement normal)
-
Correction d'un bug avec la sélection des catégories dans l'ajout/édition d'article, on pouvait ajouter 'Aucune'
-
Les commentaires non validés apparaissent maintenant en premier dans la liste sur la page de gestion des commentaires (tri prioritaire sur la validité puis sur la date)
-
La page admin_start a été supprimé, l'utilisateur n'a plus d'écran intermédiaire entre la fin de l'auth et l'accès à la partie admin, il est automatiquement redirigé dynamiquement
-
Ajout de protection contre la faille CSRF (contrainte stricte sur le referer - censé être géré par le navigateur, je vais mettre en place un système de jeton de validité sur les actions critiques (suppresion en l'occurence, la base de données Kajax étant paramétrée avec des clés étrangères qui ont des implications en cascade lors d'une suppression, le fait de supprimer un groupe par exemple, aurait pour implication de supprimer tous les utilisateurs ainsi que toutes leurs contributions ce qui pourrait être extremement préjudiciable si non souhaité), ça sera pour la 2.6+) - certains navigateurs n'envoient pas le referer du site en cas de reload, j'ai conscience du soucis, je le réglerais asap, utiliser la navigation dynamique, cela règle partiellement le soucis.
-
Les images atom.png et delete.png sont maintenant transparentes
-
Les images de gestion ne sont plus écrites en dure, merci d'utiliser les classes css kdel, kvalid ou kedit
-
L'index ne contient plus les informations systèmes, création d'une page admin_system.html, elle contient dorénavant un récapitulatif par module (sitemap, articles/pages en attente, messages en attente)
-
Mise à jour de CKEditor 3.0.1 vers 3.0.2
-
Mise à jour du module core 1.2 vers 1.3
-
La gestion des pages se base maintenant sur le même modèle que les autres vues de gestion
-
Merge des javascripts d'ajout et d'édition de pages
-
Lors de l'édition, la vue est dépliée par défaut et lors de l'ajout, le modèle est plié par défaut
-
Ajout de la possibilité de supprimer des pages (si autorisé - attention, ce n'est pas réversible, tout est supprimé, backups, caches (ajax et normal) et fichiers (vue/modèle/conf)
-
Ajout de contraintes sur le nom des pages (w)
-
IMPORTANT : Les serveurs et les administrateurs doivent être synchronisés sur le serveur ntp : time.nist.gov