Dans l’article sur le Renforcement de la lecture des objets, il était question notamment de la possibilité de supprimer ou pas un objet dont on ne peut pas vérifier l’empreinte parce que le type de hash est soit inconnu soit non reconnu.
Lors de l’échec de la récupération du type de hash de l’objet, on essaye tout de suite, si l’option permitSynchronizeLinks
est à true
, de synchroniser rapidement les liens de l’objet. Puis on essaie de relire le type de hash de l’objet.
Une nouvelle option permitDeleteObjectOnUnknowHash
vient d’être ajoutée. Elle a true
comme valeur par défaut. Elle n’est pas modifiable par lien, pour changer sa valeur par défaut il faut modifier le fichier des options.
Cette option est critique, elle doit toujours rester par défaut à  true
!
La nouvelle option est utilisée par la bibliothèque nebule en PHP en programmation orienté objet (library POO) par les fonctions checkConsistency()
et _getUnprotectedContent()
de la classe Object
. La fonction _getProtectedContent()
ne prend pas en compte cette option, elle se base uniquement sur _getUnprotectedContent()
pour la lecture de l’objet protégé et de la clé de déchiffrement associée.
L’implémentation de l’option est un tout petit peu différent ce que l’on peut attendre. Lorsque l’on recherche le lien du type d’empreinte d’un objet (avec la pondération sociale), si aucun lien n’est trouvé ou si le nom de l’algorithme de prise d’empreinte n’est pas reconnu, alors il y a deux possibilités.
L’option permitDeleteObjectOnUnknowHash
est à :
false
. Dans ce cas les deux fonctions retournent tout de suite un résultat booléen négatif ou un contenu vide.true
. Comme aucun algorithme n’est trouvé, on utilise l’algorithme définit par défaut et on continue le processus de vérification dans les deux fonctions. Si l’empreinte ne correspond pas avec cet algorithme, l’objet est supprimé. C’est une façon de donner une chance à un objet pour lequel les liens auraient été partiellement synchronisés.
Dans la bibliothèque nebule en PHP en programmation procédurale (library PP), la lecture des objets se fait via les fonctions _o_ls1
et _o_lsx
. La deuxième repose en fait sur la première. Et en début de fonction _o_ls1
, un appel à la fonction _o_vr
permet de vérifier le contenu de l’objet.
La fonction _o_vr
ne prend en compte que les objets avec un hash fait avec l’algorithme par défaut, aujourd’hui sha256. L’option permitDeleteObjectOnUnknowHash
n’est pas utilisée.
Dans les deux bibliothèques, si c’est l’objet avec d’identifiant 0
, alors il est systématiquement supprimé.
Enfin, dans tous les cas, il ne faut surtout pas tenter de vérifier l’empreinte avec tous les algorithmes disponibles, cela reviendrait à permettre une attaque sur le plus faible de ceux-ci…