Form protection + Facebook + Internet Explorer = nekde je tu zakopany asipes

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
chemix
Nette Core | 1310
+
0
-

Problem je ze netusim co ten asipes je

Mam stranku co ji potrebuji zobrazovat ve facebookovem prostredi a v ni mam formular ve kterem bych chtel mit zaplou CSRF protekci.

Vzal jsem piskoviste a upravil nasledujici

config.neon

common:

	php:
		date.timezone: Europe/Prague
		# session.save_path: "%tempDir%/sessions"
		# zlib.output_compression: yes


	nette:
		security:
			frames:

		session:
			autoStart: yes
			expiration: '+ 14 days'



production < common:

development < common:

HomepagePresenter.php

<?php

/**
 * Homepage presenter.
 *
 * @author     John Doe
 * @package    MyApplication
 */
class HomepagePresenter extends BasePresenter
{

	public function renderDefault()
	{
		$this->template->time = new DateTime;
	}


	public function createComponentCsrfForm()
	{
		$form = new NAppForm();
		$form->addProtection('CSRF Protection Error');

		// email
		$control = $form->addText('email', 'E-mail:')
			->setRequired();
		$control->setType('email')
			->addCondition(NForm::FILLED)
			->addRule(NForm::EMAIL, 'not valid email address');

		$form->addCheckbox('maillist', 'radio');

		$form->addSubmit('actionSend', 'send');

		$form->onSuccess[] = callback($this, 'saveUserToDb');

		return $form;
	}

	public function saveUserToDb($form)
	{
		print_r($form->getValues());
		exit('--OK--');
	}

}

a sablonu Homepage/default.latte

{* This is the welcome page, you can delete it *}

{block content}
<div id="banner">
	<h1>Facebook problem</h1>
</div>

<div id="content">
	{$time|date:'Y-m-d H:i:s'}
	{control csrfForm}
</div>

{/block}

Firefox , chrome neni problem … az na Internet Explorer (zkousel 7,9) ten mi proste vzdy hodi CSRF error

viz stranka co pak tohle cele zobrazuje

!!!POZOR nema to zaplou podporu pro HTTPS!!!

http://apps.facebook.com/drzhubuakrok/

netusite nekdo proc by se to melo chovat takhle divne ?

jtousek
Člen | 951
+
0
-

Hádal bych nějaký IE problém s Cookies, něco jako tohle. Přímo tenhle problém to není, to jsem zkontroloval.

motorcb
Člen | 552
+
0
-

Mám stejný problém?
Povedlo se vám to někomu vyřešit?

enumag
Člen | 2118
+
0
-

Dneska jsem studoval .htaccess z HTMLBolerPlate a našel jsem něco co by mohlo souviset:

# ----------------------------------------------------------------------
# Cookie setting from iframes
# ----------------------------------------------------------------------

# Allow cookies to be set from iframes (for IE only)
# If needed, specify a path or regex in the Location directive.

# <IfModule mod_headers.c>
#   Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""
# </IfModule>
ic
Člen | 430
+
0
-

Jo, P3P jsem kdysi i rozuměl… ale človek rýchlo zabúda.

Šlo tam o jakési prohlášení o tom, jak zacházím (co ukládám, jak dlouho, kdo to kontroluje a tak dále) s cookies, které používám. Jde tam toho nastavit opravdu hodně a člověk si na sebe může vymyslet i pokuty a takové věci.

Asi by to nikdo moc nevyplňoval, pokud by IE6+ nepřišel s tím, že nebude ukládat cookies 3. stran, pokud nebudou mít toto P3P (a jen pokud tam budou ty údaje, co se mu líbí). To by mohl být právě tento případ.

Výsledkem má být soubor, kde jsou tyto údaje zapsány v XML v nějakém strojovém jazyku, soubor s tím samým lidsky-čitelným, nějaké hlavičky do stránky a pak tady ta hlavička http protokolu. Ta jediná tomu IEčku stačila, aby nedělal problémy.

Dá se tam jen tak střelit ta hlavička opsaná odněkud odjinud, ale každé to písmenko něco říká, tak aby se pak člověk nedivil XD
Nějaké minimum, aby to fungovalo je asi P3P: CP="NON DSP COR NOR" (snad se to od dob IE6-ky nezměnilo) více zde: http://php.vrana.cz/p3p.php

Člověk si to může nastudovat, je k tomu i knížka přes 300 stran http://www.amazon.com/…p/0596003714
Nebo použít nějaký z generátorů:

nicméně jak jsem psal… když si to člověk nakliká příliš benevolentně, tak to IEčko stejně nesežere, takže to chce párkrát zkusit.