假设我有以下Doctrine 2实体:
/**
* @ORM\Entity
* @ORM\Table(name="users")
*/
class User {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*
* @var int
*/
protected $id;
/**
* @ORM\Column(length=100)
*
* @var string
*/
protected $name;
/**
* @ORM\Column(type="integer")
*
* @var int
*/
protected $status;
}
Run Code Online (Sandbox Code Playgroud)
用户可以有多种状态,例如:Pending,Active,Suspended.整个代码(服务,存储库等)以及UI层(用户编辑表单将在下拉列表中显示它们)需要这些状态.
为了避免在多个地方定义它们,我到目前为止所做的是使用一个类来保存它们(所有应用程序的常量),它看起来有点像这样:
class App_Constants extends Zrzr_Constants
{
protected static $_constants = array(
'users' => array(
'status' => array(
0 => 'Pending',
1 => 'Active',
2 => 'Suspended' ) ) );
}
Run Code Online (Sandbox Code Playgroud)
基类(Zrzr_Constants)将提供一些检索它们的方法,它看起来像这样:
class Zrzr_Constants …Run Code Online (Sandbox Code Playgroud) 从我在owasp.org上的讲座中,他们推荐同步器令牌模式,不鼓励使用双提交cookie.
同步器令牌模式涉及使用会话.我有理由不想使用会话(在高流量环境中性能不佳,并且很难在多台机器上共享).因此,当我留下双提交cookie时,我需要理解为什么它们可能不像会话方法那样安全.
owasp.org文章提到XSS是一个潜在的问题(因为HTML格式中包含的会话ID可以通过JS读取),但同步器令牌也会发生这个问题(因为它们也包含在表单中)隐藏的领域).简而言之,XSS使得任何CRSF保护都无用(如果你允许XSS,那么CSRF可能不是你最大的问题).
那么有什么理由我应该远离双提交饼干?