以安全的方式将密码从Javascript传递到PHP

以安全的方式将密码从Javascript传递到PHP,javascript,php,passwords,Javascript,Php,Passwords,我正在尝试使用MVC开发一个网站。 我得到了我的HTML表单(视图),一个js控制器,当按下“提交”键时会调用它,然后我需要将数据(包括密码)传递到一个php文件(模型),在那里密码将被散列、腌制并保存在数据库中 我不确定我这样做是否正确。是否可以以安全的方式将值从我的js文件传递到php文件?传递值的唯一安全方式是使用安全线路。这意味着承载表单的页面必须通过HTTPS提供。您提交到的页面也应该使用HTTPS 从客户端对密码进行哈希运算毫无意义 (1) Browser |

我正在尝试使用MVC开发一个网站。 我得到了我的HTML表单(视图),一个js控制器,当按下“提交”键时会调用它,然后我需要将数据(包括密码)传递到一个php文件(模型),在那里密码将被散列、腌制并保存在数据库中


我不确定我这样做是否正确。是否可以以安全的方式将值从我的js文件传递到php文件?

传递值的唯一安全方式是使用安全线路。这意味着承载表单的页面必须通过HTTPS提供。您提交到的页面也应该使用HTTPS


从客户端对密码进行哈希运算毫无意义

           (1) Browser | (2) Network  | (3) Server
                       |              |
password -(md5)-> hash | -(network)-> | server

攻击者不知道原始密码,但这并不重要。服务器需要的只是散列。散列实际上已成为密码。如果没有SSL,攻击者只需嗅探(2)中的散列,然后将(2)中的请求直接重播到服务器。服务器甚至不知道它是伪造的。

您可以通过创建自己的SSL证书并对其进行自签名来启用HTTPS(即,您不必为证书支付认证机构的费用,完全免费)。当您访问网站时,浏览器将警告您该网站不安全,因为证书不会由受信任的机构签名,但连接仍将加密

以下是有关生成/自签名您自己的SSL证书的相关问题/答案:

由于ajax post请求在技术上与post表单提交相同,因此它们处于相同的逻辑级别。没有什么可以保护您不破坏浏览器中的加密,所以,基本上,这样做是没有意义的(您不加密您的纯表单数据,是吗?)

首先,你需要了解你试图避免什么样的危险。这很可能是一场灾难。您仍在使用HTTP,因此所有方法都是相同的。你需要使用


注意:HTTPS不能保护您不直接从用户PC(如间谍软件)窃取数据


请阅读有关HTTP漏洞的更多信息以获取更多线索。你似乎缺少了一些关于整个事情如何运作的理论基础知识。

问题是,我是一名cs学生,我身无分文。。所以我真的不能为https服务付费。。这是分配给我的任务的一部分。所以也许我应该换一种方式?直接使用php而不使用js?@Mapisto有一些在线供应商提供免费SSL证书。你可以试试。你也可以按照其他答案的建议自行签名。不确定浏览器是否会将其视为“安全”的,但应适用于您的作业。谢谢您的帮助。我最终做了什么:从js到php,我对密码进行了哈希运算。然后从php到数据库,我在保存密码之前使用了salted hash。我想这对我的小项目来说已经足够安全了:)至少现在是这样。@JosephDeeamer它会工作的。在大多数浏览器中,自签名证书都会发出一个非常吓人的警告,坚称您所做的事情不安全,但如果您告诉它无论如何都要使用它,它就会正常工作。对于真正的发布来说,这是毫无用处的,但对于测试和个人使用来说,这可能是可以接受的。@JosephDreamer我或多或少地在验证你说的话。在将密码发送到服务器之前,使用md5函数加密密码。还可以使用ssl(https)协议。您不需要明文形式的密码。@Yasel您还没有仔细考虑过这个问题。对客户端上的密码进行哈希运算会将密码更改为该哈希值。如果有人得到了他们的手在散列他们将有密码!而且,这充其量只是一种混淆。真正的安全性不依赖于模糊处理。@Yasel发送散列密码是一个非常糟糕的建议。不管客户机上是否有人能看到加密算法,真正重要的是没有人能从网络中嗅出该密码。使用ssl协议是真正的交易,在发送密码之前使用md5是一个加号,不会伤害任何人。如果有人可以破坏客户端,那么无论加密与否,都无法挽救您的生命。@Yasel md5在通过网络发送密码之前对密码进行哈希运算,您将一无所获。无论是否使用它,您都同样容易受到重播攻击。就“不会伤害任何人”而言,md5不应该成为任何人的安全武器库的一部分。与其他选项相比,它作为消息摘要的价值有限,并且有大量易于获取的rainbow表。