在 SilverStripe 3.1.x 中扩展/修改 LostPasswordForm 以包含验证码的最佳/正确方法是什么?另一个安全问题,被列为中等风险。他们是这样说的:
观察: 忘记密码功能可用于向 管理员用户的电子邮件地址。
受影响的 URL 示例: http://example.com/Security/LostPasswordForm
影响: 恶意用户可能会使用机器人或自动化方法来 重复提交忘记密码请求。电子邮件收件箱可能是 由于大量消息而导致无法访问或无用。
建议:实施一次性使用质询-响应测试,例如 在忘记密码请求期间作为验证码,以防止自动 机器人或减缓试图淹没用户电子邮件的人类 收件箱。此验证码功能在使用一次后就会过期。
由于时间至关重要,因此任何指示(甚至完整的解决方案)将不胜感激。从核心实施黑客攻击很容易,但这不是最佳实践。有人可以分享如何通过正确扩展来完成吗?
我认为覆盖默认模板是正确的方法,
但您应该能够使用扩展
MemberLoginForm
的自定义类,而不是更改核心文件...
_config.php
Object::useCustomClass('MemberLoginForm', 'MyExtendedMemberLoginForm');
MyExtendedMemberLoginForm.php
class MyExtendedMemberLoginForm extends MemberLoginForm {
//override methods, add your fields...
}