我想知道是否存在任何方法可以让您发送加密的数据,例如通过视图和控制器。 假设您有一个带有以下字段的TypeForm:
尽管您的数据将在后端使用bcrypt处理(例如)。第一个请求将包含一个没有任何加密的普通密码,该密码将从视图传输到控制器。我想知道哪种是与symfony&twig合作解决此问题的最佳实践。
例如,HTTPS证书将加密整个通信通道。有什么棘手的事情可以让您做与此相关的事情吗?
示例:这可能是TypeForm:
<?php
namespace App\Form;
use App\Entity\User;
use App\Entity\Profile;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Validator\Constraints\IsTrue;
class RecoveryPasswordType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('plainPassword', RepeatedType::class, array(
'type' => PasswordType::class,
'first_options' => array( 'label' => 'Password', 'attr' => array( 'class' => 'form-control repeat', 'placeholder' => 'Password')),
'second_options' => array( 'label' => 'Repeat Password', 'attr' => array( 'class' => 'form-control', 'placeholder' => 'Repeat password')),
))
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
}
这真是个风景
{% extends 'base.html.twig' %}
{% block body %}
{{ form_start(form, { 'attr': {'class': 'form-signin disabled'} }) }}
{{ form_row(form.plainPassword.first, {'label':false}) }}
{{ form_row(form.plainPassword.second, {'label':false}) }}
<button class="btn btn-lg btn-primary btn-block" type="submit">Send</button>
{{ form_end(form) }}
{% endblock %}
亲切的问候。
答案 0 :(得分:0)
首先,我不是安全专家。但是既然您在摸索一些基础知识...
在letencrypt时代,未加密的连接确实没有任何借口! (真的!特别是对于登录表单...)。这很重要,symfony不能为您照顾。
最好的第一道防线是加密连接。这样可以防止任何人监听连接(以及通过表单发送的密码...)
保护“纯文本”密码,当密码到达您的服务器,最后到达symfony和您的控制器时,我不得不说...如果您不信任服务器,则不应信任任何内容。
如果您使用登录/注册表格停留在标准地区,则不会有任何问题。平均而言,由非安全开发人员(包括我自己)进行的“自定义安全”会造成安全风险。
我会有点自大,并假设您是新手(一点都不打算冒犯),并建议您保持简单,遵循教程,从而保持安全。对于常见的安全用例,symfony的默认值已经足够好了。
此外,symfony通常应该获取数据并管理登录内容,以便您不会搞砸它。阅读how to build a login form。 (例如,登录字段的“魔术”名称)。
也许还有关于如何处理用户注册和密码更改的教程。 (平均而言,我宁愿相信symfony页面上的教程)。注册和密码更改不受保护登录名的相同机制的保护。
您还写:
第一个请求将包含一个没有任何加密的纯密码,该密码将从视图传输到控制器。
首先:否。不会将任何普通密码从视图传输到控制器。我不想赘述过多,但是您的视图仅获取您在控制器中显式提供的数据。因此,它已从symfony框架通过处理安全性和其他奇特事物*的多层服务转移到 controller 。然后可以做的事情,它还应该创建一个响应(例如,通过渲染视图),然后返回响应(再次使用symfony会将其推送到用户的某些服务层)。
*)如果您安装了可以添加事件侦听器的捆绑软件/软件包,那么从理论上讲,这些捆绑软件/软件包可以在安全性开始之前拦截请求。因此,请勿盲目安装软件包。