Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 密码安全;这安全吗?_Php_Sql_Mysql_Html_Security - Fatal编程技术网

Php 密码安全;这安全吗?

Php 密码安全;这安全吗?,php,sql,mysql,html,security,Php,Sql,Mysql,Html,Security,我昨天问了一个关于密码安全的问题 我是新来的保安 我使用的是mysql数据库,需要在那里存储用户密码。我在回答中被告知,对密码进行哈希处理,然后保存哈希值是正确的方法 所以基本上我想和你们确认一下这是正确的 这是一个分类广告网站,对于用户输入的每个分类广告,他/她都必须输入一个密码,以便稍后使用该密码删除分类广告(例如,当产品销售时) 在一个名为“put_ad.php”的文件中,我使用$\u POST方法从表单中获取通行证。 然后我将其散列并放入mysql表中。 然后,每当用户想要删除广告时,我

我昨天问了一个关于密码安全的问题

我是新来的保安

我使用的是mysql数据库,需要在那里存储用户密码。我在回答中被告知,对密码进行哈希处理,然后保存哈希值是正确的方法

所以基本上我想和你们确认一下这是正确的

这是一个分类广告网站,对于用户输入的每个分类广告,他/她都必须输入一个密码,以便稍后使用该密码删除分类广告(例如,当产品销售时)

在一个名为“
put_ad.php
”的文件中,我使用
$\u POST
方法从表单中获取通行证。 然后我将其散列并放入mysql表中。 然后,每当用户想要删除广告时,我都会对输入的密码进行哈希检查,并将输入密码的哈希值与mysql数据库中的哈希值进行比较,对吗

但是,如果我作为一名管理员想要删除一个分类密码,有没有一种方法可以轻松地“解除”密码

顺便说一句,目前正在使用sha1

一些代码非常受欢迎


谢谢

您所做的是正确的,但是不,SHA、MD5和其他都是单向散列,所以您不能对它们进行解散列(理论上您可以通过暴力等方式进行解散列)。允许您作为管理员删除内容也应该是授权管理的一部分。

如果您是管理员并且编写了代码,则无需知道原始用户密码。作为一名管理员,您可以编写正确的代码来执行此操作


这就是用户身份验证和用户授权之间的区别阅读此内容:然后您可以开始使用bcrypt存储密码。

是的,您正确地理解了第一部分

但是,没有办法(轻松地)解除密码的锁定。这实际上是存储散列而不是真实密码的全部要点

您应该简单地考虑在PHP应用程序中添加一些逻辑,这样当有管理员权限的用户登录时,就不需要检查密码来删除条目。

< P>不,没有办法“取消”密码。散列是一个单向过程,不能逆转

获取哈希代码有效密码的唯一方法是暴力;尝试散列不同的密码,直到找到匹配的密码


管理员能够登录到分类密码的最简单方法是存储当前哈希代码,并从临时密码创建新的哈希代码。之后,他可以将原始哈希代码放回原处,旧密码就可以使用了。

是的,您正确地存储了密码。但正如Arkh所言,bcrypt是一种更安全的加密算法

但是密码是在服务器上加密的,这意味着它将以明文形式通过internet发送,除非您使用连接的SSL加密。任何人只要嗅探到你和用户之间的线路,理论上就可以读取密码。对于您的使用,这可能是可以接受的


我更愿意建立一个管理员界面,允许管理员用户删除他/她想要的任何分类,从而无需“清除”密码。

是的,你是对的,但是用户的密码应该不再可读,即使是管理员也不应该!因此,即使是unhash也有可能(事实并非如此),将其解密回可读的纯文本显然是不可能的

另一个问题是,您不应该仅仅创建密码的散列,因为这是不安全的。密码可以通过暴力找到,这意味着有人迭代可能的密码,并试图创建他从网络嗅探到的哈希代码等。如果他创建了相同的哈希,他就找到了密码。 但是你可以用盐腌的土豆条。意味着您向密码中添加一个salt(攻击者不知道的一些附加字符串),然后对其进行散列。e、 g.你创建一个“username anytextonlyknownbyourapp password”或类似的哈希值。

如果问题是“如何解开密码”-答案是-没有解决方案来解码哈希值,方法之一是对其进行暴力处理(通过计算哈希值并与基值进行比较来找到原始值),但过程非常缓慢。如果密码为“强”,则无法解决此任务


如果问题是“如何管理密码”-您不需要使用“unhash”

好的,但是密码是在“put_ad.php”文件中获取的,如下所示:$pass=$\u POST['password'];这样可以吗,因为实际传递将在这个变量中,直到它被散列。。。或者我应该用其他方法来做吗?你永远不会强行取消某些内容的哈希,只会找到一个将被分解为相同哈希值的字符串。@alex:使用密码,攻击输入空间更容易,而且很可能会生成原始密码。@Camran:按照你的方式,它需要作为明文传输到某个地方。您应该更关心的是,实际传输是安全的,首先使用SSL。好的,明白了。。。最后,您认为MySql中的varchar字段应该有多长?长度为100应该足够了吧?好的,但是密码是在“put_ad.php”文件中获取的,如下所示:$pass=$\u POST['password'];这样可以吗,因为实际传递将在这个变量中,直到它被散列。。。或者我应该用别的方法吗?那应该很好。如果你想“更安全”,你可以在加密时调用$_POST['password'](假设你没有以任何其他方式处理它(例如satting))。但是老实说,你应该是好的。你对来自页面的变量的问题的评论——这应该是好的,但是你可能想考虑通过SSL服务这个页面。仅仅散列是不够的-你还必须使用盐。阅读Arkh的回答,我也会使用密码。“对于每个密码,生成一个随机数(nonce)。用nonce对密码进行散列,并存储散列和t