<?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>4's symfony blog &#187; csrf</title>
	<atom:link href="http://www.foolbirds.com/t/csrf/feed" rel="self" type="application/rss+xml" />
	<link>http://www.foolbirds.com</link>
	<description>all about symfony</description>
	<lastBuildDate>Tue, 17 Aug 2010 01:22:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>CSRF使用注意事项和form的标准用法</title>
		<link>http://www.foolbirds.com/csrf-and-form.html</link>
		<comments>http://www.foolbirds.com/csrf-and-form.html#comments</comments>
		<pubDate>Wed, 15 Apr 2009 05:17:40 +0000</pubDate>
		<dc:creator>maker</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[csrf]]></category>
		<category><![CDATA[form]]></category>

		<guid isPermaLink="false">http://www.foolbirds.com/?p=729</guid>
		<description><![CDATA[我在&#60;开启symfony的CSRF保护&#62;一文中简单的介绍了CSRF的概念和使用方法, 由于那篇文章是学习symfony的初期写的, 所以对form和csrf理解的还不够透彻, 通过之后的学习和研究又渐渐的了解了一些细节.
首先, 在form被正确的应用的情况下, csrf是完全可以被兼容的, 这里先简单讲一下自定义的form的注意事项.
在定义form的时候, 我们需要定义名字格式, symfony自动生成的form应该已经设定了格式，不再需要重新设置。
class CityForm extends BaseCityForm{
...
function setup()
{
...
$this-&#62;widgetSchema-&#62;setNameFormat('city[%s]');
...
}
...
}
这样我们将form中所有元素的值都放到了一个Parameter的子数组中.接下来在取得表单值的时候需要使用如下方法.
$this-&#62;form-&#62;bind($request-&#62;getParameter($this-&#62;form-&#62;getName()));
if($this-&#62;form-&#62;isValid()){
...
}else {
...
}
这样避免了手动构造bind的参数，也避免了在bind的参数中出现多余字段的问题，而且还可以完全兼容csrf，这也正是官方生成的代码所使用的方法。
本文完。
内嵌表单详解（How to Embed Forms in Symfony 1.2 Admin Generator 中文版）Symfony中自定义form中offsetUnset的应用form使用一例开启symfony的CSRF保护Form表单的新建、修改编写widget一例:支持Google Maps的坐标输入框如何给表单项赋初值]]></description>
			<content:encoded><![CDATA[<p>我在&lt;<a href="/csrf.html">开启symfony的CSRF保护</a>&gt;一文中简单的介绍了CSRF的概念和使用方法, 由于那篇文章是学习symfony的初期写的, 所以对form和csrf理解的还不够透彻, 通过之后的学习和研究又渐渐的了解了一些细节.</p>
<p>首先, 在form被正确的应用的情况下, csrf是完全可以被兼容的, 这里先简单讲一下自定义的form的注意事项.</p>
<p>在定义form的时候, 我们需要定义名字格式, <strong>symfony自动生成的form应该已经设定了格式，不再需要重新设置</strong>。</p>
<p><code>class CityForm extends BaseCityForm{<br />
...<br />
function setup()<br />
{<br />
...<br />
$this-&gt;widgetSchema-&gt;setNameFormat('city[%s]');<br />
...<br />
}<br />
...<br />
}</code></p>
<p>这样我们将form中所有元素的值都放到了一个Parameter的子数组中.接下来在取得表单值的时候需要使用如下方法.</p>
<p><code>$this-&gt;form-&gt;bind($request-&gt;getParameter($this-&gt;form-&gt;getName()));<br />
if($this-&gt;form-&gt;isValid()){<br />
...<br />
}else {<br />
...<br />
}</code></p>
<p>这样避免了手动构造bind的参数，也避免了在bind的参数中出现多余字段的问题，而且还可以完全兼容csrf，这也正是官方生成的代码所使用的方法。</p>
<p>本文完。</p>
<ul class="related_post"><li><a href="http://www.foolbirds.com/how-to-embed-forms-in-symfony-12-admin-generator.html" title="内嵌表单详解（How to Embed Forms in Symfony 1.2 Admin Generator 中文版）">内嵌表单详解（How to Embed Forms in Symfony 1.2 Admin Generator 中文版）</a></li><li><a href="http://www.foolbirds.com/symfony-form-offsetunset.html" title="Symfony中自定义form中offsetUnset的应用">Symfony中自定义form中offsetUnset的应用</a></li><li><a href="http://www.foolbirds.com/use-form.html" title="form使用一例">form使用一例</a></li><li><a href="http://www.foolbirds.com/csrf.html" title="开启symfony的CSRF保护">开启symfony的CSRF保护</a></li><li><a href="http://www.foolbirds.com/form-create-and-edit.html" title="Form表单的新建、修改">Form表单的新建、修改</a></li><li><a href="http://www.foolbirds.com/symfony-latlng-widget-with-google-maps.html" title="编写widget一例:支持Google Maps的坐标输入框">编写widget一例:支持Google Maps的坐标输入框</a></li><li><a href="http://www.foolbirds.com/default-values-for-form.html" title="如何给表单项赋初值">如何给表单项赋初值</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/csrf-and-form.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>开启symfony的CSRF保护</title>
		<link>http://www.foolbirds.com/csrf.html</link>
		<comments>http://www.foolbirds.com/csrf.html#comments</comments>
		<pubDate>Mon, 22 Dec 2008 06:48:17 +0000</pubDate>
		<dc:creator>maker</dc:creator>
				<category><![CDATA[CentOS/Redhat]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[csrf]]></category>

		<guid isPermaLink="false">http://symfony.bobhero.net/?p=177</guid>
		<description><![CDATA[什么是CSRF?
CSRF是伪造客户端请求的一种攻击，CSRF的英文全称是Cross Site Request Forgery，字面上的意思是跨站点伪造请求。
symfony 1.2中内置了CSRF验证功能, 用来防止CSRF攻击, 在建立项目的时候我们可以使用如下命令开启CSRF保护.
&#62; symfony generate:app --csrf-secret=UniqueSecret frontend
或者修改app的settings.yml
all:
  csrf-secret=UniqueSecret
开启CSRF保护之后app中的所有form都会增加一个隐藏项, 其值为随机生成的一个字符串, 表单提交之后会对该字符串进行验证, 工作原理类似验证码, 但免去了输入验证码的麻烦.
为了更好的兼容性(这里指开启和不开启CSRF的时候都可以正常运行), 我们需要修改form取得值的方法, 使用
$form-&#62;bind($request-&#62;getPostParameters());
可能是CSRF相关的功能还没有足够的完善, 在之前的测试中, 当form的submit按钮有name的时候会产生表单错误, 造成表单无法提交, 如果非必要情况, 最好将submit的name设置为空或者不设置.
但有时候我们的确需要给submit一个name, 比如但表单多submit的情况. 这时我们就需要用另外一种方法了, 在form中加入下面代码.
$this-&#62;validatorSchema -&#62; setOption('allow_extra_fileds', true);
这样表单验证会允许存在不属于form的field.
CSRF使用注意事项和form的标准用法]]></description>
			<content:encoded><![CDATA[<p>什么是CSRF?</p>
<blockquote><p>CSRF是伪造客户端请求的一种攻击，CSRF的英文全称是Cross Site Request Forgery，字面上的意思是跨站点伪造请求。</p></blockquote>
<p>symfony 1.2中内置了CSRF验证功能, 用来防止CSRF攻击, 在建立项目的时候我们可以使用如下命令开启CSRF保护.</p>
<pre name="code" class="php">&gt; symfony generate:app --csrf-secret=UniqueSecret frontend</pre>
<p>或者修改app的settings.yml</p>
<pre name="code" class="php">all:
  csrf-secret=UniqueSecret</pre>
<p>开启CSRF保护之后app中的所有form都会增加一个隐藏项, 其值为随机生成的一个字符串, 表单提交之后会对该字符串进行验证, 工作原理类似验证码, 但免去了输入验证码的麻烦.</p>
<p>为了更好的兼容性(这里指开启和不开启CSRF的时候都可以正常运行), 我们需要修改form取得值的方法, 使用</p>
<pre name="code" class="php">$form-&gt;bind($request-&gt;getPostParameters());</pre>
<p>可能是CSRF相关的功能还没有足够的完善, 在之前的测试中, 当form的submit按钮有name的时候会产生表单错误, 造成表单无法提交, 如果非必要情况, 最好将submit的name设置为空或者不设置.</p>
<p>但有时候我们的确需要给submit一个name, 比如但表单多submit的情况. 这时我们就需要用另外一种方法了, 在form中加入下面代码.</p>
<pre name="code" class="php">$this-&gt;validatorSchema -&gt; setOption('allow_extra_fileds', true);</pre>
<p>这样表单验证会允许存在不属于form的field.</p>
<ul class="related_post"><li><a href="http://www.foolbirds.com/csrf-and-form.html" title="CSRF使用注意事项和form的标准用法">CSRF使用注意事项和form的标准用法</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.foolbirds.com/csrf.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
