在我的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,
))
但是当我提交表单时,我可以在网络控制台浏览器中看到我的密码是纯文本,每个人都可以使用它们。
所以我可以在控制台浏览器中恢复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用户登录表单记录自己时,会发生同样的事情。
答案 0 :(得分:2)
发送到http连接的每个数据都可以通过您路由到服务器的人(中间人攻击)。
type="password"
仅在屏幕上隐藏字符,甚至计算机上的其他程序也可以读取数据。
保护数据的唯一方法是发送SSL(HTTPS而不是HTTP)
答案 1 :(得分:1)
我并不意味着成为坏消息的承载者,但是你遇到的这种流动是预料之中的。我将在数据库中假设您的用户密码实际上是加密的。
表单数据本身不应包含任何类型的加密。一旦您将表单数据提交给服务器端,数据就会被加密。要正确加密使用输入,必须将普通值提交给服务器。如果您执行了任何类型的“预加密”,则需要更改注册过程的流程以验证哈希并允许将其插入数据库,但不建议这样做
如果您担心其他人使用此数据进行XSS攻击,那么您需要设置CORS / CSRF来缓解此问题。
为什么我说你当前的问题不是问题?好吧,如果你去任何有注册表格的网站,并提交它,你会在请求参数中看到明文密码,因为这是正常的。 Facebook和Google都在登录/注册时发送明文密码。为什么?因为这是好的和预期的行为。