FOSUserBundle,密码(plainPassword)未在提交POST表单

时间:2016-02-15 15:32:46

标签: php symfony security fosuserbundle encoder

在我的Symfony项目中,我使用的是FOS用户包。

在我的secutity.yml中我有这个以便使用bcrypt编码器:

security:
    # FOS UserBundle needles
    encoders:
        Symfony\Component\Security\Core\User\User: bcrypt
        MyNamespace\MyBundle\Entity\User: bcrypt
        FOS\UserBundle\Model\UserInterface: bcrypt

我以这样的嵌入形式调用fos用户注册表:

$builder
  ->add('contactPhone')
  ->add('contactMobilePhone')
  ->add('user', 'fos_user_registration', array(
                                               'label' => false,
      ))

它举例说明: enter image description here

但是当我提交表单时,我可以在网络控制台浏览器中看到我的密码是纯文本,每个人都可以使用它们。

所以我可以在控制台浏览器中恢复POST请求的所有数据:

  

my_form[user][email]=test@test.com

     

my_form[contactPhone]=0404040404

     

my_form[contactMobilePhone]=0606060606

     

my_form[user][username]=test

     

my_form[user][plainPassword][first]=test //第一次输入密码

     

my_form[user][plainPassword][second]=test //验证

     

my_form[save] //提交my_form [_token_consumer] = //无需见到他

你可以理解,我没有安全感。我需要在提交表单时对密码进行编码,以便不允许每个人都看到它们。

请注意,当我使用FOSUserBundle用户登录表单记录自己时,会发生同样的事情。

2 个答案:

答案 0 :(得分:2)

发送到http连接的每个数据都可以通过您路由到服务器的人(中间人攻击)。

type="password"仅在屏幕上隐藏字符,甚至计算机上的其他程序也可以读取数据。

保护数据的唯一方法是发送SSL(HTTPS而不是HTTP)

答案 1 :(得分:1)

我并不意味着成为坏消息的承载者,但是你遇到的这种流动是预料之中的。我将在数据库中假设您的用户密码实际上是加密的。

表单数据本身不应包含任何类型的加密。一旦您将表单数据提交给服务器端,数据就会被加密。要正确加密使用输入,必须将普通值提交给服务器。如果您执行了任何类型的“预加密”,则需要更改注册过程的流程以验证哈希并允许将其插入数据库,但不建议这样做

如果您担心其他人使用此数据进行XSS攻击,那么您需要设置CORS / CSRF来缓解此问题。

为什么我说你当前的问题不是问题?好吧,如果你去任何有注册表格的网站,并提交它,你会在请求参数中看到明文密码,因为这是正常的。 Facebook和Google都在登录/注册时发送明文密码。为什么?因为这是好的和预期的行为。