ZZZ http://zzz.rezo.net/ une sorte de fatras... fr SPIP - www.spip.net <span class="caps">ZZZ</span> http://zzz.rezo.net/local/cache-vignettes/L144xH93/siteon0-21452.png http://zzz.rezo.net/ 93 144 Filesystem cache for Drupal http://zzz.rezo.net/Filesystem-cache-for-Drupal.html http://zzz.rezo.net/Filesystem-cache-for-Drupal.html 2013-06-04T07:59:52Z text/html en Fil Logiciels libres <p>This is a drop-in replacement for Drupal 6's cache system. We avoid a lot of problems by using a filesystem-cache in lieu of the classic database-cache. Our site with Drupal 6.26 (published 2012-05-02) kept crashing because it filled its `cache_menu` table too quickly. This is a drop-in replacement for includes/cache.inc that makes Drupal use a filesystem-based cache instead of the database. Installation Download the file () Rename the old includes/cache.inc to (...)</p> - <a href="http://zzz.rezo.net/-Scripts-.html" rel="directory">Scripts</a> / <a href="http://zzz.rezo.net/+-Logiciels-libres-+.html" rel="tag">Logiciels libres</a> <div class='rss_chapo'><p>This is a drop-in replacement for Drupal 6's cache system. We avoid a lot of problems by using a filesystem-cache in lieu of the classic database-cache.</p></div> <div class='rss_texte'><p>Our site with <strong>Drupal 6.26</strong> <small>(published 2012-05-02)</small> kept crashing because it filled its <code class='spip_code' dir='ltr'>`cache_menu`</code> table too quickly.</p> <p>This is a drop-in replacement for <code class='spip_code' dir='ltr'>includes/cache.inc</code> that makes Drupal use a filesystem-based cache instead of the database.</p> <h3 class='h3 spip'>Installation</h3> <ol class="spip"><li> Download the file (<a href="http://trac.rezo.net/trac/rezo/browser/drupal/cache.inc" class='spip_url spip_out' rel='external'>http://trac.rezo.net/trac/rezo/brow...</a>)</li> <li> Rename the old <code class='spip_code' dir='ltr'>includes/cache.inc</code> to <code class='spip_code' dir='ltr'>includes/cache.classic.inc</code>, in case you want to go back.</li> <li> Install this file as <code class='spip_code' dir='ltr'>includes/cache.inc</code>.</li> <li> By default, we use the <code class='spip_code' dir='ltr'>sys_get_temp_dir()</code> command to learn where to store the cache files. If you prefer to see what happens, create a <code class='spip_code' dir='ltr'>tmp/</code> directory (with proper write permissions for <code class='spip_code' dir='ltr'>www-data</code> and a security <code class='spip_code' dir='ltr'>.htaccess</code> file); the code will use this directory if it exists.</li> </ol> <h3 class='h3 spip'>Compatibility</h3> <p>This has not been tested yet on any other version than Drupal 6.26. If it works for you, please comment in the forum below.</p> <h3 class='h3 spip'>How it works</h3> <p>When Drupal tries to cache some data it uses</p> <div style='text-align: left;' class='spip_code' dir='ltr'><code>cache_set($cid, $data, $table, $expire, $headers)</code></div> <p>… our code computes a 4-hexdigits hash key from <code class='spip_code' dir='ltr'>(cid, table)</code>, and stores the values <code class='spip_code' dir='ltr'>(data, headers)</code> in the file named <code class='spip_code' dir='ltr'>tmp/a0/3c.cache</code>.</p> <p>When Drupal requests this value from the cache, we load the values from the same file, check that the <code class='spip_code' dir='ltr'>cid</code> and <code class='spip_code' dir='ltr'>table</code> match the request, that the cache has not <code class='spip_code' dir='ltr'>expire</code>d, and then return the value.</p> <p>There will be collisions in this small space (<code class='spip_code' dir='ltr'>16^4= 65,536</code> files “only”). But that's a <i>deliberate feature</i>, because it allows us to avoid using a costly garbage collector [<a href='#nb1' class='spip_note' rel='footnote' title='This approach was initially developed for SPIP, see Memoization.' id='nh1'>1</a>].</p> <p> </p> <p><i>P.S.</i> Something better probably exists somewhere. I just couldn't find it; if this is useful for you, or if you have suggestions, please comment below.</p></div> <hr /> <div class='rss_notes'><div id='nb1'> <p>[<a href='#nh1' class='spip_note' title='Footnotes 1' rev='footnote'>1</a>] This approach was initially developed for <span class="caps"><span class="caps">SPIP</span></span>, see <a href="http://plugins.spip.net/memoization.html" class='spip_out' rel='external'>Memoization</a>.</p> </div></div> Recevoir les logs irssi par email http://zzz.rezo.net/Recevoir-les-logs-irssi-par-email.html http://zzz.rezo.net/Recevoir-les-logs-irssi-par-email.html 2010-08-21T18:02:19Z text/html fr Fil <p>Pour irc j'utilise irssi, un client en ligne de commande qui tourne en permanence sur mon serveur. Je m'y connecte de temps à autre avec screen et tout va bien. Pour indexer les logs — ce qui me permet de retrouver en cas de besoin une conversion —, j'ai écrit ce petit script, irclogs2email.php : #! /usr/bin/php -q <?php $to = $from = 'xxx@rezo.net'; chdir('/home/xxx/irclogs/'); foreach (glob('*/#*.log') as $log) $subject = 'irclog: '.$log.' '.date('Y-m-d'); $headers = (...)</p> - <a href="http://zzz.rezo.net/-Scripts-.html" rel="directory">Scripts</a> <div class='rss_texte'><p>Pour <a href="http://fr.wikipedia.org/wiki/irc" class='spip_glossaire' rel='external'>irc</a> j'utilise <a href="http://fr.wikipedia.org/wiki/irssi" class='spip_glossaire' rel='external'>irssi</a>, un client en ligne de commande qui tourne en permanence sur mon serveur. Je m'y connecte de temps à autre avec <a href="http://fr.wikipedia.org/wiki/screen" class='spip_glossaire' rel='external'>screen</a> et tout va bien.</p> <p>Pour indexer les logs — ce qui me permet de retrouver en cas de besoin une conversion —, j'ai écrit ce petit script, <code class='spip_code' dir='ltr'>irclogs2email.php</code> :</p> <div style='text-align: left;' class='spip_code' dir='ltr'><code>#! /usr/bin/php -q<br /> <?php<br /> <br /> $to = $from = 'xxx@rezo.net';<br /> <br /> chdir('/home/xxx/irclogs/');<br /> foreach (glob('*/#*.log') as $log) {<br /> $subject = 'irclog: '.$log.' '.date('Y-m-d');<br /> $headers = "From: $from\n"<br /> ."To: $to\n"<br /> ."List-Id: irclogs\n";<br /> if (strlen($f = file_get_contents($log)))<br /> mail($to, $subject, $f, $headers, '-f '.$from);<br /> # purger le log sans changer son inode<br /> # (sinon irssi pas content)<br /> fclose(fopen($log,'w'));<br /> }<br /> ?></code></div> <p>Appelé quotidiennement via la <code class='spip_code' dir='ltr'>crontab</code> :</p> <div style='text-align: left;' class='spip_code' dir='ltr'><code>58 23 * * * php /home/xxx/bin/irclogs2email.php</code></div> <p>A noter : le <code class='spip_code' dir='ltr'>#</code> dans la commande <code class='spip_code' dir='ltr'>glob()</code> (qui liste les fichiers de log) sert à n'indexer ainsi que les canaux publics, et non les conversations privées.</p> <p>Quant au <code class='spip_code' dir='ltr'>List-Id:</code> il me permet de filtrer ces logs quand ils arrivent dans mon mail.</p></div> Dredd, outil pour serveurs de mailing-lists http://zzz.rezo.net/Dredd-outil-pour-serveurs-de.html http://zzz.rezo.net/Dredd-outil-pour-serveurs-de.html 2010-07-22T20:10:25Z text/html fr Archiloque, Fil <p>Nous avons développé, pour le serveur de mailing lists de rezo (listes.rezo.net), un script permettant de surveiller la bonne santé du serveur. Le principe de DREDD est simple : on crée une mailing-liste de test, à laquelle on inscrit une adresse sur chaque fournisseur de mail qu'on veut vérifier. Le logiciel envoie ensuite, toutes les vingt minutes, un message sur cette liste, puis relève les comptes abonnés. Il trace ensuite un graphique indiquant le temps mis par chaque message à parcourir (...)</p> - <a href="http://zzz.rezo.net/-Scripts-.html" rel="directory">Scripts</a> <div class='rss_texte'><p>Nous avons développé, pour le serveur de mailing lists de rezo (<a href="http://listes.rezo.net/" class='spip_out' rel='external'>listes.rezo.net</a>), un script permettant de surveiller la bonne santé du serveur.</p> <p>Le principe de <span class="caps">DREDD</span> est simple : on crée une mailing-liste de test, à laquelle on inscrit une adresse sur chaque fournisseur de mail qu'on veut vérifier. Le logiciel envoie ensuite, toutes les vingt minutes, un message sur cette liste, puis relève les comptes abonnés. Il trace ensuite un graphique indiquant le temps mis par chaque message à parcourir l'Internet.</p> <p><span class='spip_document_52 spip_documents spip_documents_center'> <img src='http://zzz.rezo.net/local/cache-vignettes/L500xH344/dredd-95ba9.png' width='500' height='344' alt="" style='height:344px;width:500px;' /></span></p> <p>Le graphique affiche deux données essentielles : la médiane, qui indique si le serveur a des problèmes, et le maximum, qui signale lorsque la connexion vers un fournisseur de messagerie est bloquée. Si l'un de ces deux indicateurs montre trop haut, Dredd est capable d'envoyer un message sur un compte twitter, sollicitant ainsi l'administrateur du système.</p> <p>Tout le code et la documentation se trouvent sur github : <a href="http://github.com/archiloque/dredd/blob/master/README" class='spip_url spip_out' rel='external'>http://github.com/archiloque/dredd/...</a>.</p> <p>On peut voir dredd en action sur <a href="http://dredd.rezo.net/" class='spip_url spip_out' rel='external'>http://dredd.rezo.net/</a>.</p></div> Bloquer les mouchards avec Ghostery http://zzz.rezo.net/Bloquer-les-mouchards-avec.html http://zzz.rezo.net/Bloquer-les-mouchards-avec.html 2010-05-20T21:26:12Z text/html fr Fil Web Publicité <p>Mon billet pour Bloquer les mouchards de Facebook a eu pas mal de succès, signe que l'internaute commence à en avoir assez d'être pisté dans chaque recoin du Web. Y a-t-il d'autres solutions que mon bricolage ? Ghostery Ghostery propose une extension pour Firefox qui détecte, affiche et élimine les mouchards du Web. Merci à cy_altern qui, dans le forum, a signalé cette solution. Il s'agit d'un plugin à vocation didactique car, quand on l'active, il ne fait qu'afficher, dans une petite fenêtre en (...)</p> - <a href="http://zzz.rezo.net/-Scripts-.html" rel="directory">Scripts</a> / <a href="http://zzz.rezo.net/+-Web-+.html" rel="tag">Web</a>, <a href="http://zzz.rezo.net/+-Publicite-+.html" rel="tag">Publicité</a> <div class='rss_chapo'><p>Mon billet pour <a href='http://zzz.rezo.net/Bloquer-les-mouchards-de-Facebook.html' class='spip_in'>Bloquer les mouchards de Facebook</a> a eu pas mal de succès, signe que l'internaute commence à en avoir assez d'être pisté dans chaque recoin du Web. Y a-t-il d'autres solutions que mon bricolage ?</p></div> <div class='rss_texte'><h3 class='h3 spip'>Ghostery</h3> <p><span class='spip_document_44 spip_documents spip_documents_left' style='float:left; width:326px;'> <img src='http://zzz.rezo.net/local/cache-vignettes/L326xH185/messina-0fc56.png' width='326' height='185' alt="" style='height:185px;width:326px;' /></span> Ghostery propose une <strong>extension pour Firefox</strong> qui détecte, affiche et élimine les mouchards du Web. Merci à cy_altern qui, dans le <a href='http://zzz.rezo.net/Bloquer-les-mouchards-de-Facebook.html#forum236' class='spip_in'>forum</a>, a signalé cette solution.</p> <p><span class='spip_document_45 spip_documents spip_documents_right' style='float:right; width:288px;'> <img src='http://zzz.rezo.net/local/cache-vignettes/L288xH174/zzz-c54f1.png' width='288' height='174' alt="" style='height:174px;width:288px;' /></span> Il s'agit d'un plugin à vocation didactique car, quand on l'active, il ne fait qu'afficher, dans une petite fenêtre en haut à droite de la page Web, la liste des mouchards détectés dans la page. Il n'est pas rare d'en voir 1, 2 ou 3 à chaque page, avec les mêmes qui reviennent sans arrêt : Google, Facebook, Xiti, DoubleClick, etc.</p> <p><span class='spip_document_46 spip_documents spip_documents_left' style='float:left; width:242px;'> <img src='http://zzz.rezo.net/local/cache-vignettes/L242xH187/libe-8a463.png' width='242' height='187' alt="" style='height:187px;width:242px;' /></span> L'interface permet de bloquer un à un ces réseaux de traqueurs et de « pub comportementale ». En allant dans les préférences de l'extension, on peut aussi les bloquer tous en un seul clic.</p> <p>Pour reprendre ensuite une navigation normale, il suffit de désactiver l'affichage de la liste. Seul un petit fantôme bleu en bas de la page permet de temps à autre de savourer le nombre de mouchards qui restent à la porte.</p> <p><span class='spip_document_47 spip_documents spip_documents_center'> <img src='http://zzz.rezo.net/local/cache-vignettes/L287xH285/menu-b6a81.png' width='287' height='285' alt="" style='height:285px;width:287px;' /></span></p> <p>Ghostery est, bizarrement, édité par la société <i>Better Advertising</i> (sic), qui conseille aussi les réseaux de publicitaires dans leur gestion des questions de <i>privacy.</i> Le plugin permet, pour chaque mouchard, d'aller consulter une page décrivant le réseau et de consulter sa politique de confidentialité, de façon à améliorer la <i>« confiance »</i> des internautes dans la pub (re-sic).</p> <p><span class='spip_document_48 spip_documents spip_documents_center'> <img src='http://zzz.rezo.net/local/cache-vignettes/L500xH285/Capture_d_ecran_2010-05-20_a_23-13-26-461c7.png' width='500' height='285' alt="" style='height:285px;width:500px;' /></span></p> <p><strong>À noter :</strong> Ghostery ne fonctionne pour l'instant que pour Firefox ; sa version pour Internet Explorer ne bloque qu'une partie des mouchards, et sa version pour Chrome ne fait que les détecter (pas de blocage).</p></div> Bloquer les mouchards de Facebook http://zzz.rezo.net/Bloquer-les-mouchards-de-Facebook.html http://zzz.rezo.net/Bloquer-les-mouchards-de-Facebook.html 2010-04-27T20:30:00Z text/html fr Fil Web Publicité <p>Avec les Social Plugins introduits il y a quelques jours, Facebook prétend ajouter un bouton “Like” sur toutes les pages du Web. C'est sans doute super pour cette société de savoir qui regarde quelle page de quel site à tout instant, mais, moi, ça ne me plaît pas. Il suffit de quitter Facebook, me direz-vous. En vérité ce n'est pas si simple. Car avec ces plugins, chaque webmestre est encouragé à ajouter sur ses propres pages une petite ligne de code qui moucharde directement à Facebook le fait que vous (...)</p> - <a href="http://zzz.rezo.net/-Scripts-.html" rel="directory">Scripts</a> / <a href="http://zzz.rezo.net/+-Web-+.html" rel="tag">Web</a>, <a href="http://zzz.rezo.net/+-Publicite-+.html" rel="tag">Publicité</a> <div class='rss_chapo'><p>Avec les <a href="http://developers.facebook.com/docs/reference/plugins/" class='spip_out' rel='external'>Social Plugins</a> introduits il y a quelques jours, Facebook prétend ajouter un bouton “Like” sur toutes les pages du Web. C'est sans doute super pour cette société de savoir qui regarde quelle page de quel site à tout instant, mais, moi, ça ne me plaît pas.</p></div> <div class='rss_texte'><p>Il suffit de <a href="http://www.facebook.com/help/contact.php?show_form=delete_account" class='spip_out' rel='external'>quitter Facebook</a>, me direz-vous. En vérité ce n'est pas si simple. Car avec ces plugins, chaque webmestre est encouragé à ajouter sur ses propres pages une petite ligne de code qui moucharde directement à Facebook le fait que vous lisez cette page.</p> <p>Si vous êtes connecté à Facebook à ce moment-là, le message qui s'affiche est personnalisé à votre nom, et en fonction de vos amis. Ce qui signifie que Facebook enregistre votre passage sur la page, à votre nom, <i>que vous cliquiez ou non sur le bouton Like.</i> Dans <i>tous</i> les cas, connecté ou pas, Facebook reçoit une information sur le fait que vous avez visité la page en question.</p> <p>Pour éliminer ça, j'ouvre mon bloqueur de publicités préféré, et j'ajoute une règle personnalisée :</p> <div style='text-align: left;' class='spip_code' dir='ltr'><code>||facebook.com/*$third-party</code></div> <p>Cette règle indique au bloqueur de publicité d'interdire tout appel à une ressource Facebook (<code class='spip_code' dir='ltr'>||facebook.com/*</code>) depuis un domaine autre que celui de <span class="caps">FB</span> lui-même (<code class='spip_code' dir='ltr'>$third-party</code>). De cette façon, les mouchards sont bloqués, mais, si je le souhaite, le site de Facebook reste utilisable.</p> <p>Comme le note <a href="http://gelb.net/gelblog/2010/05/10/wie-man-facebook-social-plugins-den-garaus-macht/" class='spip_out' hreflang='de' rel='external'>Horatiorama</a>, il faut aussi ajouter une ligne pour bloquer le <span class="caps">CDN</span> de Facebook <code class='spip_code' dir='ltr'>fbcdn.net</code>.</p> <p>Pour faire bonne mesure, et tant que j'y suis, j'interdis aussi à Google Analytics de me suivre à la trace :</p> <div style='text-align: left;' class='spip_code' dir='ltr'><code>||facebook.com/*$third-party<br /> ||fbcdn.net/*$domain=~facebook.com<br /> ||google-analytics.com/ga.js$third-party</code></div> <p>Sur Firefox, j'emploie <a href="https://addons.mozilla.org/fr/firefox/addon/1865" class='spip_out' rel='external'>Adblock Plus</a> :<br class='autobr' /> <span class='spip_document_37 spip_documents spip_documents_center'> <img src='http://zzz.rezo.net/local/cache-vignettes/L500xH390/adblock-firefox-284e0.png' width='500' height='390' alt="" style='height:390px;width:500px;' /></span><br class='autobr' /> <i>(Et tant qu'à faire, j'ajoute <a href='http://zzz.rezo.net/Bloquer-les-mouchards-avec.html' class='spip_in'>Ghostery</a> qui élimine des dizaines d'autres mouchards.)</i></p> <p>Sur Chrome, <a href="https://chrome.google.com/extensions/detail/cfhdojbkjhnklbpkdaibdccddilifddb?hl=fr" class='spip_out' rel='external'>AdThwart</a> (ou encore l'extension <a href="https://chrome.google.com/extensions/detail/gnecinlcbopifepgjdlfhdpfgkgjjibk" class='spip_out' rel='external'>Facebreak</a>) :<br class='autobr' /> <span class='spip_document_39 spip_documents spip_documents_center'> <img src='http://zzz.rezo.net/local/cache-vignettes/L500xH442/adthwart-chrome-5911d.png' width='500' height='442' alt="" style='height:442px;width:500px;' /></span></p> <p>Sur Safari, <a href="http://burgersoftware.com/fr/safariadblock" class='spip_out' rel='external'>Adblock</a> (ci-dessous) ou <a href="http://sweetpproductions.com/safariadblocker/" class='spip_out' rel='external'>Adblocker</a> :<br class='autobr' /> <span class='spip_document_38 spip_documents spip_documents_center'> <img src='http://zzz.rezo.net/local/cache-vignettes/L500xH353/adblock-safari-eb83a.png' width='500' height='353' alt="" style='height:353px;width:500px;' /></span></p> <p>Avec cette méthode je peux continuer à utiliser Facebook si je veux, sans pour autant l'autoriser à espionner chacune de mes visites sur chacun des sites qui a eu l'imbécillité d'activer ces foutus plugins « sociaux ».</p> <p><strong>P.-S.</strong> A mon sens, ce problème relèvera rapidement des tribunaux, notamment en Europe où la défense de la vie privée reste un enjeu de droit important. Mais ce n'est pas l'objet de ce petit billet.</p> <p>Vos commentaires, et notamment pour indiquer de meilleures méthodes de blocage, sont les bienvenus.</p></div> How to block Facebook's narks http://zzz.rezo.net/HowTo-Block-Facebook-s-narks.html http://zzz.rezo.net/HowTo-Block-Facebook-s-narks.html 2010-04-27T20:25:00Z text/html en Fil Web Publicité <p>With its Social Plugins introduced a few days ago, Facebook wants to add a “Like” button on all the pages of the Web. It's probably great for this company to know who is looking at what page on each site at every moment... But I don't like it. You just have to leave FB, will you tell me. Not so simple. With these plugins every webmaster is encouraged to add on her own pages a little line of code that directly informs Facebook of the fact that you are reading that page. If you are connected to (...)</p> - <a href="http://zzz.rezo.net/-Scripts-.html" rel="directory">Scripts</a> / <a href="http://zzz.rezo.net/+-Web-+.html" rel="tag">Web</a>, <a href="http://zzz.rezo.net/+-Publicite-+.html" rel="tag">Publicité</a> <div class='rss_chapo'><p>With its <a href="http://developers.facebook.com/docs/reference/plugins/" class='spip_out' rel='external'>Social Plugins</a> introduced a few days ago, Facebook wants to add a “Like” button on all the pages of the Web. It's probably great for this company to know who is looking at what page on each site at every moment... But I don't like it.</p></div> <div class='rss_texte'><p>You just have to leave <span class="caps">FB</span>, will you tell me. Not so simple. With these plugins every webmaster is encouraged to add on her own pages a little line of code that directly informs Facebook of the fact that you are reading that page.</p> <p>If you are connected to Facebook with the same browser, the message that displays is personalized with your name and your friends and so on. If you are connected, <span class="caps">FB</span> knows your name and can register where you go on the Web; but in <i>all cases</i>, even if you are not connected to <span class="caps">FB</span>, Facebook receives an information on the fact that you are visiting that page.</p> <p>To mitigate the problem, open your favorite ad blocker, and add the following personalized rule:<br class='autobr' /> <code class='spip_code' dir='ltr'>||facebook.com/*$third-party</code></p> <p>This tells the ad blocker to block all calls to Facebook's resources from any other site than <span class="caps">FB</span> itself. This way, I can still use <span class="caps">FB</span> if I want, but won't be traced on other sites.</p> <p>As <a href="http://gelb.net/gelblog/2010/05/10/wie-man-facebook-social-plugins-den-garaus-macht/" class='spip_out' hreflang='de' rel='external'>Horatiorama</a> has noticed, one must also add a line against the Facebook <span class="caps">CDN</span> (content delivery network) <code class='spip_code' dir='ltr'>fbcdn.net</code>.</p> <p>And while I'm at it, let's add a rule to block Google Analytics's nark:</p> <div style='text-align: left;' class='spip_code' dir='ltr'><code>||facebook.com/*$third-party<br /> ||fbcdn.net/*$domain=~facebook.com<br /> ||google-analytics.com/ga.js$third-party</code></div> <p>For Firefox, I use <a href="https://addons.mozilla.org/en/firefox/addon/1865" class='spip_out' rel='external'>Adblock Plus</a> :<br class='autobr' /> <span class='spip_document_37 spip_documents spip_documents_center'> <img src='http://zzz.rezo.net/local/cache-vignettes/L500xH390/adblock-firefox-284e0.png' width='500' height='390' alt="" style='height:390px;width:500px;' /></span></p> <p>For Chrome, <a href="https://chrome.google.com/extensions/detail/cfhdojbkjhnklbpkdaibdccddilifddb?hl=en" class='spip_out' rel='external'>AdThwart</a> (see also <a href="https://chrome.google.com/extensions/detail/gnecinlcbopifepgjdlfhdpfgkgjjibk" class='spip_out' rel='external'>Facebreak</a> which claims to block <span class="caps">FB</span>'s plugins):<br class='autobr' /> <span class='spip_document_39 spip_documents spip_documents_center'> <img src='http://zzz.rezo.net/local/cache-vignettes/L500xH442/adthwart-chrome-5911d.png' width='500' height='442' alt="" style='height:442px;width:500px;' /></span></p> <p>And, for Safari, <a href="http://burgersoftware.com/en/safariadblock" class='spip_out' rel='external'>Adblock</a>:<br class='autobr' /> <span class='spip_document_38 spip_documents spip_documents_center'> <img src='http://zzz.rezo.net/local/cache-vignettes/L500xH353/adblock-safari-eb83a.png' width='500' height='353' alt="" style='height:353px;width:500px;' /></span></p> <p>With this method I can continue using Facebook if I want, without letting it spy each of my visits to any of the sites that had the stupid idea of activating one of these so-called “social” plugins.</p> <p><strong>P.-S.</strong> I can only imagine that this problem will soon be discussed in a tribunal. In Europe privacy is still an important legal question. But that's not the subject of this quick note.</p> <p>Your comments, especially to give better blocking methods, are welcome.</p></div> HowTo: Expand Short URLs http://zzz.rezo.net/HowTo-Expand-Short-URLs.html http://zzz.rezo.net/HowTo-Expand-Short-URLs.html 2010-01-09T12:47:17Z text/html en Fil <p>Short URLs have been plaguing the Web. They break links, enable surfing surveillance, forbid us to know if we have visited such or such article before, and remove any indication of what's behind your next click. With long.rezo.net, you can now dereference those short URLs, and peek at the address they point to without actually going to it. In the “short url” input enter your short URL, and the site will indicate its destination address, with a link to it in case you want to proceed. Bonus (...)</p> - <a href="http://zzz.rezo.net/-Scripts-.html" rel="directory">Scripts</a> <div class='rss_chapo'><p>Short URLs have been plaguing the Web. They break links, enable surfing surveillance, forbid us to know if we have visited such or such article before, and remove any indication of what's behind your next click.</p></div> <div class='rss_texte'><p>With <a href="http://long.rezo.net/" class='spip_out' rel='external'>long.rezo.net</a>, you can now dereference those short URLs, and peek at the address they point to without actually going to it.</p> <dl class='spip_document_33 spip_documents spip_documents_center'> <dt><img src='http://zzz.rezo.net/local/cache-vignettes/L500xH402/long-rezo-5372b.png' width='500' height='402' alt='PNG - 180.5 kb' style='height:402px;width:500px;' /></dt> <dt class='crayon document-titre-33 spip_doc_titre' style='width:350px;'><strong>Screenshot of the long.rezo.net website</strong></dt> </dl> <p>In the “short url” input enter your short <span class="caps">URL</span>, and the site will indicate its destination address, with a link to it in case you want to proceed.</p> <p>Bonus : your (long) address is checked on delicious and you will see its title and associated tags if it has already been registered.</p> <h3 class='h3 spip'>How it works</h3> <p>The script that dereferences a short <span class="caps">URL</span> is a simple application of the <span class="caps">HTTP</span> protocol. The site calls the short <span class="caps">URL</span>, and checks if the headers contain a redirection line <code class='spip_code' dir='ltr'>Location: long address</code>.</p> <p>In <span class="caps">PHP</span> this is done with the following code:</p> <div style='text-align: left;' class='spip_code' dir='ltr'><code>$ch = curl_init();<br /> curl_setopt($ch, CURLOPT_URL, $url);<br /> curl_setopt($ch, CURLOPT_HEADER, true);<br /> curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);<br /> curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);<br /> $a = curl_exec($ch);<br /> if(preg_match('#Location: (.*)#', $a, $r))<br /> $l = trim($r[1]);</code></div> <h3 class='h3 spip'>Going a bit further</h3> <p>I tried to find a method to go a bit further, because copy-pasting the short <span class="caps">URL</span> on the <a href="http://long.rezo.net/" class='spip_out' rel='external'>long.rezo.net</a> website is not very convenient. To do it systematically, I toyed with my computer's configuration.</p> <p>In the <code class='spip_code' dir='ltr'>HOSTS</code> file (<a href="http://www.google.fr/search?q=modifier+hosts" class='spip_out' rel='external'>help</a>) I've added the following line:</p> <form action='' method='get'><div> <input type='hidden' name='exec' value='' /> <textarea readonly='readonly' cols='40' rows='3' class='spip_cadre' dir='ltr'>193.56.58.14 bit.ly goo.gl 2tu.us icio.us tinyurl.com tr.im ur1.ca a.pwal.fr j.mp is.gd a.gd ow.ly spedr.com shar.es twurl.nl shr.im u.nu</textarea></div></form> <p>Then any call to one of those short URLs system is routed to my server at <span class="caps">IP</span> address <code class='spip_code' dir='ltr'>193.56.58.14</code>, on which I've configured a simple mechanism to intercept those URLs, and proxy the others to their (legitimate) destination.</p> <p>Her's my apache configuration for these services:</p> <form action='' method='get'><div> <input type='hidden' name='exec' value='' /> <textarea readonly='readonly' cols='40' rows='15' class='spip_cadre' dir='ltr'><VirtualHost 193.56.58.14:80> ServerName proxy-long.rezo.net ServerAlias bit.ly goo.gl 2tu.us icio.us tinyurl.com tr.im ur1.ca a.pwal.fr j.mp is.gd a.gd ow.ly spedr.com shar.es twurl.nl shr.im u.nu RewriteEngine On # short url => long.rezo.net RewriteRule ^/(fb/)?[A-Za-z0-9]+$ http://long.rezo.net/?url=http://%{HTTP_HOST}$0 [R,L] # proxy pour le reste RewriteRule ^.*$ http://%{HTTP_HOST}$0 [P,L] </VirtualHost></textarea></div></form> <p>Maybe a bit complex to install, this method enables me to get the <a href="http://long.rezo.net/" class='spip_out' rel='external'>long.rezo.net</a> <span class="caps">URL</span> each time I click on a short <span class="caps">URL</span>, anywhere on my computer — in my email, in my twitter client, and so on.</p> <p>You can use <code class='spip_code' dir='ltr'>193.56.58.14</code> if you wish to test, but I encourage you to install your own proxy, as my system is very much experimental.</p> <p>If you have a better idea to do this, please indicate it in the forum below!</p></div> Allongez vos URLs http://zzz.rezo.net/Allongez-vos-URLs.html http://zzz.rezo.net/Allongez-vos-URLs.html 2010-01-07T21:20:48Z text/html fr Fil Web <p>Les URLs courtes sont une plaie du Web : elles cassent les liens, permettent à leurs promoteurs de surveiller la navigation des internautes, interdisent de savoir si on a déjà vu ou non tel ou tel article, n'offrent aucun indice sur leur destination. Avec long.rezo.net, vous pouvez déréférencer ces URLs courtes, et obtenir l'adresse sur laquelle elles pointent. Dans la case « short url » entrez votre adresse courte, le site vous indiquera vers quelle destination elle pointe, avec un lien vers cette (...)</p> - <a href="http://zzz.rezo.net/-Scripts-.html" rel="directory">Scripts</a> / <a href="http://zzz.rezo.net/+-Web-+.html" rel="tag">Web</a> <div class='rss_chapo'><p>Les URLs courtes sont une plaie du Web : elles cassent les liens, permettent à leurs promoteurs de surveiller la navigation des internautes, interdisent de savoir si on a déjà vu ou non tel ou tel article, n'offrent aucun indice sur leur destination.</p></div> <div class='rss_texte'><p>Avec <a href="http://long.rezo.net/" class='spip_out' rel='external'>long.rezo.net</a>, vous pouvez déréférencer ces URLs courtes, et obtenir l'adresse sur laquelle elles pointent.</p> <dl class='spip_document_33 spip_documents spip_documents_center'> <dt><img src='http://zzz.rezo.net/local/cache-vignettes/L500xH402/long-rezo-5372b.png' width='500' height='402' alt='PNG - 180.5 ko' style='height:402px;width:500px;' /></dt> <dt class='crayon document-titre-33 spip_doc_titre' style='width:350px;'><strong>Photo d'écran du service long.rezo.net</strong></dt> </dl> <p>Dans la case « short url » entrez votre adresse courte, le site vous indiquera vers quelle destination elle pointe, avec un lien vers cette page.</p> <p>Bonus : une vérification de cette adresse sur le site delicious.com vous indique le titre et les éventuels tags associés à cette page.</p> <h3 class='h3 spip'>Principe</h3> <p>Le script qui permet de déréférencer une <span class="caps">URL</span> courte est une simple application du protocole <span class="caps">HTTP</span> : on appelle l'adresse courte, et si elle envoie un entête de redirection <code class='spip_code' dir='ltr'>Location: xxxx</code>, on récupère cette nouvelle adresse.</p> <p>En <span class="caps">PHP</span> cela donne :</p> <div style='text-align: left;' class='spip_code' dir='ltr'><code>$ch = curl_init();<br /> curl_setopt($ch, CURLOPT_URL, $url);<br /> curl_setopt($ch, CURLOPT_HEADER, true);<br /> curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);<br /> curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);<br /> $a = curl_exec($ch);<br /> if(preg_match('#Location: (.*)#', $a, $r))<br /> $l = trim($r[1]);</code></div> <h3 class='h3 spip'>Aller plus loin</h3> <p>J'ai cherché une méthode pour aller plus loin, car copier-coller l'adresse courte sur le site <a href="http://long.rezo.net/" class='spip_out' rel='external'>long.rezo.net</a> n'est pas très pratique. Pour le faire de manière systématique, j'ai bricolé un peu la configuration de mon ordinateur.</p> <p>Dans le fichier <code class='spip_code' dir='ltr'>HOSTS</code> (<a href="http://www.google.fr/search?q=modifier+hosts" class='spip_out' rel='external'>aide</a>) j'ai ajouté la ligne :</p> <form action='' method='get'><div> <input type='hidden' name='exec' value='' /> <textarea readonly='readonly' cols='40' rows='3' class='spip_cadre' dir='ltr'>193.56.58.14 bit.ly goo.gl 2tu.us icio.us tinyurl.com tr.im ur1.ca a.pwal.fr j.mp is.gd a.gd ow.ly spedr.com shar.es twurl.nl shr.im u.nu</textarea></div></form> <p>Dès lors, mes appels vers le site de ces réducteurs d'URLs sont redirigés vers mon serveur à l'adresse <span class="caps">IP</span> <code class='spip_code' dir='ltr'>193.56.58.14</code>, sur lequel j'ai configuré très simplement un mécanisme qui intercepte les URLs courtes et fait proxy pour le reste.</p> <p>Voici la configuration d'apache pour ces services :</p> <form action='' method='get'><div> <input type='hidden' name='exec' value='' /> <textarea readonly='readonly' cols='40' rows='15' class='spip_cadre' dir='ltr'><VirtualHost 193.56.58.14:80> ServerName proxy-long.rezo.net ServerAlias bit.ly goo.gl 2tu.us icio.us tinyurl.com tr.im ur1.ca a.pwal.fr j.mp is.gd a.gd ow.ly spedr.com shar.es twurl.nl shr.im u.nu RewriteEngine On # short url => long.rezo.net RewriteRule ^/(fb/)?[A-Za-z0-9]+$ http://long.rezo.net/?url=http://%{HTTP_HOST}$0 [R,L] # proxy pour le reste RewriteRule ^.*$ http://%{HTTP_HOST}$0 [P,L] </VirtualHost></textarea></div></form> <p>Certes un peu lourde à mettre en œuvre, la méthode me permet dès lors que je clique un lien court n'importe où — dans mon mail, dans mon client twitter, etc. — d'en obtenir la version de <a href="http://long.rezo.net/" class='spip_out' rel='external'>long.rezo.net</a>.</p> <p>Vous pouvez utiliser si vous le souhaitez utiliser <code class='spip_code' dir='ltr'>193.56.58.14</code> pour vos tests, mais je vous encourage à installer votre propre proxy, car mon système reste largement expérimental pour le moment.</p> <p>Si vous avez une meilleure idée pour faire cela, n'hésitez pas à l'indiquer dans le forum ci-dessous !</p></div> Mon ordinateur me twitte http://zzz.rezo.net/Mon-ordinateur-me-twitte.html http://zzz.rezo.net/Mon-ordinateur-me-twitte.html 2009-05-22T21:54:19Z text/html fr Fil <p>Quand mon ordinateur a chaud, il me twitte ; quand il a soif, il me twitte (lire aussi Sécurité : attention au ver Gumblar). Attention ce qui suit n'est plus valide à partir du 16 août 2010, car twitter a supprimé l'accès « Basic Auth » avec mot de passe, et n'accepte plus que l'accès « OAuth ». Voici le script qui permet d'envoyer un twitt en ligne de commande : /usr/local/bin/twitter # ! /usr/bin/php -q $v) if (preg_match (',^-(u|p|h|d)(.*),S', $v, $regs)) switch ($regs[1]) case 'u' : (...)</p> - <a href="http://zzz.rezo.net/-Scripts-.html" rel="directory">Scripts</a> <div class='rss_texte'><p>Quand mon ordinateur a chaud, il me twitte ; quand il a soif, il me twitte (lire aussi <a href='http://zzz.rezo.net/Securite-attention-au-ver-Gumblar.html' class='spip_in'>Sécurité : attention au ver Gumblar</a>).</p> <p><strong>Attention ce qui suit n'est plus valide à partir du 16 août 2010, car twitter a supprimé l'accès « Basic Auth » avec mot de passe, et n'accepte plus que l'accès « OAuth ».</strong></p> <p>Voici le script qui permet d'envoyer un twitt en ligne de commande :</p> <p><code class='spip_code' dir='ltr'>/usr/local/bin/twitter</code></p> <form action='' method='get'><div> <input type='hidden' name='exec' value='' /> <textarea readonly='readonly' cols='40' rows='77' class='spip_cadre' dir='ltr'>#! /usr/bin/php -q <?php # le status vient de la ligne de commande (twitter coucou toi) $a = $argv; $script = array_shift($a); foreach($a as $c => $v) { if (preg_match (',^-(u|p|h|d)(.*),S', $v, $regs)) { switch ($regs[1]) { case 'u': $USER=$regs[2]; break; case 'p': $PASS=$regs[2]; break; case 'h': $HOST=$regs[2]; break; case 'd': $DEBUG=true; break; } unset($a[$c]); } } ## if (!$USER OR !$PASS) die("Usage: $script -uUSER -pPASS [-hHOST] [-d(ebug)] message a twitter\n"); ## service $apis = array( 'twitter' => 'https://twitter.com/statuses/update.xml', 'identica' => 'http://identi.ca/api/statuses/update.xml', 'spipo' => 'http://spip.org/api/statuses/update.xml', ); if (!isset($apis[$HOST])) $HOST = 'twitter'; $CACHE='/tmp/'.$HOST.'_status.'.$USER; $STATUS=trim(join(' ', $a)); # ou la premiere ligne du flux d'entree (cat toto | twitter) if (!strlen($STATUS)) $STATUS = trim(fgets(STDIN)); if (strlen($STATUS)) { $OLDSTATUS=@trim(array_pop(file($CACHE))); if ($STATUS != $OLDSTATUS) { fwrite(fopen($CACHE, 'aw'), $STATUS."\n"); @chmod($CACHE, 0666); $msg = substr($STATUS, 0, 140); $msg = utf8_encode($msg); #TODO tester d'abord si utf8 et alors ne pas convertir $api = $apis[$HOST]; $curl_handle = curl_init(); curl_setopt($curl_handle, CURLOPT_URL, $api); curl_setopt($curl_handle, CURLOPT_POST, 1); curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl_handle, CURLOPT_POSTFIELDS, 'status='.rawurlencode($msg)); curl_setopt($curl_handle, CURLOPT_USERPWD, $USER.':'.$PASS); curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 3); $r = curl_exec($curl_handle); if ($DEBUG) echo $r; } }</textarea></div></form> <p>Ce script s'utilise en ligne de commande de la façon suivante :<br class='manualbr' /><code class='spip_code' dir='ltr'># twitter -uUSER -pPASSWORD message à twitter</code></p> <p>ou :<br class='manualbr' /><code class='spip_code' dir='ltr'># grep xxx ... | twitter -uUSER -pPASSWORD</code></p> <p>(Bien entendu on peut mettre le nom et le mot de passe dans un alias.)</p> <dl class='spip_document_20 spip_documents spip_documents_center'> <dt><a href='http://zzz.rezo.net/IMG/png/nambu.png' title='PNG - 207.7 ko' type="image/png"><img src='http://zzz.rezo.net/local/cache-vignettes/L150xH68/nambu-7666f-35901.png' width='150' height='68' alt='PNG - 207.7 ko' style='height:68px;width:150px;' /></a></dt> <dt class='crayon document-titre-20 spip_doc_titre' style='width:150px;'><strong>Et voilà le résultat</strong></dt> <dd class='crayon document-descriptif-20 spip_doc_descriptif' style='width:150px;'>Dans mon client twitter, un message de mon serveur disant qu'une table MySQL a crashé </dd> </dl></div> Security: beware of the Gumblar worm http://zzz.rezo.net/Security-beware-of-the-Gumblar.html http://zzz.rezo.net/Security-beware-of-the-Gumblar.html 2009-05-20T18:44:57Z text/html en Fil Web <p>The Gumblar worm is spreading like fire among websites. Using stolen passwords, it infects many files on web servers, with malicious code that, when executed on another webmaster's local computer, steals her passwords and thus gets information that enables it to infect more sites. For more detailed information on this exploit see http://blog.unmaskparasites.com/200... and http://www.martinsecurity.net/2009/.... A trick I use to protect my own servers is the following: in the (...)</p> - <a href="http://zzz.rezo.net/-Scripts-.html" rel="directory">Scripts</a> / <a href="http://zzz.rezo.net/+-Web-+.html" rel="tag">Web</a> <div class='rss_texte'><p>The <strong>Gumblar</strong> worm is spreading like fire among websites. Using stolen passwords, it infects many files on web servers, with malicious code that, when executed on another webmaster's local computer, steals her passwords and thus gets information that enables it to infect more sites.</p> <p>For more detailed information on this exploit see <a href="http://blog.unmaskparasites.com/2009/05/07/gumblar-cn-exploit-12-facts-about-this-injected-script/" class='spip_url spip_out' rel='external'>http://blog.unmaskparasites.com/200...</a> and <a href="http://www.martinsecurity.net/2009/05/20/inside-the-massive-gumblar-attacka-dentro-del-enorme-ataque-gumblar/" class='spip_url spip_out' rel='external'>http://www.martinsecurity.net/2009/...</a>.</p> <p>A trick I use to protect my own servers is the following: in the run-every-minute <code class='spip_code' dir='ltr'>cron</code> job I usually have, I add the following line:</p> <div style='text-align: left;' class='spip_code' dir='ltr'><code>for i in $(grep -E "(image|index).php" /var/log/xferlog | cut -d' ' -f10 | sort -u); do grep unescape $i 2>/dev/null; done | $twitter</code></div> <p><code class='spip_code' dir='ltr'>$twitter</code> is a script that sends me a twit.</p> <p>In other words: whenever a file called <code class='spip_code' dir='ltr'>index.php</code> or <code class='spip_code' dir='ltr'>image.php</code> is uploaded by <span class="caps">FTP</span> (leaving a trace in <code class='spip_code' dir='ltr'>/var/log/xferlog</code>), it will be checked for the string "<code class='spip_code' dir='ltr'>unescape</code>". It that string is present I'll get twitted within the minute.</p> <p>Let's hope I won't have to see it work!</p></div>