{"id":2809,"date":"2016-11-18T20:51:14","date_gmt":"2016-11-18T18:51:14","guid":{"rendered":"http:\/\/blog.nebule.org\/?p=2809"},"modified":"2016-11-19T18:22:43","modified_gmt":"2016-11-19T16:22:43","slug":"renforcement-de-la-lecture-des-objets-type-hash-invalide","status":"publish","type":"post","link":"https:\/\/blog.nebule.org\/?p=2809","title":{"rendered":"Renforcement de la lecture des objets &#8211; type hash invalide"},"content":{"rendered":"<p style=\"text-align: justify;\">Dans l&rsquo;article sur le <a title=\"Renforcement de la lecture des objets\" href=\"http:\/\/blog.nebule.org\/?p=2801\" target=\"_blank\">Renforcement de la lecture des objets<\/a>, il \u00e9tait question notamment de la possibilit\u00e9 de supprimer ou pas un objet dont on ne peut pas v\u00e9rifier l&#8217;empreinte parce que le type de hash est soit inconnu soit non reconnu.<\/p>\n<p style=\"text-align: justify;\">Lors de l&rsquo;\u00e9chec de la r\u00e9cup\u00e9ration du type de hash de l&rsquo;objet, on essaye tout de suite, si l&rsquo;option\u00c2\u00a0<code>permitSynchronizeLinks<\/code> est \u00e0 <code>true<\/code>, de synchroniser rapidement les liens de l&rsquo;objet. Puis on essaie de relire le type de hash de l&rsquo;objet.<\/p>\n<p style=\"text-align: justify;\">Une nouvelle option <code>permitDeleteObjectOnUnknowHash<\/code> vient d&rsquo;\u00eatre ajout\u00e9e. Elle a <code>true<\/code> comme valeur par d\u00e9faut. Elle n&rsquo;est pas modifiable par lien, pour changer sa valeur par d\u00e9faut il faut modifier le fichier des options.<br \/>\n<span style=\"color: #ff0000;\"><strong>Cette option est critique, elle <span style=\"text-decoration: underline;\">doit<\/span> toujours rester par d\u00e9faut \u00e0\u00c2\u00a0<code>true<\/code> !<\/strong><\/span><\/p>\n<p style=\"text-align: justify;\">La nouvelle option est utilis\u00e9e par la biblioth\u00e8que <a title=\"nebule\" href=\"http:\/\/www.nebule.org\" target=\"_blank\">nebule<\/a> en <a title=\"php\" href=\"http:\/\/php.net\" target=\"_blank\">PHP<\/a> en programmation orient\u00e9 objet (library POO) par les fonctions\u00c2\u00a0<code>checkConsistency()<\/code> et <code>_getUnprotectedContent()<\/code> de la classe <code>Object<\/code>. La fonction\u00c2\u00a0<code>_getProtectedContent()<\/code> ne prend pas en compte cette option, elle se base uniquement sur\u00c2\u00a0<code>_getUnprotectedContent()<\/code> pour la lecture de l&rsquo;objet prot\u00e9g\u00e9 et de la cl\u00e9 de d\u00e9chiffrement associ\u00e9e.<\/p>\n<p style=\"text-align: justify;\">L&rsquo;impl\u00e9mentation de l&rsquo;option est un tout petit peu diff\u00e9rent ce que l&rsquo;on peut attendre. Lorsque l&rsquo;on recherche le lien du type d&#8217;empreinte d&rsquo;un objet (avec la pond\u00e9ration sociale), si aucun lien n&rsquo;est trouv\u00e9 ou si le nom de l&rsquo;algorithme de prise d&#8217;empreinte n&rsquo;est pas reconnu, alors il y a deux possibilit\u00e9s.<br \/>\nL&rsquo;option\u00c2\u00a0<code>permitDeleteObjectOnUnknowHash<\/code> est \u00e0 :<\/p>\n<ol>\n<li style=\"text-align: justify;\"><code>false<\/code>. Dans ce cas les deux fonctions retournent tout de suite un r\u00e9sultat bool\u00e9en n\u00e9gatif ou un contenu vide.<\/li>\n<li style=\"text-align: justify;\"><code>true<\/code>. Comme aucun algorithme n&rsquo;est trouv\u00e9, on utilise l&rsquo;algorithme d\u00e9finit par d\u00e9faut et on continue le processus de v\u00e9rification dans les deux fonctions. Si l&#8217;empreinte ne correspond pas avec cet algorithme, l&rsquo;objet est supprim\u00e9. C&rsquo;est une fa\u00e7on de donner une chance \u00e0 un objet pour lequel les liens auraient \u00e9t\u00e9 partiellement synchronis\u00e9s.<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">Dans la biblioth\u00e8que <em>nebule<\/em> en <em>PHP<\/em> en programmation proc\u00e9durale (library PP), la lecture des objets se fait via les fonctions <code>_o_ls1<\/code> et <code>_o_lsx<\/code>. La deuxi\u00e8me repose en fait sur la premi\u00e8re. Et en d\u00e9but de fonction <code>_o_ls1<\/code>, un appel \u00e0 la fonction\u00c2\u00a0<code>_o_vr<\/code> permet de v\u00e9rifier le contenu de l&rsquo;objet.<br \/>\nLa fonction\u00c2\u00a0<code>_o_vr<\/code> ne prend en compte que les objets avec un hash fait avec l&rsquo;algorithme par d\u00e9faut, aujourd&rsquo;hui <em>sha256<\/em>. L&rsquo;option\u00c2\u00a0<code>permitDeleteObjectOnUnknowHash<\/code> n&rsquo;est pas utilis\u00e9e.<\/p>\n<p style=\"text-align: justify;\">Dans les deux biblioth\u00e8ques, si c&rsquo;est l&rsquo;objet avec d&rsquo;identifiant <code>0<\/code>, alors il est syst\u00e9matiquement supprim\u00e9.<\/p>\n<p style=\"text-align: justify;\">Enfin, dans tous les cas, il ne faut surtout pas tenter de v\u00e9rifier l&#8217;empreinte avec tous les algorithmes disponibles, cela reviendrait \u00e0 permettre une attaque sur le plus faible de ceux-ci&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans l&rsquo;article sur le Renforcement de la lecture des objets, il \u00e9tait question notamment de la possibilit\u00e9 de supprimer ou pas un objet dont on ne peut pas v\u00e9rifier l&#8217;empreinte parce que le type de hash est soit inconnu soit non reconnu. Lors de l&rsquo;\u00e9chec de la r\u00e9cup\u00e9ration du type de hash de l&rsquo;objet, on &hellip; <a href=\"https:\/\/blog.nebule.org\/?p=2809\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Renforcement de la lecture des objets &#8211; type hash invalide<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3,4,371,88,7,96,13,110,18,19,20,365,24,38],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/2809"}],"collection":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2809"}],"version-history":[{"count":8,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/2809\/revisions"}],"predecessor-version":[{"id":2818,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/2809\/revisions\/2818"}],"wp:attachment":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2809"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2809"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2809"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}