<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Zapoyok &#187; Programmation</title>
	<atom:link href="http://www.zapoyok.info/category/programmation/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zapoyok.info</link>
	<description></description>
	<lastBuildDate>Sun, 05 Feb 2012 09:12:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Ajouter une librairie Tierce à Symfony 2</title>
		<link>http://www.zapoyok.info/2012/01/15/ajouter-une-librairie-tierce-a-symfony-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ajouter-une-librairie-tierce-a-symfony-2</link>
		<comments>http://www.zapoyok.info/2012/01/15/ajouter-une-librairie-tierce-a-symfony-2/#comments</comments>
		<pubDate>Sun, 15 Jan 2012 22:54:32 +0000</pubDate>
		<dc:creator>Jérôme FIX</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony 2]]></category>

		<guid isPermaLink="false">http://www.zapoyok.info/?p=605</guid>
		<description><![CDATA[Je tente d&#8217;intégrer la librairie « getID3() » dans mon projet d&#8217;apprentissage de Symfony 2. Pour faire selon les préconisations de Symfony 2, les aplications tierces se placent dans le dossier vendor des sources du projet. Pour les librairies récentes ( au moins développé en PHP 5.3 ) et qui suivent le standard RP-0, cela [...]]]></description>
			<content:encoded><![CDATA[<p>Je tente d&#8217;intégrer la librairie « <a href="http://www.getid3.org/" target="_blank">getID3()</a> » dans mon projet d&#8217;apprentissage de Symfony 2.</p>
<p>Pour faire selon les préconisations de Symfony 2, les aplications tierces se placent dans le dossier vendor des sources du projet.<br />
Pour les librairies récentes ( au moins développé en PHP 5.3 ) et qui suivent le standard <a href="http://groups.google.com/group/php-standards/web/psr-0-final-proposal?pli=1" target="_blank">RP-0</a>, cela se ferait directement, seulement ici ce n&#8217;est pas la cas. Il va donc falloir rusé un peu, mais rien de bien sorcier non plus.</p>
<h2>Mode d&#8217;emploi :</h2>
<p>On commence par préparer le terrain en créant les répertoires nécessaires :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>vendor<span style="color: #000000; font-weight: bold;">/</span>getid3<span style="color: #000000; font-weight: bold;">/</span>getID3<span style="color: #000000; font-weight: bold;">/</span>src</pre></td></tr></table></div>

<p>et on y place les sources de getID3()</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;"># vendor/getid3/getID3/getID3.php
</span><span style="color: #b1b100;">require_once</span> __DIR__<span style="color: #339933;">.</span><span style="color: #0000ff;">'/src/getid3/getid3.php'</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">class</span> getID3_getID3 <span style="color: #000000; font-weight: bold;">extends</span> getID3 <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>On renseigne ensuite l&#8217;autoloader de Symfony 2</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># app/autoload.php
</span>
<span style="color: #000088;">$loader</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">registerPrefixes</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
   <span style="color: #666666; font-style: italic;">// … others lines</span>
   <span style="color: #0000ff;">'getID3_'</span>            <span style="color: #339933;">=&gt;</span> __DIR__<span style="color: #339933;">.</span><span style="color: #0000ff;">'/../vendor/getid3'</span><span style="color: #339933;">,</span>
<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>et on peu dès lors l&#8217;utilisé normalement :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// …</span>
<span style="color: #000088;">$getID3</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> \getID3_getID3<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// …</span></pre></td></tr></table></div>

<p>En espérant que cela aide.</p>
<p><strong>Ressources</strong> :</p>
<ul>
<li><a href="http://symfony.com/doc/2.0/components/class_loader.html" target="_blank">http://symfony.com/doc/2.0/components/class_loader.html</a></li>
<li><a href="http://www.getid3.org/" target="_blank">http://www.getid3.org/</a></li>
<li><a href="http://groups.google.com/group/php-standards/web/psr-0-final-proposal?pli=1" target="_blank">Standard RP-0</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.zapoyok.info/2012/01/15/ajouter-une-librairie-tierce-a-symfony-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sessions</title>
		<link>http://www.zapoyok.info/2010/07/18/sessions/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sessions</link>
		<comments>http://www.zapoyok.info/2010/07/18/sessions/#comments</comments>
		<pubDate>Sat, 17 Jul 2010 22:02:18 +0000</pubDate>
		<dc:creator>Jérôme FIX</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[hijacking]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[session]]></category>

		<guid isPermaLink="false">http://www.zapoyok.info/?p=324</guid>
		<description><![CDATA[Désactiver les identifiants de sessions dans les URLS En activant « session.use-only-cookies », vous éviterez les attaques qui utilisent des identifiants de sessions dans les URLS. Le système de gestion des sessions par URL pose un risque supplémentaire de sécurité : un utilisateur peut envoyer son URL avec l&#8217;identifiant de session par email à un ami, ou [...]]]></description>
			<content:encoded><![CDATA[<h2>Désactiver les identifiants de sessions dans les URLS</h2>
<p> En activant « session.use-only-cookies », vous éviterez les attaques qui utilisent des identifiants de sessions dans les URLS.</p>
<p>Le système de gestion des sessions par URL pose un risque supplémentaire de sécurité : un utilisateur peut envoyer son URL avec l&#8217;identifiant de session par email à un ami, ou bien le mettre dans ses signets. Cela diffusera alors l&#8217;identifiant de session. On le désactive donc.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">ini_set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'session.use_only_cookies'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">ini_set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'session.use_trans_sid'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #0000ff;">', 0);
session_start();</span></pre></td></tr></table></div>

<ul>
<li><a href="http://www.php.net/manual/fr/session.configuration.php#ini.session.use-only-cookies">session.use_only_cookies</a></li>
<li><a href="http://www.php.net/manual/fr/session.configuration.php#ini.session.use-trans-sid">session.use_trans_sid</a></li>
</ul>
<h2>Initialiser les sessions</h2>
<h3>Session fixation</h3>
<p>Quelques explications : <a href="http://en.wikipedia.org/wiki/Session_fixation">http://en.wikipedia.org/wiki/Session_fixation</a></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Session fixation</span>
<span style="color: #666666; font-style: italic;">// On vérifie qu'une valeur connue de nous même (ici &quot;no_fixation&quot;) est présente </span>
<span style="color: #666666; font-style: italic;">// en session, sinon on regénère la session.</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'no_fixation'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #990000;">session_regenerate_id</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    <span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'no_fixation'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h3>Session hijacking</h3>
<p>Quelques explications : <a href="http://en.wikipedia.org/wiki/Session_hijacking">http://en.wikipedia.org/wiki/Session_hijacking</a></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Session hijacking</span>
<span style="color: #000088;">$signature</span> <span style="color: #339933;">=</span> <span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_USER_AGENT'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span>  <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_ACCEPT_CHARSET'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> SALT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'signature'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'signature'</span> <span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$signature</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'signature'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">!==</span> <span style="color: #000088;">$signature</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Erreur de session '</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><strong>Attention !</strong><br />
J&#8217;ai remarqué que sous certains navigateurs l&#8217;entête <code>Accept </code> n&#8217;est pas forcément consistant d&#8217;une page à l&#8217;autre, notamment en actualisant une page. C&#8217;est donc un entête à éviter pour la signature.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zapoyok.info/2010/07/18/sessions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSRF et QuickForm de PEAR</title>
		<link>http://www.zapoyok.info/2010/07/17/csrf-et-quickform-de-pear/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=csrf-et-quickform-de-pear</link>
		<comments>http://www.zapoyok.info/2010/07/17/csrf-et-quickform-de-pear/#comments</comments>
		<pubDate>Sat, 17 Jul 2010 15:35:16 +0000</pubDate>
		<dc:creator>Jérôme FIX</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[CSRF]]></category>
		<category><![CDATA[PEAR]]></category>
		<category><![CDATA[QuickForm]]></category>
		<category><![CDATA[sécurité]]></category>

		<guid isPermaLink="false">http://www.zapoyok.info/?p=312</guid>
		<description><![CDATA[J&#8217;utilise encore beaucoup QuickForm de PEAR pour gérer mes formulaires, une classe pour disposer automatiquement d&#8217;une « protection » contre les CSRF trouvée à l&#8217;adresse : http://shiflett.org/articles/cross-site-request-forgeries#comment-66 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;utilise encore beaucoup <a href="http://pear.php.net/package/HTML_QuickForm">QuickForm de PEAR</a> pour gérer mes formulaires, une classe pour disposer automatiquement d&#8217;une « protection » contre les CSRF trouvée à l&#8217;adresse : <a href="http://shiflett.org/articles/cross-site-request-forgeries#comment-66">http://shiflett.org/articles/cross-site-request-forgeries#comment-66</a></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * @uses HTML_QuickForm
 * @desc Add automatic CSRF mitigation to all forms by incorporating a token that must be matched in the session and forcing the use of POST method
 */</span>
<span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">&quot;QuickForm.php&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">class</span> HTML_QuickFormS <span style="color: #000000; font-weight: bold;">extends</span> HTML_QuickForm <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * @property string $_sessionTokenKey The name of the session variable containing the token
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$_sessionTokenKey</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * @method HTML_QuickFormS
     * @desc Override the method to always use post and pass it on to the parent constructor. Create a session key for the token based on the form name.
     * @param string $formName
     * @param string $method
     * @param string $action
     * @param string $target
     * @param mixed $attributes
     * @param boolean $trackSubmit
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> HTML_QuickFormS<span style="color: #009900;">&#40;</span><span style="color: #000088;">$formName</span><span style="color: #339933;">=</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #000088;">$method</span><span style="color: #339933;">=</span><span style="color: #0000ff;">'post'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$action</span><span style="color: #339933;">=</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #000088;">$target</span><span style="color: #339933;">=</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #000088;">$attributes</span><span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #000088;">$trackSubmit</span><span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_sessionTokenKey <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;QuickFormS_&quot;</span><span style="color: #339933;">.</span><span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$formName</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        parent<span style="color: #339933;">::</span><span style="color: #004000;">HTML_QuickForm</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$formName</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'post'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$action</span><span style="color: #339933;">,</span> <span style="color: #000088;">$target</span><span style="color: #339933;">,</span> <span style="color: #000088;">$attributes</span><span style="color: #339933;">,</span> <span style="color: #000088;">$trackSubmit</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * @method display
     * @desc Create a token if necessary and place a hidden field in the form before displaying
     * @return void
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> display<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//A token hasn't been created so do so</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_sessionTokenKey<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_sessionTokenKey<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">uniqid</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #990000;">session_id</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//requires the session id to be known in order to add extra difficulty to compromising</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//Hide the token at the end of the form</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addElement</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;hidden&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;qfS_csrf&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_sessionTokenKey<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        parent<span style="color: #339933;">::</span><span style="color: #004000;">display</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * @method validate
     * @desc Check if the passed token matches the session before allowing validation
     * @return boolean
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> validate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//The token was not passed or does not match</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_submitValues<span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'qfS_csrf'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_submitValues<span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'qfS_csrf'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">!=</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_sessionTokenKey<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setElementError</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;qfS_csrf&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;Anti-CSRF token does not match&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> parent<span style="color: #339933;">::</span><span style="color: #004000;">validate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
 <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.zapoyok.info/2010/07/17/csrf-et-quickform-de-pear/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Protection de vos scripts PHP : validation des données, XSS, CSRF,…</title>
		<link>http://www.zapoyok.info/2010/07/16/protection-de-vos-scripts-php-%c2%a0validation-des-donnees-xss-csrf%e2%80%a6/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=protection-de-vos-scripts-php-%25c2%25a0validation-des-donnees-xss-csrf%25e2%2580%25a6</link>
		<comments>http://www.zapoyok.info/2010/07/16/protection-de-vos-scripts-php-%c2%a0validation-des-donnees-xss-csrf%e2%80%a6/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 06:15:31 +0000</pubDate>
		<dc:creator>Jérôme FIX</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Trucs et astuces]]></category>
		<category><![CDATA[CSRF]]></category>
		<category><![CDATA[filtre]]></category>
		<category><![CDATA[formulaire]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[validate]]></category>
		<category><![CDATA[XSS]]></category>
		<category><![CDATA[Zend]]></category>

		<guid isPermaLink="false">http://www.zapoyok.info/?p=275</guid>
		<description><![CDATA[Aujourd&#8217;hui je commence une série d&#8217;articles sur quelques points de sécurité et de bon sens avec PHP. Ces articles n&#8217;ont et n&#8217;auront rien de bien original par rapport à ce que l&#8217;on peut glaner de ci de là sur Internet, mais ils pourront me ou vous servir d&#8217;aide mémoire ou de piqûre de rappel ! [...]]]></description>
			<content:encoded><![CDATA[<p>Aujourd&#8217;hui je commence une série d&#8217;articles sur quelques points de sécurité et de bon sens avec PHP.<br />
Ces articles n&#8217;ont et n&#8217;auront rien de bien original par rapport à ce que l&#8217;on peut glaner de ci de là sur Internet, mais ils pourront me ou vous servir d&#8217;aide mémoire ou de piqûre de rappel !</p>
<h2>Validation et filtrage des entrées</h2>
<p>Un maître mot : « <strong>Ne jamais faire confiance aux données étrangères</strong> » !<br />
Chaque donnée reçue doit être validée pour s&#8217;assurer qu&#8217;elle corresponde à ce que l&#8217;on attend réellement.</p>
<p>En PHP il existe de très nombreux outils de validation des données :</p>
<ol>
<li>Les opérateur de comparaison, de taille (chaînes, tableaux),…</li>
<li>L&#8217;utilisation de liste de valeurs autorisées (« white-list ») : <code lang="php">isset($hash[$var]) ... in_array($var, $allowed)</code></li>
<li>À l&#8217;aide d&#8217;expression régulières : preg_match(&#8216;/&#8230;/&#8217; , $var);</li>
<li>Extension <a href="http://fr.php.net/manual/fr/ref.ctype.php">ctype</a> : <code lang="php">ictype_digit($var);</code> qui va vérifier que <code lang="php">$var</code> ne contient que des chiffres</li>
<li>Les fonctions is_* : <code lang="php">is_scalar($var);</code></li>
<li>Depuis l&#8217;extension PHP 5.2, l&#8217;utilisation de l&#8217;extension <a href="http://fr.php.net/manual/fr/book.filter.php">Filter</a> est recommandée.<br />
Exemple d&#8217;utilisation  :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$clean</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'param1'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">filter_input</span><span style="color: #009900;">&#40;</span>INPUT_POST<span style="color: #339933;">,</span> <span style="color: #0000ff;">'param1'</span><span style="color: #339933;">,</span> FILTER_VALIDATE_BOOLEAN<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$clean</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'email'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">filter_input</span><span style="color: #009900;">&#40;</span>INPUT_POST<span style="color: #339933;">,</span> <span style="color: #0000ff;">'email'</span><span style="color: #339933;">,</span> FILTER_VALIDATE_EMAIL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

</li>
<li>Pour Zend l&#8217;utilisation des classes <a href="http://zendframework.com/manual/en/zend.validate.set.html">Zend_Validate_*</a> ainsi que la création de vos propres validateurs.</li>
</ol>
<p>Ces validations doivent s&#8217;appliquer sur les données reçues par  : <code lang="php">$_GET</code>, <code lang="php">$_POST</code>, <code lang="php">$_REQUEST</code>, <code lang="php">$_COOKIES</code>, <code lang="php">$_FILES</code> et certaines en provenance de <code lang="php">$_SERVER</code> (<code lang="php">$_SERVER['PHP_SELF']</code> par exemple.</p>
<h2>Échappement des sorties</h2>
<p>Une fois vos données validées, il reste à échapper les sorties afin d&#8217;éviter les attaques XSS (Cross-site scripting) : détournement de formulaires, modification de l&#8217;affichage, vols de cookies, de sessions, etc.</p>
<p>De même que pour la validation des données PHP contient tout le nécessaire pour effectuer ces opérations :</p>
<ul>
<li>Protéger les caractères sensibles : <code lang="php">htmlspecialchars($var);</code></li>
<li>Protéger tous les caractères : <code lang="php">htmlentities($var,...)</code> et <code lang="php">mb_htmlentities($var,...)</code>. Le deuxième paramètre, <code lang="php">ENT_COMPAT|ENT_QUOTES|ENT_NOQUOTES</code> est parfois important.</li>
<li>Enlever les balises HTML : <code lang="php">striptags($text);</code></li>
<li>Encodage spécique pour URL : <code lang="php">urlencode($var);</code></li>
<li>L&#8217;extension Filter peut non seulement valider comme vu au-dessus, mais aussi filtrer en sortie avec <code lang="php">FILTER_SANITIZE_*</code></li>
<li>Pour Zend l&#8217;utilisation des classes <a href="http://zendframework.com/manual/fr/zend.filter.set.html">Zend_Filter_*</a> est tout aussi aisée, avec la possibilité de <a href="http://zendframework.com/manual/fr/zend.filter.writing_filters.html">créer ses propres filtres</a> suivant ses besoins</li>
</ul>
<p>Attention au jeu de caractères, en particulier pour htmlentities() : problème d&#8217;affichage, voire de sécurité.<br />
Pour les charsets multi-octets (comme UTF-8), mb_htmlentities() est plus fiable.</p>
<h2>Protection des formulaires</h2>
<h3>S&#8217;assurer que les champs cachés ne sont pas modifiés</h3>
<p>Pour cela il suffit d&#8217;envoyer en parallèle un hash contrôlant la valeur du champ caché.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000088;">$idhash</span> <span style="color: #339933;">=</span> <span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$id</span> <span style="color: #339933;">.</span> SALT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;form action=&quot;edit.php&quot; method=&quot;POST&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;id&quot; value=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$id</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&quot; /&gt;
&lt;input type=&quot;hidden&quot; name=&quot;idhash&quot; value=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$idhash</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&quot; /&gt;
&lt;input type=&quot;submit&quot; value=&quot;Valider&quot; /&gt;
&lt;/form&gt;</pre></td></tr></table></div>

<p>Et à la réception des données, vérifier que le hash correspont bien à la valeur attendue :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$id</span> <span style="color: #339933;">=</span> <span style="color: #990000;">filter_input</span><span style="color: #009900;">&#40;</span>INPUT_POST<span style="color: #339933;">,</span> <span style="color: #0000ff;">'id'</span><span style="color: #339933;">,</span> FILTER_VALIDATE_INT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$idhash</span> <span style="color: #339933;">=</span> <span style="color: #990000;">filter_input</span><span style="color: #009900;">&#40;</span>INPUT_POST<span style="color: #339933;">,</span> <span style="color: #0000ff;">'idhash'</span><span style="color: #339933;">,</span> FILTER_VALIDATE_INT<span style="color: #339933;">,</span> FILTER_FLAG_ALLOW_HEX<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$idhash</span> <span style="color: #339933;">!==</span> <span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$id</span> <span style="color: #339933;">.</span> SALT<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Le formulaire est louche ! '</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h3> Se prémunir des CSRF (Cross-Site Request Forgery) </h3>
<p>Les attaques CSRF consistent à faire exécuter des commandes involontaires aux utilisateurs accrédités d&#8217;un site. </p>
<p>Quelques astuces pour s&#8217;en prémunir ou au moins en limiter grandement la portée, certaines évidentes et facile à mettre en place, d&#8217;autres plus subtiles…</p>
<h4>Demander des confirmations à l&#8217;utilisateur pour les actions critiques</h4>
<p>Par exemple systématiquement demander une confirmation du style « Êtes vous certain de vouloir … » sur des actions sensibles comme la suppression, ou redemander de saisir le mot de passe lors de la modification de la configuration de votre site internet.</p>
<h4>Utiliser des jetons de validité dans les formulaires</h4>
<p>Le principe est simple : lorsqu&#8217;un utilisateur affiche un formulaire, on lui génère une clé. Cette clé sera valide pour un certain temps (quelques minutes, le temps de remplir le formulaire), et est liée uniquement au couple utilisateur/formulaire. Cette clé devra automatiquement être transmise avec le formulaire pour que celui ci puisse être validé ! </p>
<p>Dans le framework Zend il existe un élément de formulaire dédié à cet usage : <a href="http://framework.zend.com/apidoc/1.10/Zend_Form/Element/Zend_Form_Element_Hash.html"><strong>Zend_Form_Element_Hash,</strong></a> son utilisation est aisée :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Mon_Formulaire_anti_csrf <span style="color: #000000; font-weight: bold;">extends</span> Zend_Form <span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> init<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setMethod</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'post'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addElement</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'submit'</span>
                     <span style="color: #339933;">,</span> <span style="color: #0000ff;">'submit'</span>
                     <span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'ignore'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span>
                     <span style="color: #339933;">,</span> <span style="color: #0000ff;">'label'</span>    <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Soumettre'</span>
                     <span style="color: #339933;">,</span><span style="color: #009900;">&#41;</span>
                     <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addElement</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'hash'</span>
                       <span style="color: #339933;">,</span> <span style="color: #0000ff;">'no_csrf'</span>
                       <span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'salt'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'unique'</span><span style="color: #009900;">&#41;</span>
                       <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Le hash généré est stocké en session et sera ajouté  à la chaîne de validation du formulaire : s&#8217;il est différent de celui stocké, il y aura une erreur d&#8217;émise.</p>
<h4>Éviter d&#8217;utiliser des requêtes HTTP GET pour effectuer des actions</h4>
<p>Passer systématiquement par POST pour toutes les actions autres que celles de consultation de ressource : insertion, mise à jour ou suppression de données.<br />
Cette mesure va vous prémunir des attaques simples basées sur les images, mais pas de requêtes HTTP POST forgée en JavaScript par exemple.</p>
<h2>Quelques liens pour aller plus loin :</h2>
<ol>
<li><a href="http://fr.wikipedia.org/wiki/Cross-site_request_forgery">http://fr.wikipedia.org/wiki/Cross-site_request_forgery</a></li>
<li><a href="http://framework.zend.com/apidoc/1.10/Zend_Form/Element/Zend_Form_Element_Hash.html">Zend_Form_Element_Hash</a></li>
<li><a href="http://bigornot-fr.blogspot.com/2008/07/csrf-sea-surf-and-zend.html">http://bigornot-fr.blogspot.com/2008/07/csrf-sea-surf-and-zend.html</a></li>
<li><a href="http://truffo.fr/2010/03/les-filtres-php/">http://truffo.fr/2010/03/les-filtres-php/</a></li>
<li><a href="http://zendframework.com/manual/fr/zend.filter.html">http://zendframework.com/manual/fr/zend.filter.html</a></li>
<li><a href="http://zendframework.com/manual/fr/zend.validate.html">http://zendframework.com/manual/fr/zend.validate.html</a></li>
<li><a href="http://fr.php.net/manual/fr/book.filter.php">Extension Filter</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.zapoyok.info/2010/07/16/protection-de-vos-scripts-php-%c2%a0validation-des-donnees-xss-csrf%e2%80%a6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilisation de mysqlsniffer</title>
		<link>http://www.zapoyok.info/2010/05/21/utilisation-de-mysqlsniffer/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=utilisation-de-mysqlsniffer</link>
		<comments>http://www.zapoyok.info/2010/05/21/utilisation-de-mysqlsniffer/#comments</comments>
		<pubDate>Fri, 21 May 2010 17:47:31 +0000</pubDate>
		<dc:creator>Jérôme FIX</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Trucs et astuces]]></category>
		<category><![CDATA[base de données]]></category>
		<category><![CDATA[libpcap]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysqlsniffer]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[tcpdump]]></category>

		<guid isPermaLink="false">http://www.zapoyok.info/?p=154</guid>
		<description><![CDATA[But et utilité : Pour pouvoir − en temps réel − visualiser et analyser et/ou capturer les requêtes effectuées sur un serveur ce petit logiciel est quasiment indispensable. Il permet d&#8217;afficher en détails les requêtes effectuées, les résultats de ces dernières,… Il est disponible sur le site : http://hackmysql.com/mysqlsniffer Installation : Sous Debian, il faut [...]]]></description>
			<content:encoded><![CDATA[<h2>But et utilité :</h2>
<p>Pour pouvoir − en temps réel − visualiser et analyser et/ou capturer les requêtes effectuées sur un serveur ce petit logiciel est quasiment indispensable.<br />
Il permet d&#8217;afficher en détails les requêtes effectuées, les résultats de ces dernières,…</p>
<p>Il est disponible sur le site : <a href="http://hackmysql.com/mysqlsniffer" target="_blank">http://hackmysql.com/mysqlsniffer</a></p>
<h2>Installation :</h2>
<p>Sous Debian, il faut au préalable installer libpcap-dev : <code>aptitude install libpcap-dev</code>.<br />
Puis :</p>
<ol>
<li><code>mkdir </code><code>mysqlsniffer </code></li>
<li><code>cd mysqlsniffer </code></li>
<li><code>wget http://hackmysql.com/code/mysqlsniffer.tgz </code></li>
<li><code>tar zxvf mysqlsniffer.tgz </code></li>
<li><code>gcc -O2 -lpcap -o mysqlsniffer mysqlsniffer.c packet_handlers.c misc.c </code></li>
</ol>
<h2>Utilisation :</h2>
<p>Attention ! La connexion à « écouter » doit se faire en TCP, il faut mettre 127.0.0.1 au lieu de localhost dans la configuration du client pour avoir un résultat !</p>
<p>Ensuite il suffit de lancer la commande <code>mysqlsniffer</code> et de lire le résultat dans la console ou le stocker dans un fichier pour une analyse ultérieure.</p>
<h3>Exemple de dump :</h3>
<p>Une simple requête (SELECT) qui récupère des préférences : </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="sql" style="font-family:monospace;">127<span style="color: #66cc66;">.</span>0<span style="color: #66cc66;">.</span>0<span style="color: #66cc66;">.</span>1<span style="color: #66cc66;">.</span>47254 <span style="color: #66cc66;">&gt;</span> server: ID <span style="color: #cc66cc;">0</span> len <span style="color: #cc66cc;">26</span> COM_QUERY: <span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> preferences
server <span style="color: #66cc66;">&gt;</span> 127<span style="color: #66cc66;">.</span>0<span style="color: #66cc66;">.</span>0<span style="color: #66cc66;">.</span>1<span style="color: #66cc66;">.</span>47254: ID <span style="color: #cc66cc;">1</span> len <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">6</span> <span style="color: #993333; font-weight: bold;">FIELDS</span>
        ID <span style="color: #cc66cc;">2</span> len <span style="color: #cc66cc;">76</span> <span style="color: #993333; font-weight: bold;">FIELD</span>: preferences<span style="color: #66cc66;">.</span>categorie <span style="color: #66cc66;">&lt;</span>type var string <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">509</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">SIZE</span> <span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&gt;</span>
        ID <span style="color: #cc66cc;">3</span> len <span style="color: #cc66cc;">66</span> <span style="color: #993333; font-weight: bold;">FIELD</span>: preferences<span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">TYPE</span> <span style="color: #66cc66;">&lt;</span>type var string <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">509</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">SIZE</span> <span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&gt;</span>
        ID <span style="color: #cc66cc;">4</span> len <span style="color: #cc66cc;">62</span> <span style="color: #993333; font-weight: bold;">FIELD</span>: preferences<span style="color: #66cc66;">.</span>id <span style="color: #66cc66;">&lt;</span>type var string <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1021</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">SIZE</span> <span style="color: #cc66cc;">255</span><span style="color: #66cc66;">&gt;</span>
        ID <span style="color: #cc66cc;">5</span> len <span style="color: #cc66cc;">82</span> <span style="color: #993333; font-weight: bold;">FIELD</span>: preferences<span style="color: #66cc66;">.</span>defaultvalue <span style="color: #66cc66;">&lt;</span>type <span style="color: #993333; font-weight: bold;">BLOB</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">4604</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">SIZE</span> <span style="color: #cc66cc;">65535</span><span style="color: #66cc66;">&gt;</span>
        ID <span style="color: #cc66cc;">6</span> len <span style="color: #cc66cc;">68</span> <span style="color: #993333; font-weight: bold;">FIELD</span>: preferences<span style="color: #66cc66;">.</span>label <span style="color: #66cc66;">&lt;</span>type var string <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">509</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">SIZE</span> <span style="color: #cc66cc;">255</span><span style="color: #66cc66;">&gt;</span>
        ID <span style="color: #cc66cc;">7</span> len <span style="color: #cc66cc;">80</span> <span style="color: #993333; font-weight: bold;">FIELD</span>: preferences<span style="color: #66cc66;">.</span>description <span style="color: #66cc66;">&lt;</span>type <span style="color: #993333; font-weight: bold;">BLOB</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">4604</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">SIZE</span> <span style="color: #cc66cc;">65535</span><span style="color: #66cc66;">&gt;</span>
        ID <span style="color: #cc66cc;">8</span> len <span style="color: #cc66cc;">5</span> <span style="color: #993333; font-weight: bold;">END</span> <span style="color: #66cc66;">&lt;</span>warnings <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&gt;</span>
        ID <span style="color: #cc66cc;">9</span> len <span style="color: #cc66cc;">119</span> <span style="color: #66cc66;">||</span> diagnostic <span style="color: #66cc66;">|</span> text <span style="color: #66cc66;">|</span> departement_favori <span style="color: #66cc66;">|</span> <span style="color: #cc66cc;">57</span> <span style="color: #66cc66;">|</span> Département par défaut <span style="color: #66cc66;">|</span> Doit être un des départements français <span style="color: #66cc66;">&#40;</span>format numérique<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">||</span>
        ID <span style="color: #cc66cc;">10</span> len <span style="color: #cc66cc;">49</span> <span style="color: #66cc66;">||</span> synchro <span style="color: #66cc66;">|</span> text <span style="color: #66cc66;">|</span> login <span style="color: #66cc66;">|</span> XXX <span style="color: #66cc66;">|</span> Votre compte utilisateur <span style="color: #66cc66;">|</span>  <span style="color: #66cc66;">||</span>
        ID <span style="color: #cc66cc;">11</span> len <span style="color: #cc66cc;">61</span> <span style="color: #66cc66;">||</span> divers <span style="color: #66cc66;">|</span> text <span style="color: #66cc66;">|</span> nb_clients_par_page <span style="color: #66cc66;">|</span> <span style="color: #cc66cc;">30</span> <span style="color: #66cc66;">|</span> Nombre de clients listés <span style="color: #66cc66;">|</span>  <span style="color: #66cc66;">||</span> 
        ID <span style="color: #cc66cc;">12</span> len <span style="color: #cc66cc;">61</span> <span style="color: #66cc66;">||</span> divers <span style="color: #66cc66;">|</span> text <span style="color: #66cc66;">|</span> nb_projets_par_page <span style="color: #66cc66;">|</span> <span style="color: #cc66cc;">30</span> <span style="color: #66cc66;">|</span> Nombre de projets listés <span style="color: #66cc66;">|</span>  <span style="color: #66cc66;">||</span>
        ID <span style="color: #cc66cc;">13</span> len <span style="color: #cc66cc;">48</span> <span style="color: #66cc66;">||</span> synchro <span style="color: #66cc66;">|</span> String <span style="color: #66cc66;">|</span> password <span style="color: #66cc66;">|</span> XXX <span style="color: #66cc66;">|</span> Votre mot de passe <span style="color: #66cc66;">|</span>  <span style="color: #66cc66;">||</span>
        ID <span style="color: #cc66cc;">14</span> len <span style="color: #cc66cc;">66</span> <span style="color: #66cc66;">||</span> diagnostic <span style="color: #66cc66;">|</span> text <span style="color: #66cc66;">|</span> rapport_pcs_2_m3 <span style="color: #66cc66;">|</span> <span style="color: #cc66cc;">10.6</span> <span style="color: #66cc66;">|</span> Taux de conversion PCS<span style="color: #66cc66;">-&gt;</span>M3 <span style="color: #66cc66;">|</span>  <span style="color: #66cc66;">||</span>
        ID <span style="color: #cc66cc;">15</span> len <span style="color: #cc66cc;">60</span> <span style="color: #66cc66;">||</span> synchro <span style="color: #66cc66;">|</span> text <span style="color: #66cc66;">|</span> sapid <span style="color: #66cc66;">|</span> xxx <span style="color: #66cc66;">|</span> Votre identifiant de compte <span style="color: #66cc66;">&#40;</span>SAPID<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">|</span>  <span style="color: #66cc66;">||</span>
        ID <span style="color: #cc66cc;">16</span> len <span style="color: #cc66cc;">5</span> <span style="color: #993333; font-weight: bold;">END</span> <span style="color: #66cc66;">&lt;</span>warnings <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&gt;</span></pre></td></tr></table></div>

<h2>Une autre façon de récupérer toutes les requêtes exécutées sur le serveur en écoute : <strong>TCPDUMP</strong></h2>
<p>Cette méthode ne permet pas de récupérer les infos complètes</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">tcpdump <span style="color: #660033;">-i</span> lo <span style="color: #660033;">-s</span> <span style="color: #000000;">0</span> <span style="color: #660033;">-l</span> <span style="color: #660033;">-w</span> - dst port <span style="color: #000000;">3306</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">strings</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">perl</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'
while(&amp;lt;&amp;gt;) { chomp; next if /^[^ ]+[ ]*$/;
if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|SHOW)/i) {
if (defined $q) { print &quot;$q\n&quot;; }
$q=$_;
} else {
$_ =~ s/^[ \t]+//; $q.=&quot; $_&quot;;
}
}'</span></pre></td></tr></table></div>

<p>On peut trouver de nombreux autres outils pour MYSQL sur le site : <a href="http://hackmysql.com/tools" lang="en">http://hackmysql.com/tools</a> avec notamment <a href="http://hackmysql.com/mysqlreport" lang="en">mysqlreport</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zapoyok.info/2010/05/21/utilisation-de-mysqlsniffer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Subversion &#8211; Création d&#8217;une archive d&#8217;une ou plusieurs révisions</title>
		<link>http://www.zapoyok.info/2010/04/10/subversion-creation-d-une-archive-d-une-ou-plusieurs-revisions/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=subversion-creation-d-une-archive-d-une-ou-plusieurs-revisions</link>
		<comments>http://www.zapoyok.info/2010/04/10/subversion-creation-d-une-archive-d-une-ou-plusieurs-revisions/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 18:17:00 +0000</pubDate>
		<dc:creator>Jérôme FIX</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[SVN]]></category>

		<guid isPermaLink="false">http://devel.zapoyok.dnsalias.com/2010/04/10/subversion-creation-d-une-archive-d-une-ou-plusieurs-revisions/</guid>
		<description><![CDATA[Un première version du script : Permet de créer un zip d&#8217;un intervalle de révisions pour un export. Il reste des améliorations à faire c&#8217;est sûr, mais aujourd&#8217;hui cela répond à mes besoins du moment ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [...]]]></description>
			<content:encoded><![CDATA[<p>Un première version du script : Permet de créer un zip d&#8217;un intervalle de révisions pour un export.<br />
Il reste des améliorations à faire c&#8217;est sûr, mais aujourd&#8217;hui cela répond à mes besoins du moment !</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
<span style="color: #666666; font-style: italic;"># svndiff2zip.sh</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Vérifications</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #007800;">$1</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>;<span style="color: #000000; font-weight: bold;">then</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;svndiff2zip : Pas de dépôt spécifié - obligatoire&quot;</span>;<span style="color: #7a0874; font-weight: bold;">exit</span>;<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #007800;">$2</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>;<span style="color: #000000; font-weight: bold;">then</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;svndiff2zip : Pas de révision de début spécifiée - obligatoire&quot;</span>;<span style="color: #7a0874; font-weight: bold;">exit</span>;<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #007800;">$3</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>;<span style="color: #000000; font-weight: bold;">then</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;svndiff2zip : Pas de révision de fin spécifiée - obligatoire&quot;</span>;<span style="color: #7a0874; font-weight: bold;">exit</span>;<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #007800;">$4</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>;<span style="color: #000000; font-weight: bold;">then</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;svndiff2zip : Pas de destination spécifiée - obligatoire&quot;</span>;<span style="color: #7a0874; font-weight: bold;">exit</span>;<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-d</span> <span style="color: #007800;">$4</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>;<span style="color: #000000; font-weight: bold;">then</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;svnxport : le répertoire '$4' existe déjà : supprimer ou autre.&quot;</span>;<span style="color: #7a0874; font-weight: bold;">exit</span>;<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Processing : source($1), revision start($2), revision end($3), target_directory($4)&quot;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Traitement</span>
<span style="color: #000000; font-weight: bold;">for</span> myfile <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">svn</span> <span style="color: #c20cb9; font-weight: bold;">diff</span> <span style="color: #660033;">-r</span> <span style="color: #007800;">$2</span>:<span style="color: #007800;">$3</span> <span style="color: #660033;">--summarize</span> <span style="color: #007800;">$1</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'^M '</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'^A '</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'^AM '</span><span style="color: #000000; font-weight: bold;">`</span>
<span style="color: #000000; font-weight: bold;">do</span>
<span style="color: #000000; font-weight: bold;">if</span>  <span style="color: #7a0874; font-weight: bold;">&#91;</span>  <span style="color: #ff0000;">&quot;<span style="color: #007800;">$myfile</span>&quot;</span> = <span style="color: #ff0000;">&quot;M&quot;</span>  -o  <span style="color: #ff0000;">&quot;<span style="color: #007800;">$myfile</span>&quot;</span> = <span style="color: #ff0000;">&quot;AM&quot;</span> <span style="color: #660033;">-o</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$myfile</span>&quot;</span> = <span style="color: #ff0000;">&quot;A&quot;</span> <span style="color: #660033;">-o</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$myfile</span>&quot;</span> = <span style="color: #ff0000;">&quot;.&quot;</span> <span style="color: #660033;">-o</span> <span style="color: #660033;">-d</span> <span style="color: #007800;">$myfile</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">then</span>
 <span style="color: #7a0874; font-weight: bold;">continue</span>
<span style="color: #000000; font-weight: bold;">else</span> 
 <span style="color: #007800;">outfile</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$myfile</span> <span style="color: #000000; font-weight: bold;">|</span><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">&quot;s|$1||g&quot;</span><span style="color: #000000; font-weight: bold;">`</span>
 <span style="color: #007800;">dir</span>=<span style="color: #ff0000;">&quot;$4/<span style="color: #007800;">$outfile</span>&quot;</span>
 <span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">dirname</span> <span style="color: #007800;">$dir</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
&nbsp;
 <span style="color: #c20cb9; font-weight: bold;">svn</span> <span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #660033;">--force</span> <span style="color: #007800;">$myfile</span> <span style="color: #007800;">$4</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$outfile</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null
 <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;export $4/<span style="color: #007800;">$outfile</span> &quot;</span>
&nbsp;
 <span style="color: #c20cb9; font-weight: bold;">zip</span> <span style="color: #660033;">-r</span> <span style="color: #ff0000;">&quot;$4.zip&quot;</span> <span style="color: #007800;">$4</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null
&nbsp;
<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.zapoyok.info/2010/04/10/subversion-creation-d-une-archive-d-une-ou-plusieurs-revisions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Subversion &#8211; Importer un dépôt dans un autre</title>
		<link>http://www.zapoyok.info/2010/04/06/subversion-importer-un-depot-dans-un-autre/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=subversion-importer-un-depot-dans-un-autre</link>
		<comments>http://www.zapoyok.info/2010/04/06/subversion-importer-un-depot-dans-un-autre/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 07:51:00 +0000</pubDate>
		<dc:creator>Jérôme FIX</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[SVN]]></category>

		<guid isPermaLink="false">http://devel.zapoyok.dnsalias.com/2010/04/06/subversion-importer-un-depot-dans-un-autre/</guid>
		<description><![CDATA[Problématique : Il peut arriver d&#8217;avoir à réunir deux projets initialement dans deux dépôts SVN distincts pour n&#8217;en former plus qu&#8217;un. Voici une solution facile à mettre en œuvre et efficace. Solution : Création d&#8217;un dump complet du site à importer.svnadmin dump &#60;path-repository&#62; &#62; file.dump Préparer le dépôt à recevoir : svn mkdir &#60;url-repository&#62;/&#60;new-rep&#62; -m [...]]]></description>
			<content:encoded><![CDATA[<p>Problématique :</p>
<p>Il peut arriver d&#8217;avoir à réunir deux projets initialement dans deux dépôts SVN distincts pour n&#8217;en former plus qu&#8217;un. Voici une solution facile à mettre en œuvre et efficace.</p>
<p>Solution : </p>
<ol>
<li>Création d&#8217;un dump complet du site à importer.<br /><code>svnadmin dump &lt;path-repository&gt; &gt; file.dump</code></li>
<li>Préparer le dépôt à recevoir : <code><br />svn mkdir &lt;url-repository&gt;/&lt;new-rep&gt;  -m "Nouveau répertoire d'accueil"</code></li>
<li>Importer l&#8217;ancien dépôt : <code><br />svnadmin load --parent-dir &lt;new-rep&gt; &lt;path-repository&gt; &lt; file.dump</code></li>
</ol>
<p> Les &laquo;&nbsp;commit&nbsp;&raquo; sont alors ajoutés dans l&#8217;ordre. Par contre les numéros de commit ne sont pas conservés. Cela peut être problématique si dans certains commentaires, pages de blog, des liens vers des commits particuliers ont été indiqués comme cela est possible dans des outils comme Trac, Redmine, &#8230;</p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zapoyok.info/2010/04/06/subversion-importer-un-depot-dans-un-autre/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recommendations (X)HTML + CSS + DOM</title>
		<link>http://www.zapoyok.info/2006/11/12/recommendations-xhtml-css-dom/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=recommendations-xhtml-css-dom</link>
		<comments>http://www.zapoyok.info/2006/11/12/recommendations-xhtml-css-dom/#comments</comments>
		<pubDate>Sun, 12 Nov 2006 15:29:00 +0000</pubDate>
		<dc:creator>Jérôme FIX</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[accessibilité]]></category>
		<category><![CDATA[avi]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://devel.zapoyok.dnsalias.com/2006/11/12/recommendations-xhtml-css-dom/</guid>
		<description><![CDATA[(X)HTML HTML 4.01 Specification (Traduction: http://www.la-grange.net/w3c/html4.01/) XHTML 1.0 The Extensible HyperText Markup Language (Traduction: XHTML 1.0) XHTML Basic (Traduction: XHML Basic ) XHTML Élémentaire (Traduction: XHTML Élémentaire) http://www.w3.org/QA/2002/04/valid-dtd-list.html CSS Cascading Style Sheets, level 1, Traduction : Recommandation CSS1 du W3C en version française Cascading Style Sheets, level 2, Traduction : Recommandation CSS2 du W3C en [...]]]></description>
			<content:encoded><![CDATA[<p>(X)HTML
<ol>
<li><a href="http://www.w3.org/TR/html401/">HTML 4.01 Specification</a> (Traduction: <a href="http://www.la-grange.net/w3c/html4.01/">http://www.la-grange.net/w3c/html4.01/</a>)</li>
<li><a href="http://www.w3.org/TR/xhtml1/">XHTML 1.0 The Extensible HyperText Markup Language</a> (Traduction: <a href="http://www.la-grange.net/w3c/xhtml1/">XHTML 1.0</a>)</li>
<li><a href="http://www.w3.org/TR/xhtml-basic/">XHTML Basic</a> (Traduction: <a href="http://www.la-grange.net/w3c/REC-xhtml-basic/">XHML Basic </a>)</li>
<li><a href="http://www.w3.org/TR/xhtml11/">XHTML Élémentaire</a> (Traduction: <a href="http://www.la-grange.net/w3c/xhtml11/">XHTML Élémentaire</a>)</li>
<li><a href="http://www.w3.org/QA/2002/04/valid-dtd-list.html">http://www.w3.org/QA/2002/04/valid-dtd-list.html</a></li>
</ol>
<p> CSS
<ol>
<li><a href="http://www.w3.org/TR/REC-CSS1">Cascading Style Sheets, level 1</a>, Traduction :  <a href="http://www.yoyodesign.org/doc/w3c/css1/index.html">Recommandation CSS1 du W3C en version française</a></li>
<li><a href="http://www.w3.org/TR/REC-CSS2">Cascading Style Sheets, level 2</a>, Traduction :  <a href="http://www.yoyodesign.org/doc/w3c/css2/cover.html">Recommandation CSS2 du W3C en version française</a></li>
</ol>
<p> DOM
<ol>
<li><a href="http://www.w3.org/TR/REC-DOM-Level-1">Document Object Model Level 1 Specification</a>, traduction <a href="http://xmlfr.org/w3c/TR/REC-DOM-Level-1/">Modèle Objet de Documents Spécification niveau 1</a></li>
<li><a href="http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/">http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/</a></li>
<li><a href="http://www.w3.org/TR/2000/REC-DOM-Level-2-Views-20001113/">Document Object Model Level 2 Views Specification</a></li>
<li><a href="http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/">Document Object Model Level 2 Events Specification</a></li>
<li><a href="http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113/">Document Object Model Level 2 Style Specification</a></li>
<li><a href="http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/">Document Object Model Level 2 Traversal and Range Specification</a></li>
<li><a href="http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/">Document Object Model Level 2 HTML Specification</a></li>
</ol>
<p> SITES UTILES
<ol>
<li><a href="http://www.mentalized.net/cssdepot/">http://www.mentalized.net/cssdepot/</a></li>
<li><a href="http://centricle.com/ref/css/filters/">http://centricle.com/ref/css/filters/</a></li>
<li><a href="http://bclary.com/2004/11/25/html-entities">http://web-graphics.com/</a></li>
<li><a href="http://bclary.com/2004/11/25/html-entities">http://bclary.com/2004/11/25/html-entities</a></li>
<li><a href="http://www.glish.com/">http://www.glish.com/</a></li>
</ol>
<p> DIVERS
<ol>
<li><a href="http://www.cybercodeur.net/weblog/commentaires/detailsCarnet.php?idmessage=1088">Liens et nouvelle fenêtre (XHTML1.1)</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.zapoyok.info/2006/11/12/recommendations-xhtml-css-dom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Accessibilté des sites internet</title>
		<link>http://www.zapoyok.info/2006/02/18/accessibilte-des-sites-internet/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=accessibilte-des-sites-internet</link>
		<comments>http://www.zapoyok.info/2006/02/18/accessibilte-des-sites-internet/#comments</comments>
		<pubDate>Sat, 18 Feb 2006 18:10:00 +0000</pubDate>
		<dc:creator>Jérôme FIX</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[avi]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://devel.zapoyok.dnsalias.com/2006/02/18/accessibilte-des-sites-internet/</guid>
		<description><![CDATA[Vidéo sur l&#8217;accessibilite à l&#8217;université du Wisconsin La vidéo sur l&#8217;accessibilite à l&#8217;université du Wisconsin http://www.doit.wisc.edu/accessibility/video/screen_readers.asp http://www.doit.wisc.edu/accessibility/video/screen_magnification.asp http://www.doit.wisc.edu/accessibility/video/intro.asp Quelques liens : http://www.assemblee-nationale.fr/12/dossiers/handicapes.asp#0401830304 http://www.adae.gouv.fr/article.php3?id_article=715&#38;var_recherche=handicap http://www.w3.org/WAI/ http://www.w3.org/TR/WCAG20/ http://www.adae.gouv.fr/article.php3?id_article=246 http://openweb.eu.org/accessibilite/ http://openweb.eu.org/articles/accessibilite_numerique_pourquoi/ http://www.adae.gouv.fr Quelques exemples, tutoriels : http://www.la-grange.net/accessibilite/index.html http://www2.ville.montreal.qc.ca/accessimple/acs/accueil.shtm ( Étrange ! ) http://www.braillenet.org/accessibilite/guide/table.htm http://www.legrandchalon.fr/ Des documents à télécharger : Texte de loi referentiel_accessibilite.pdf]]></description>
			<content:encoded><![CDATA[<h2>Vidéo sur l&#8217;accessibilite à l&#8217;université du Wisconsin</h2>
<p><a href="http://www.open-s.com/Blog-Accessibilite/index.php/2005/03/17/37-video-sur-laccessibilite-a-luniversite-du-wisconsin" target="_blank">La vidéo sur l&#8217;accessibilite à  l&#8217;université du Wisconsin</a> </p>
<ul>
<li><a href="http://www.doit.wisc.edu/accessibility/video/screen_readers.asp" target="_blank">http://www.doit.wisc.edu/accessibility/video/screen_readers.asp</a></li>
<li><a href="http://www.doit.wisc.edu/accessibility/video/screen_magnification.asp" target="_blank">http://www.doit.wisc.edu/accessibility/video/screen_magnification.asp</a></li>
<li><a href="http://www.doit.wisc.edu/accessibility/video/intro.asp">http://www.doit.wisc.edu/accessibility/video/intro.asp</a></li>
</ul>
<h2>Quelques liens :</h2>
<ul>
<li><a href="http://www.assemblee-nationale.fr/12/dossiers/handicapes.asp#0401830304" target="_blank">http://www.assemblee-nationale.fr/12/dossiers/handicapes.asp#0401830304</a></li>
<li><a href="http://www.adae.gouv.fr/article.php3?id_article=715&amp;var_recherche=handicap" target="_blank">http://www.adae.gouv.fr/article.php3?id_article=715&amp;var_recherche=handicap</a></li>
<li><a href="http://www.assemblee-nationale.fr/12/dossiers/handicapes.asp#0401830304" target="_blank">http://www.w3.org/WAI/</a></li>
<li><a href="http://www.w3.org/TR/WCAG20/" target="_blank">http://www.w3.org/TR/WCAG20/</a></li>
<li><a href="http://www.adae.gouv.fr/article.php3?id_article=246" target="_blank">http://www.adae.gouv.fr/article.php3?id_article=246</a></li>
<li><a href="http://openweb.eu.org/accessibilite/" target="_blank">http://openweb.eu.org/accessibilite/</a></li>
<li><a href="http://openweb.eu.org/articles/accessibilite_numerique_pourquoi/" target="_blank">http://openweb.eu.org/articles/accessibilite_numerique_pourquoi/</a></li>
<li><a href="http://www.adae.gouv.fr" target="_blank">http://www.adae.gouv.fr</a></li>
</ul>
<h2>Quelques exemples, tutoriels : </h2>
<ul>
<li><a href="http://www.la-grange.net/accessibilite/index.html" target="_blank">http://www.la-grange.net/accessibilite/index.html</a></li>
<li><a href="http://www2.ville.montreal.qc.ca/accessimple/acs/accueil.shtm" target="_blank">http://www2.ville.montreal.qc.ca/accessimple/acs/accueil.shtm</a>  ( Étrange ! )</li>
<li><a href="http://www.braillenet.org/accessibilite/guide/table.htm" target="_blank">http://www.braillenet.org/accessibilite/guide/table.htm</a></li>
<li><a href="http://www.legrandchalon.fr/" target="_blank">http://www.legrandchalon.fr/</a></li>
</ul>
<h2>Des documents  à télécharger :</h2>
<ul>
<li><a href="http://zapoyok.dnsalias.com/wordpress/wp-content/uploads/2006/02/ta0377-2.pdf" id="p28">Texte de loi</a></li>
<li><a href="http://zapoyok.dnsalias.com/wordpress/wp-content/uploads/2006/02/referentiel_accessibilite.pdf" id="p32">referentiel_accessibilite.pdf</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.zapoyok.info/2006/02/18/accessibilte-des-sites-internet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

