【发布时间】:2018-10-21 22:24:18
【问题描述】:
给定:
我创建了Hash 和Captcha 类。 Hash 创建表单标记。 Captcha 使用 Graphics 类来创建图像。自定义会话服务包装类用于处理$_SESSION 超全局数据结构。
场景:
我使用依赖注入容器。因此,我想知道在哪里为可公开访问的 HTML 表单定义 Captcha 和 Hash 的实例化。
假设 1: 您应该将 Hash 和 Captcha 注入到 Model 的子代中,因为访问 $_SESSION 需要存储(根据 HTTP 请求)和验证(根据 HTTP响应)CSRF 令牌和验证码答案。视图不应该访问会话数据结构。
假设 2: 您应该将 Hash 和 Captcha 注入到 View 的子代中,因为生成 CSRF 令牌和验证码实际上是 View 的 表示逻辑的一部分,即使它们的验证发生在Model 中。允许从 View 直接或间接访问会话数据结构。
第一个假设似乎是答案,但我想确定一下。
抽象例子:
$session = new Session(); // A custom wrapper class
$hash = new Hash();
$graphics = new Graphics();
$captcha = new Captcha($graphics);
$model = new ContactModel($session, $hash, $captcha);
或
$view = new ContactView($session, $hash, $captcha);
【问题讨论】:
标签: php model-view-controller captcha csrf-token