<?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>PHP Log &#187; Security</title>
	<atom:link href="http://www.php-log.de/tags/security/feed" rel="self" type="application/rss+xml" />
	<link>http://www.php-log.de</link>
	<description>Eine feine Sammlung nützlicher PHP Notizen</description>
	<lastBuildDate>Thu, 27 May 2010 04:43:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Von CakePHP, Ajax Problemen und der Security Komponente</title>
		<link>http://www.php-log.de/128/php/von-cakephp-ajax-problemen-und-der-security-komponente</link>
		<comments>http://www.php-log.de/128/php/von-cakephp-ajax-problemen-und-der-security-komponente#comments</comments>
		<pubDate>Tue, 03 Feb 2009 23:52:00 +0000</pubDate>
		<dc:creator>ralle</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Mail]]></category>
		<category><![CDATA[PEAR]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.php-log.de/?p=128</guid>
		<description><![CDATA[Wer die &#8220;Security&#8221; Komponente von CakePHP in seinen Projekte einsetzt, kann bei der Ajax-Entwicklung die ein oder andere fröhliche, kleine Überraschung erleben. Und zwar in Form eines 404 Errors. Oder zu Deutsch: &#8220;Ajax geht nicht&#8221;. Warum nicht? Weil die Security Komponente verschlüsselte Daten (Security Tokens) in die Session schreibt die, im Falle eines Ajax Requests, [...]]]></description>
			<content:encoded><![CDATA[<p>Wer die &#8220;Security&#8221; Komponente von CakePHP in seinen Projekte einsetzt, kann bei der Ajax-Entwicklung die ein oder andere fröhliche, kleine Überraschung erleben. Und zwar in Form eines 404 Errors. Oder zu Deutsch: &#8220;Ajax geht nicht&#8221;. Warum nicht? Weil die Security Komponente verschlüsselte Daten (Security Tokens) in die Session schreibt die, im Falle eines Ajax Requests, nicht validiert werden können. Da steht sich CakePHP irgendwie selbst im Weg, vermutet böse Dinge und gibt deshalb lieber einen verwirrenden 404 Not found.<span id="more-128"></span></p>
<blockquote><p>Am Rande bemerkt: Der Einsatz des Firfox Addons <a href="https://addons.mozilla.org/de/firefox/addon/1843" target="_blank">Firebug</a> ist für die Entwicklung von Ajax dringend zu empfehlen.</p></blockquote>
<p>Zum Glück bietet CakePHP, wie es sich für ein gutes Framework gehört, auch hier eine beglückend einfache Lösung an. Den blackHoleCallback der Komponente Security. Dieser behandelt das Auftreten von Sicherheitsverstößen, ist in der Lage den 404er zu unterbinden und lässt das Framework weiterlaufen. Mein Lösung sieht so aus.</p>
<ol>
<li>blackHoleCallback im beforeFilter des AppController definieren.</li>
<li>In der Callback-Methode prüfen ob es eine genehme AJAX Methode betrifft.</li>
<li>Wenn &#8220;Ja&#8221;, einfach return. Sobald der Callback definiert wurde ist er für alles verantworlich, inkl. Terminerung des Scripts etc.</li>
<li>Wenn &#8220;Nein&#8221;, exit() und ggfl. Logging und/oder andere Maßnahmen.</li>
</ol>
<p>In Code gegossen sieht das so aus:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> AppController <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</span>	
&nbsp;
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$components</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Security'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Session'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> is_allowed_ajax_request<span style="color: #009900;">&#40;</span><span style="color: #000088;">$error</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>		
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'controller'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">&quot;users&quot;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'action'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">&quot;auto_complete&quot;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'invalid request'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> beforeFilter<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;">Security</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">blackHoleCallback</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;is_allowed_ajax_request&quot;</span><span style="color: #339933;">;</span>		
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.php-log.de/128/php/von-cakephp-ajax-problemen-und-der-security-komponente/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
