<?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>Zifp.nl &#187; PHP</title>
	<atom:link href="http://zifp.nl/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://zifp.nl</link>
	<description>Web Development: HTML PHP CSS en Javascript</description>
	<lastBuildDate>Wed, 02 Feb 2011 12:01:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Beveilig je website tegen Cross-site scripting (XSS)</title>
		<link>http://zifp.nl/php/beveilig-je-website-tegen-cross-site-scripting-xss/</link>
		<comments>http://zifp.nl/php/beveilig-je-website-tegen-cross-site-scripting-xss/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 16:45:17 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[beveiliging]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://zifp.nl/?p=351</guid>
		<description><![CDATA[Een van de belangrijkste dingen om je zorgen over te maken bij het ontwikkelen van een webapplicatie is de veiligheid van je website. Je website staat open voor de gehele wereld en ieder willekeurig persoon kan je website aanvallen. Omdat je van tevoren nooit weet van welke kant de aanval komt is het belangrijk om [...]]]></description>
			<content:encoded><![CDATA[<p>Een van de belangrijkste dingen om je zorgen over te maken bij het ontwikkelen van een webapplicatie is de veiligheid van je website. Je website staat open voor de gehele wereld en ieder willekeurig persoon kan je website aanvallen. Omdat je van tevoren nooit weet van welke kant de aanval komt is het belangrijk om je website zo veel mogelijk dicht te timmeren zodat niemand je website kan aanvallen.</p>
<p>In een reeks van artikelen probeer ik uit te leggen hoe je, je website kunt beschermen tegen aanvallen van buitenaf. Vandaag gaan we het hebben over Cross-site scripting (XSS).</p>
<p><span id="more-351"></span><br />
Cross-site scripting is een aanval waarbij een stuk kwaadwillende code op een website word geïnjecteerd Waneer iemand de pagina bezoekt, word de code uitgevoerd.</p>
<h3>Case 1</h3>
<p>Stel dat je een website hebt ontworpen waarop bezoekers reacties kunnen achterlaten:</p>
<div id="wpshdo_1" class="wp-synhighlighter-outer"><div id="wpshdt_1" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_1"></a><a id="wpshat_1" class="wp-synhighlighter-title" href="#codesyntax_1"  onClick="javascript:wpsh_toggleBlock(1)" title="Click to show/hide code block">Code blok</a></td><td align="right"><a href="#codesyntax_1" onClick="javascript:wpsh_code(1)" title="Show code only"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_1" onClick="javascript:wpsh_print(1)" title="Print code"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://zifp.nl/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_1" class="wp-synhighlighter-inner" style="display: block;"><pre class="php" style="font-family:monospace;"><span class="kw2">&lt;?php</span>
  <span class="kw1">echo</span> <span class="st0">&quot;<span class="es4">$gebruiker</span> zei <span class="es4">$bericht</span>&quot;</span><span class="sy0">;</span>
<span class="sy1">?&gt;</span></pre></div></div>
<p>De code voor invoer van het bericht kan er als volgt uitzien:</p>
<div id="wpshdo_2" class="wp-synhighlighter-outer"><div id="wpshdt_2" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_2"></a><a id="wpshat_2" class="wp-synhighlighter-title" href="#codesyntax_2"  onClick="javascript:wpsh_toggleBlock(2)" title="Click to show/hide code block">Code blok</a></td><td align="right"><a href="#codesyntax_2" onClick="javascript:wpsh_code(2)" title="Show code only"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_2" onClick="javascript:wpsh_print(2)" title="Print code"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://zifp.nl/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_2" class="wp-synhighlighter-inner" style="display: block;"><pre class="php" style="font-family:monospace;"><span class="kw2">&lt;?php</span>
  <span class="re0">$gebruiker</span> <span class="sy0">=</span> <span class="re0">$_COOKIE</span><span class="br0">&#91;</span><span class="st_h">'gebruiker'</span><span class="br0">&#93;</span><span class="sy0">;</span>
  <span class="re0">$bericht</span> <span class="sy0">=</span> <span class="re0">$_REQUEST</span><span class="br0">&#91;</span><span class="st_h">'bericht'</span><span class="br0">&#93;</span><span class="sy0">;</span>
  <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$bericht</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
     opslaan_bericht<span class="br0">&#40;</span><span class="re0">$gebruiker</span><span class="sy0">,</span> <span class="re0">$bericht</span><span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="br0">&#125;</span>
<span class="sy1">?&gt;</span>
&lt;input type=&quot;text&quot; name=&quot;bericht&quot; value=&quot;<span class="kw2">&lt;?php</span> <span class="kw1">echo</span> <span class="re0">$bericht</span> <span class="sy1">?&gt;</span>&quot;&gt;</pre></div></div>
<p>Zolang een gebruiker alleen maar  simpele tekst invoert is er geen enkel probleem. Doordat er niet gecontroleerd wordt wat een gebruiker schrijft, kan iemand er willekeurige HTML code tussen plaatsten. Door bijvoorbeeld <code>&lt;/div&gt;</code> in een bericht te plaatsen kan een aanvaller er bijvoorbeeld voor zorgen dat de HTML van je pagina niet meer klopt. Hoewel dit behoorlijk irritant is, is het nog behoorlijk onschuldig.</p>
<p>Een aanvaller kan ook bijvoorbeeld  de volgende code in zijn bericht stoppen:</p>
<div id="wpshdo_3" class="wp-synhighlighter-outer"><div id="wpshdt_3" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_3"></a><a id="wpshat_3" class="wp-synhighlighter-title" href="#codesyntax_3"  onClick="javascript:wpsh_toggleBlock(3)" title="Click to show/hide code block">Code blok</a></td><td align="right"><a href="#codesyntax_3" onClick="javascript:wpsh_code(3)" title="Show code only"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_3" onClick="javascript:wpsh_print(3)" title="Print code"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://zifp.nl/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_3" class="wp-synhighlighter-inner" style="display: block;"><pre class="html4strict" style="font-family:monospace;"><span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;h++p://abc.com/abcscript.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span></pre></div></div>
<p>Wanneer iemand deze pagina dan bezoekt, word ook gelijk het script  <code>abcscript.js</code> van de website <code>h++p://abc.com</code> uitgevoerd. Deze script kan dan bijvoorbeeld gebruikt worden om een virus te plaatsen op de computer van de bezoeker.</p>
<h3>Case 2</h3>
<p>Een tweede voorbeeld van een XSS aanval is een aanval via de URL van een website.  Veel websites gebaseerd op WordPress hebben een zoekmachine ingebouwd.</p>
<p>Op deze site kan je zoeken door de volgende url in te typen:</p>
<p><code>http://zifp.nl/?s=zoekterm</code></p>
<p>In plaats van een zoekterm kan een aanvaller een stuk  code invoeren:</p>
<p><code>http://zifp.nl/?s=&lt;script type="text/javascript"&gt; alert('XSS!') &lt;/script&gt;<br />
</code></p>
<p>Gevaarlijk aan deze aanval is dat de url er zelf onschuldig uitziet:<br />
<code>http://zifp.nl/?s=%3Cscript%20type=%22text/javascript%22%3E%20alert('XSS!')%20%3C/script%3E</code><br />
Je kan niet duidelijk zien of er sprake is van een script.</p>
<p>Doordat veel wordpress templates niet goed in elkaar zitten werkt bovenstaande code op een heleboel websites. Probeer maar eens.</p>
<h3>Oplossing</h3>
<p>Om te voorkomen dat een bezoeker kwaadwillende code op je website plaatst moet <em>alle</em> invoer op je website gecontroleerd worden op vijandige code en moet alle vijandige code verwijderd worden.</p>
<p>Een belangrijk hulpmiddel in het ontdekken van malafide code en het schoonmaken daarvan is  PHP&#8217;s <a href="http://www.php.net/manual/en/intro.filter.php">input_filter extensie</a>.</p>
<p>We kunnen bovenstaande code dan in het volgende veranderen:</p>
<div id="wpshdo_4" class="wp-synhighlighter-outer"><div id="wpshdt_4" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_4"></a><a id="wpshat_4" class="wp-synhighlighter-title" href="#codesyntax_4"  onClick="javascript:wpsh_toggleBlock(4)" title="Click to show/hide code block">Code blok</a></td><td align="right"><a href="#codesyntax_4" onClick="javascript:wpsh_code(4)" title="Show code only"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_4" onClick="javascript:wpsh_print(4)" title="Print code"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://zifp.nl/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_4" class="wp-synhighlighter-inner" style="display: block;"><pre class="php" style="font-family:monospace;"><span class="kw2">&lt;?php</span>
  <span class="re0">$gebruiker</span> <span class="sy0">=</span> <a href="http://www.php.net/filter_input"><span class="kw3">filter_input</span></a><span class="br0">&#40;</span>INPUT_COOKIE<span class="sy0">,</span> <span class="st_h">'gebruiker'</span><span class="sy0">,</span>
                         FILTER_SANITIZE_SPECIAL_CHARS<span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="re0">$bericht</span> <span class="sy0">=</span> <a href="http://www.php.net/filter_input"><span class="kw3">filter_input</span></a><span class="br0">&#40;</span>INPUT_POST <span class="sy0">|</span> INPUT_GET<span class="sy0">,</span> <span class="st_h">'bericht'</span><span class="sy0">,</span>
                         FILTER_SANITIZE_SPECIAL_CHARS<span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$bericht</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
     save_message<span class="br0">&#40;</span><span class="re0">$gebruiker</span><span class="sy0">,</span> <span class="re0">$bericht</span><span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="br0">&#125;</span>
<span class="sy1">?&gt;</span>
&lt;input type=&quot;text&quot; name=&quot;bericht&quot; value=&quot;<span class="kw2">&lt;?php</span> <span class="kw1">echo</span> <span class="re0">$bericht</span> <span class="sy1">?&gt;</span>&quot;&gt;</pre></div></div>
<p>Belangrijk is om de code zo snel mogelijk na de invoer te valideren en schoon te maken zodat malafide code bijvoorbeeld niet in je database kan opduiken. Hoe eerder de code schoon is, hoe minder fouten er gemaakt kunnen worden.</p>
<p>Er zijn<a href="http://www.w3schools.com/php/php_ref_filter.asp"> een heleboel verschillende filters</a> voor PHP beschikbaar. Gebruik de filters die toepasbaar zijn op jouw situatie en probeer altijd zo streng mogelijk te controleren.</p>
<p>Je kan er ook aan denken om bijvoorbeeld de functies</p>
<div id="wpshdo_5" class="wp-synhighlighter-outer"><div id="wpshdt_5" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_5"></a><a id="wpshat_5" class="wp-synhighlighter-title" href="#codesyntax_5"  onClick="javascript:wpsh_toggleBlock(5)" title="Click to show/hide code block">Code blok</a></td><td align="right"><a href="#codesyntax_5" onClick="javascript:wpsh_code(5)" title="Show code only"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_5" onClick="javascript:wpsh_print(5)" title="Print code"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://zifp.nl/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_5" class="wp-synhighlighter-inner" style="display: block;"><pre class="php" style="font-family:monospace;"><a href="http://www.php.net/html_entity_decode"><span class="kw3">html_entity_decode</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>
<a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span></pre></div></div>
<p>te gerbuiken. Deze functies worden gebruikt om <a href="http://www.w3schools.com/tags/ref_symbols.asp">speciale tekens</a> naar de juiste HTML code en weer terug om te zetten.</p>
]]></content:encoded>
			<wfw:commentRss>http://zifp.nl/php/beveilig-je-website-tegen-cross-site-scripting-xss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>E-mail validatie op de juist manier</title>
		<link>http://zifp.nl/php/e-mail-validatie-op-de-juist-manier/</link>
		<comments>http://zifp.nl/php/e-mail-validatie-op-de-juist-manier/#comments</comments>
		<pubDate>Wed, 05 May 2010 19:16:49 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[validator]]></category>

		<guid isPermaLink="false">http://zifp.nl/?p=59</guid>
		<description><![CDATA[De belangrijkste regel voor het ontwikkelen van een website in PHP is dat alles wat gebruikers kunnen invoeren gecontroleerd moet worden. Het controleren van bijvoorbeeld een E-mail adres zou dan toch goed ingeburgerd moeten zijn bij de gemiddelde website ontwerper. Toch blijkt dit vaak fout te gaan. Heel vaak een functie zoals de volgende gebruikt: [...]]]></description>
			<content:encoded><![CDATA[<p>De belangrijkste regel voor het ontwikkelen van een website in PHP is dat alles wat gebruikers kunnen invoeren gecontroleerd moet worden.</p>
<p>Het controleren van bijvoorbeeld een E-mail adres zou dan toch goed ingeburgerd moeten zijn bij de gemiddelde website ontwerper. Toch blijkt dit vaak fout te gaan.</p>
<p><span id="more-59"></span></p>
<p>Heel vaak een functie zoals de volgende gebruikt:</p>
<div id="wpshdo_6" class="wp-synhighlighter-outer"><div id="wpshdt_6" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_6"></a><a id="wpshat_6" class="wp-synhighlighter-title" href="#codesyntax_6"  onClick="javascript:wpsh_toggleBlock(6)" title="Click to show/hide code block">Code blok</a></td><td align="right"><a href="#codesyntax_6" onClick="javascript:wpsh_code(6)" title="Show code only"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_6" onClick="javascript:wpsh_print(6)" title="Print code"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://zifp.nl/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_6" class="wp-synhighlighter-inner" style="display: block;"><pre class="php" style="font-family:monospace;"><span class="kw2">function</span> checkEmail<span class="br0">&#40;</span><span class="re0">$email</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
<span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/preg_match"><span class="kw3">preg_match</span></a><span class="br0">&#40;</span><span class="st0">&quot;/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])
â†ª*@([a-zA Z0-9_-])+([a-zA-Z0-9\._-]+)+$/&quot;</span><span class="sy0">,</span> <span class="re0">$email</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
<span class="co1">// Checkt door middel van een reguliere expressie of de email kan bestaan</span>
   <span class="br0">&#123;</span><a href="http://www.php.net/list"><span class="kw3">list</span></a><span class="br0">&#40;</span><span class="re0">$username</span><span class="sy0">,</span><span class="re0">$domain</span><span class="br0">&#41;</span><span class="sy0">=</span><a href="http://www.php.net/split"><span class="kw3">split</span></a><span class="br0">&#40;</span><span class="st_h">'@'</span><span class="sy0">,</span><span class="re0">$email</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">// splitst email adres in stuk voor en achter het @ symbool</span>
&nbsp;
   <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><a href="http://www.php.net/checkdnsrr"><span class="kw3">checkdnsrr</span></a><span class="br0">&#40;</span><span class="re0">$domain</span><span class="sy0">,</span><span class="st_h">'MX'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
      <span class="kw1">return</span> <span class="kw4">false</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
<span class="co1">// kijk of het stuk achter @ een geldige domein is</span>
   <span class="kw1">return</span> <span class="kw4">true</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="kw1">return</span> <span class="kw4">false</span><span class="sy0">;</span></pre></div></div>
<p>Deze code houd veel foute email adressen tegen maar blokkeert ook veel geldige adressen.</p>
<p>Wist je  dat de volgende adressen gewoon geldig zijn:</p>
<ul>
<li> Abc\@abc@voorbeeld.com</li>
<li> voorbeeld=voorbeeld@voorbeeld.com</li>
<li>!abc!def%abc@voorbeeld.com</li>
</ul>
<p>Deze adressen werden door de voorbeeldfunctie geblokkeerd.</p>
<p>Als je op de juiste manier e-mail wil valideren is het belangrijk om de regels eens goed te bekijken.</p>
<p>Volgens het IETF gelden voor een e-mail adres de volgende regels:</p>
<ol>
<li>An e-mail address consists of local part and domain separated by an at sign (@) character (RFC 2822 3.4.1).</li>
<li>The local part may consist of alphabetic and numeric characters, and the following characters: !, #, $, %, &amp;, &#8216;, *, +, -, /, =, ?, ^, _, `, {, |, } and ~, possibly with dot separators (.), inside, but not at the start, end or next to another dot separator (RFC 2822 3.2.4).</li>
<li>The local part may consist of a quoted string—that is, anything within quotes (&#8220;), including spaces (RFC 2822 3.2.5).</li>
<li>Quoted pairs (such as \@) are valid components of a local part, though an obsolete form from RFC 822 (RFC 2822 4.4).</li>
<li>The maximum length of a local part is 64 characters (RFC 2821 4.5.3.1).</li>
<li>A domain consists of labels separated by dot separators (RFC1035 2.3.1).</li>
<li>Domain labels start with an alphabetic character followed by zero or more alphabetic characters, numeric characters or the hyphen (-), ending with an alphabetic or numeric character (RFC 1035 2.3.1).</li>
<li>The maximum length of a label is 63 characters (RFC 1035 2.3.1).</li>
<li>The maximum length of a domain is 255 characters (RFC 2821 4.5.3.1).</li>
<li>The domain must be fully qualified and resolvable to a type A or type MX DNS address record (RFC 2821 3.6).</li>
</ol>
<p>Aan de hand van deze regels kunnen we een goede email validator bouwen.</p>
<div id="wpshdo_7" class="wp-synhighlighter-outer"><div id="wpshdt_7" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_7"></a><a id="wpshat_7" class="wp-synhighlighter-title" href="#codesyntax_7"  onClick="javascript:wpsh_toggleBlock(7)" title="Click to show/hide code block">Code blok</a></td><td align="right"><a href="#codesyntax_7" onClick="javascript:wpsh_code(7)" title="Show code only"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_7" onClick="javascript:wpsh_print(7)" title="Print code"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://zifp.nl/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://zifp.nl/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_7" class="wp-synhighlighter-inner" style="display: block;"><pre class="php" style="font-family:monospace;"><span class="kw2">function</span> validEmail<span class="br0">&#40;</span><span class="re0">$email</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
   <span class="re0">$isValid</span> <span class="sy0">=</span> <span class="kw4">true</span><span class="sy0">;</span>
   <span class="re0">$atIndex</span> <span class="sy0">=</span> <a href="http://www.php.net/strrpos"><span class="kw3">strrpos</span></a><span class="br0">&#40;</span><span class="re0">$email</span><span class="sy0">,</span> <span class="st0">&quot;@&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//kijkt waar de @ zit</span>
   <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_bool"><span class="kw3">is_bool</span></a><span class="br0">&#40;</span><span class="re0">$atIndex</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="sy0">!</span><span class="re0">$atIndex</span><span class="br0">&#41;</span> <span class="co1">//controleert of @ in de mail voorkomt</span>
   <span class="br0">&#123;</span>
      <span class="re0">$isValid</span> <span class="sy0">=</span> <span class="kw4">false</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
   <span class="kw1">else</span>
   <span class="br0">&#123;</span>
      <span class="re0">$domain</span> <span class="sy0">=</span> <a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$email</span><span class="sy0">,</span> <span class="re0">$atIndex</span><span class="sy0">+</span>1<span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="re0">$local</span> <span class="sy0">=</span> <a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$email</span><span class="sy0">,</span> 0<span class="sy0">,</span> <span class="re0">$atIndex</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//splits de e-mail in een stuk voor en na het @ teken</span>
      <span class="re0">$localLen</span> <span class="sy0">=</span> <a href="http://www.php.net/strlen"><span class="kw3">strlen</span></a><span class="br0">&#40;</span><span class="re0">$local</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="re0">$domainLen</span> <span class="sy0">=</span> <a href="http://www.php.net/strlen"><span class="kw3">strlen</span></a><span class="br0">&#40;</span><span class="re0">$domain</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//bekijkt de lengte van stukjes</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$localLen</span> <span class="sy0">&lt;</span> 1 <span class="sy0">||</span> <span class="re0">$localLen</span> <span class="sy0">&gt;</span> <span class="nu0">64</span><span class="br0">&#41;</span>
      <span class="br0">&#123;</span>
         <span class="co1">// kijkt of het stuk voor de @ tussen  de 1 en 64 tekens bevat</span>
         <span class="re0">$isValid</span> <span class="sy0">=</span> <span class="kw4">false</span><span class="sy0">;</span>
      <span class="br0">&#125;</span>
      <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$domainLen</span> <span class="sy0">&lt;</span> 1 <span class="sy0">||</span> <span class="re0">$domainLen</span> <span class="sy0">&gt;</span> <span class="nu0">255</span><span class="br0">&#41;</span>
      <span class="br0">&#123;</span>
         <span class="co1">// Bekijkt of het stuk na de @ tussen de 1 en 255 tekens bevat</span>
         <span class="re0">$isValid</span> <span class="sy0">=</span> <span class="kw4">false</span><span class="sy0">;</span>
      <span class="br0">&#125;</span>
      <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$local</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> <span class="sy0">==</span> <span class="st_h">'.'</span> <span class="sy0">||</span> <span class="re0">$local</span><span class="br0">&#91;</span><span class="re0">$localLen</span><span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#93;</span> <span class="sy0">==</span> <span class="st_h">'.'</span><span class="br0">&#41;</span>
      <span class="br0">&#123;</span>
         <span class="co1">// kijkt of het locale deel begint of eindigt met een  '.'</span>
         <span class="re0">$isValid</span> <span class="sy0">=</span> <span class="kw4">false</span><span class="sy0">;</span>
      <span class="br0">&#125;</span>
      <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/preg_match"><span class="kw3">preg_match</span></a><span class="br0">&#40;</span><span class="st_h">'/\\.\\./'</span><span class="sy0">,</span> <span class="re0">$local</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
      <span class="br0">&#123;</span>
         <span class="co1">// kijkt of er 2 punten achter elkaar zitten</span>
         <span class="re0">$isValid</span> <span class="sy0">=</span> <span class="kw4">false</span><span class="sy0">;</span>
      <span class="br0">&#125;</span>
      <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><a href="http://www.php.net/preg_match"><span class="kw3">preg_match</span></a><span class="br0">&#40;</span><span class="st_h">'/^[A-Za-z0-9\\-\\.]+$/'</span><span class="sy0">,</span> <span class="re0">$domain</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
      <span class="br0">&#123;</span>
         <span class="co1">// Kijkt voor een ongeldig teken in het domein deel</span>
         <span class="re0">$isValid</span> <span class="sy0">=</span> <span class="kw4">false</span><span class="sy0">;</span>
      <span class="br0">&#125;</span>
      <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/preg_match"><span class="kw3">preg_match</span></a><span class="br0">&#40;</span><span class="st_h">'/\\.\\./'</span><span class="sy0">,</span> <span class="re0">$domain</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
      <span class="br0">&#123;</span>
         <span class="co1">// Kijkt of het domein 2 punten achter elkaar bevat</span>
         <span class="re0">$isValid</span> <span class="sy0">=</span> <span class="kw4">false</span><span class="sy0">;</span>
      <span class="br0">&#125;</span>
      <span class="kw1">else</span> <span class="kw1">if</span>
<span class="br0">&#40;</span><span class="sy0">!</span><a href="http://www.php.net/preg_match"><span class="kw3">preg_match</span></a><span class="br0">&#40;</span><span class="st_h">'/^(\\\\.|[A-Za-z0-9!#%&amp;`_=\\/$\'*+?^{}|~.-])+$/'</span><span class="sy0">,</span>
                 <a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;<span class="es1">\\</span><span class="es1">\\</span>&quot;</span><span class="sy0">,</span><span class="st0">&quot;&quot;</span><span class="sy0">,</span><span class="re0">$local</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
      <span class="br0">&#123;</span>
         <span class="co1">// Kijkt naar een ongeldig teken in het domein</span>
         <span class="co1">// Als er quotes in staan is deze toch geldig</span>
         <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><a href="http://www.php.net/preg_match"><span class="kw3">preg_match</span></a><span class="br0">&#40;</span><span class="st_h">'/^&quot;(\\\\&quot;|[^&quot;])+&quot;$/'</span><span class="sy0">,</span>
             <a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;<span class="es1">\\</span><span class="es1">\\</span>&quot;</span><span class="sy0">,</span><span class="st0">&quot;&quot;</span><span class="sy0">,</span><span class="re0">$local</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
         <span class="br0">&#123;</span>
            <span class="re0">$isValid</span> <span class="sy0">=</span> <span class="kw4">false</span><span class="sy0">;</span>
         <span class="br0">&#125;</span>
      <span class="br0">&#125;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$isValid</span> <span class="sy0">&amp;&amp;</span> <span class="sy0">!</span><span class="br0">&#40;</span><a href="http://www.php.net/checkdnsrr"><span class="kw3">checkdnsrr</span></a><span class="br0">&#40;</span><span class="re0">$domain</span><span class="sy0">,</span><span class="st0">&quot;MX&quot;</span><span class="br0">&#41;</span> <span class="sy0">||</span>
 ↪<a href="http://www.php.net/checkdnsrr"><span class="kw3">checkdnsrr</span></a><span class="br0">&#40;</span><span class="re0">$domain</span><span class="sy0">,</span><span class="st0">&quot;A&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
      <span class="br0">&#123;</span>
         <span class="co1">// Bekijkt of het domein in het DNS gevonden kan worden</span>
         <span class="re0">$isValid</span> <span class="sy0">=</span> <span class="kw4">false</span><span class="sy0">;</span>
      <span class="br0">&#125;</span>
   <span class="br0">&#125;</span>
   <span class="kw1">return</span> <span class="re0">$isValid</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div>
<p>Ondanks dat deze vreemde email adressen niet vaak gebruikt worden is het toch een goed idee om deze niet bij voorbaat al te blokkeren. Deze vreemde adressen zijn voor veel mensen een manier om bijvoorbeeld spam tegen te houden.</p>
]]></content:encoded>
			<wfw:commentRss>http://zifp.nl/php/e-mail-validatie-op-de-juist-manier/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

