{"id":1646,"date":"2014-05-19T13:24:13","date_gmt":"2014-05-19T11:24:13","guid":{"rendered":"http:\/\/blog.nebule.org\/?p=1646"},"modified":"2016-03-29T19:01:16","modified_gmt":"2016-03-29T17:01:16","slug":"parcours-restreint-de-graph-de-mise-a-jour","status":"publish","type":"post","link":"http:\/\/blog.nebule.org\/?p=1646","title":{"rendered":"Parcours restreint de graph de mise \u00e0 jour"},"content":{"rendered":"<p style=\"text-align: justify;\">Dans <a title=\"Projet sylabe\" href=\"http:\/\/www.sylabe.org\/\" target=\"_blank\">sylabe<\/a>, la mise en place de la traduction sous forme de modules a apport\u00e9 son lot de probl\u00e8mes de s\u00e9curit\u00e9. Les modules peuvent contenir tout un tas de code qui ne sont pas en rapport avec la traduction. Il faut interdire par tous les moyens l&rsquo;ajout de code malveillant inconnu. Il est tr\u00e8s difficile de filtrer finement ces codes pour ne garder au mieux que ce qui concerne les traduction ou au pire rejeter l&rsquo;objet qui le contient. La solution retenu est de ne reconna\u00eetre que les modules sign\u00e9s soit par <a title=\"bachue\" href=\"http:\/\/bachue.nebule.org\/\" target=\"_blank\">bachue<\/a>, soit par l&rsquo;entit\u00e9 locale.<\/p>\n<p style=\"text-align: justify;\">Les fonctions <code>_l_grx<\/code> et <code>_l_gr1<\/code> de la librairie en <em>php<\/em> prennent maintenant en compte un param\u00e8tre pour restreindre la recherche des liens de mise \u00e0 jours (r\u00e9solution du graphe des mises \u00e0 jours) aux deux entit\u00e9s cit\u00e9es ci-dessus.<\/p>\n<p style=\"text-align: justify;\">Mais, si fonctionnellement c&rsquo;est suffisant, on va maintenant plus loin. Au lieu de ne reconna\u00eetre que deux entit\u00e9s, il est maintenant possible d&rsquo;en ajouter plus de fa\u00e7on statique. On cr\u00e9e en quelque sorte une liste d&rsquo;autorit\u00e9s locales. Cette liste n&rsquo;est valable que sur un serveur et pour une seule instance de <em>sylabe<\/em> ou tout autre programme similaire.<\/p>\n<p style=\"text-align: justify;\">Ainsi, la variable <code>$nebule_local_authority<\/code> contient une liste des entit\u00e9s faisant office d&rsquo;autorit\u00e9 locale. Elle est pr\u00e9-remplie par d\u00e9faut avec l&rsquo;entit\u00e9 <em>bachue<\/em>. Elle peut \u00eatre compl\u00e9t\u00e9e.<\/p>\n<p style=\"text-align: justify;\">Une autre variable\u00c2\u00a0<code>$nebule_curentnotauthority<\/code> permet d&rsquo;interdire \u00e0 l&rsquo;entit\u00e9 courante d&rsquo;\u00eatre elle aussi autorit\u00e9 locale. A <em>false<\/em> par d\u00e9faut, l&rsquo;entit\u00e9 locale peut ajouter des modules. C&rsquo;est notamment pratique pour le d\u00e9veloppement puisque l&rsquo;on peut faire soi-m\u00eame des \u00e9volutions de ces modules. A <em>true<\/em>, l&rsquo;entit\u00e9 locale ne peut qu&rsquo;utiliser les modules par d\u00e9faut pr\u00e9sents localement.<\/p>\n<p style=\"text-align: justify;\">Il est bien s\u00fcr possible de positionner ces deux variables dans les fichiers de configuration <code>env_nebule.php<\/code> et <code>env_sylabe.php<\/code>. Cependant, leur comportement est un tout petit peu diff\u00e9rent dans le <em>bootstrap<\/em> et dans la librairie (via une application comme <em>sylabe<\/em>).<\/p>\n<p style=\"text-align: justify;\">Quelques explications s&rsquo;imposent pour comprendre les diff\u00e9rences. Sch\u00e9ma de fonctionnement global d&rsquo;une instance :<\/p>\n<p style=\"text-align: center;\">1 &#8211; Appel du <em>bootstrap<\/em> (<em>index.php<\/em>) par le serveur web.<br \/>\nV<br \/>\n2 &#8211; Ex\u00e9cution du script <em>php<\/em>.<br \/>\n3 &#8211; Lecture du fichier de configuration <em>env_nebule.php<\/em>.<br \/>\n4 &#8211; Recherche de la librairie <em>nebule<\/em> valide \u00e0 charger.<br \/>\n5 &#8211; Chargement de la librairie <em>nebule<\/em> (fonctions et variables).<br \/>\n6 &#8211; Recherche de l&rsquo;application par d\u00e9faut et valide.<br \/>\n(actuellement, c&rsquo;est <em>sylabe<\/em>)<br \/>\n7 &#8211; Le <em>bootstrap<\/em> charge l&rsquo;application et passe la main.<br \/>\nV<br \/>\n8 &#8211; Ex\u00e9cution du script <em>php<\/em> de l&rsquo;application.<br \/>\n9 &#8211; Lecture du fichier de configuration <em>env_sylabe.php<\/em>.<br \/>\n10 &#8211; D\u00e9roulement du script de l&rsquo;application&#8230;<\/p>\n<p style=\"text-align: justify;\">Lors de l&rsquo;ex\u00e9cution du <em>bootstrap<\/em>, celui-ci n&rsquo;utilise pas la session utilisateur g\u00e9r\u00e9e par <em>php<\/em>. Il va cherche si le fichier <code>e<\/code> existe et si c&rsquo;est une entit\u00e9. Il prend cette entit\u00e9 comme \u00e9tant l&rsquo;entit\u00e9 propri\u00e9taire de l&rsquo;instance. Si avec la variable\u00c2\u00a0<code>$nebule_curentnotauthority<\/code> on emp\u00eache de reconna\u00eetre cette entit\u00e9 comme autorit\u00e9, seule <em>bachue<\/em> sera autorit\u00e9 et donc seuls ses mises \u00e0 jours seront prises en compte. Ainsi, il n&rsquo;est pas possible pour l&rsquo;entit\u00e9 locale de modifier la librairie ou le programme (<em>sylabe<\/em>) sauf si ils sont sign\u00e9s par <em>bachue<\/em>. Une mise \u00e0 jour r\u00e9guli\u00e8re est possible.<\/p>\n<p style=\"text-align: justify;\">Lors de l&rsquo;ex\u00e9cution de l&rsquo;application, ici <em>sylabe<\/em>, l&rsquo;entit\u00e9 locale n&rsquo;est pas forc\u00e9ment l&rsquo;entit\u00e9 courante. Et l&rsquo;entit\u00e9 courante n&rsquo;est donc pas forc\u00e9ment propri\u00e9taire de l&rsquo;instance mais juste utilisatrice. Si avec la variable\u00c2\u00a0<code>$nebule_curentnotauthority<\/code> on emp\u00eache de reconna\u00eetre cette entit\u00e9 comme autorit\u00e9, seule <em>bachue<\/em> sera autorit\u00e9 et donc seuls ses modules seront pris en compte. Ainsi, il n&rsquo;est pas possible pour l&rsquo;entit\u00e9 courante de modifier les modules. Une mise \u00e0 jour r\u00e9guli\u00e8re est possible.<\/p>\n<p style=\"text-align: justify;\">En clair, l&rsquo;entit\u00e9 locale choisit la librairie nebule et le programme \u00e0 charger, l&rsquo;entit\u00e9 courante dans le programme choisit les modules. Si cela ne leur est pas interdit.<\/p>\n<p style=\"text-align: justify;\">Pour ajouter d&rsquo;autres autorit\u00e9s, il suffit de les <span style=\"text-decoration: underline;\">ajouter<\/span> \u00e0 la variable\u00c2\u00a0<code>$nebule_local_authority<\/code> dans les fichiers de configuration :<br \/>\n<code>$nebule_local_authority[]='88848d09edc416e443ce1491753c75d75d7d8790c1253becf9a2191ac369f4ea';<\/code><\/p>\n<p style=\"text-align: center;\"><a href=\"\/wp-content\/uploads\/nebule\/2014\/05\/shot-2014-05-19_12-24-402.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1648\" alt=\"shot-2014-05-19_12-24-40\" src=\"\/wp-content\/uploads\/nebule\/2014\/05\/shot-2014-05-19_12-24-402.png\" width=\"538\" height=\"133\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans sylabe, la mise en place de la traduction sous forme de modules a apport\u00e9 son lot de probl\u00e8mes de s\u00e9curit\u00e9. Les modules peuvent contenir tout un tas de code qui ne sont pas en rapport avec la traduction. Il faut interdire par tous les moyens l&rsquo;ajout de code malveillant inconnu. Il est tr\u00e8s difficile &hellip; <a href=\"http:\/\/blog.nebule.org\/?p=1646\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Parcours restreint de graph de mise \u00e0 jour<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[62,67,81,5,89,7,96,13,104,20,115,24,39],"tags":[],"_links":{"self":[{"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/1646"}],"collection":[{"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1646"}],"version-history":[{"count":1,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/1646\/revisions"}],"predecessor-version":[{"id":2193,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/1646\/revisions\/2193"}],"wp:attachment":[{"href":"http:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1646"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1646"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1646"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}