我正在使用ASP.NET中的一个应用程序,并且特别想知道Password Reset如果我想实现自己的功能,我将如何实现一个功能.
具体来说,我有以下问题:
我还需要注意其他任何考虑因素吗?
注意:其他问题完全掩盖了技术实施.事实上,接受的答案掩盖了血腥的细节.我希望这个问题和随后的答案能够进入血腥的细节,我希望通过更加狭隘地表达这个问题,答案不是"绒毛"而是"血腥".
编辑:答案也将讨论如何在SQL Server中建模和处理这样的表或任何ASP.NET MVC链接到答案.
这是一个两部分问题:
第1部分
首先,处理在PHP中计算密码的熵.我一直无法找到任何经验合理的代码示例,并且非常希望找到一种帮助来找到计算最终数字的"正确"方法.网上的很多人都有他们自己的家庭烘焙加权算法,但我真的在寻找科学的答案.
我将使用密码熵作为更大安全系统的一部分,并根据用户密码被泄露时可访问的信息以及蛮力破解密码的方式来分析我们的整体数据安全性.
第2部分
这个问题的第二部分是:这个数字真的有用吗?我的最终目标是为系统中的每个密码生成一个"分数",我们可以将其用作监视作为动态实体的整体系统安全性.我可能不得不使用另一种算法或两种算法进行字典攻击,更换密码等等 - 但我确实认为熵会在这种"整体"系统评级中发挥重要作用.我欢迎其他方法的建议.
我知道的
我已经看到一些提到用于计算所述熵的对数方程,但我还没有看到一个好的例子,它实际上并没有写成数学方程式.我真的可以使用代码示例(即使严格来说不是PHP)来让我继续.
延期
在发表评论时,我意识到我可以更好地解释这种计算的有用性.当我处理用户密码极弱的遗留系统时,我必须先得到一些具体的证据证明这个弱点,然后才能强制所有用户将密码更改为新的(强制执行的)强密码.通过在系统中存储每个用户帐户的密码强度分数,我可以构建几个不同的度量标准来显示整体系统的弱点,并为更强的密码设置一个案例.
TIA
我正在创建一个网站,该网站将使用ID,密码和API密钥到其他第三方网站 - 以便服务器相应地访问信息.出于此对话的目的,我们假设它是针对支付网关的 - 意味着存储在数据库中的此信息的暴露可能意味着恶意用户可以从其凭据泄露的帐户中提取现金.
不幸的是,这不像密码/散列情况,因为用户每次都不输入凭证 - 他们输入一次,然后将其保存在服务器上以供应用程序将来使用.
我能想出的唯一合理的方法(这将是一个MySQL/PHP应用程序),是通过PHP应用程序中的硬编码"密码"加密凭证.这里唯一的好处是,如果恶意用户/黑客获得对数据库的访问权限,而不是PHP代码,他们仍然没有任何东西.也就是说,这对我来说似乎毫无意义,因为我认为我们可以合理地假设一个黑客如果得到一个或另一个就会得到一切 - 对吧?
如果社区决定一些好的解决方案,那么将其他来源收集到示例/教程/更深入的信息中会很好,以便将来可以为所有人实施.
我很惊讶我没有在堆栈上看到任何好的答案这个问题.我确实找到了这个,但在我的情况下,这并不适用:我应该如何道德地接近用户密码存储以便以后的明文检索?
谢谢大家.
我意识到,为了安全起见,密码不应该以明文形式存储在数据库中.如果我将它们哈希,我可以验证它们以用于登录.
但是,如果我想建立一个密码恢复系统,那么最好的策略是什么,因为没有撤消哈希?
有人能给我一个关于存储和恢复密码的良好安全策略的简要概述吗?
处理忘记密码/密码重置的最安全方法是什么?我应该将密码通过电子邮件发送给用户吗 如果是这样,那么强迫他们重置它?或者你让他们立即重置它(不发送电子邮件)并需要一些其他信息来验证它们是谁?还是有更好的方法?
我正在使用PHP创建应用程序,并且要求必须能够解密密码,以避免将用户数据库切换到不同系统时将来出现问题.考虑到无法修改此未来系统的密码方法,我需要纯文本密码才能生成密码.
计划是使用存储在服务器上的公钥加密用户的密码.通过加密输入和比较结果来完成认证.没有解密完成.能够解密的私钥存储在异地以供以后使用.
您建议使用哪种加密/解密算法?当您认为攻击者无法使用私钥时,加密密码是否仍然像散列(MD5/SHA1)一样安全?
我想设计一个用户/角色系统:
用户有一个名称和密码,然后用户可以有几个角色,如Admin.
为此,我创建了一个这样的架构:
用户:
CREATE TABLE [dbo].[Users]
(
[id] [int] NOT NULL,
[name] [nvarchar](50) NULL,
[password] [nvarchar](50) NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ([id] ASC)
)
Run Code Online (Sandbox Code Playgroud)
角色:
CREATE TABLE [dbo].[Roles]
(
[id] [int] NOT NULL,
[name] [nvarchar](50) NULL,
CONSTRAINT [PK_Roles] PRIMARY KEY CLUSTERED ([id] ASC)
)
Run Code Online (Sandbox Code Playgroud)
user_roles:
CREATE TABLE [dbo].[User_Roles]
(
[id] [int] NOT NULL,
[User_id] [int] NOT NULL,
[Role_id] [int] NOT NULL,
CONSTRAINT [PK_User_Roles] PRIMARY KEY CLUSTERED ([id] ASC)
)
Run Code Online (Sandbox Code Playgroud)
我的问题是:我应该使用外键吗? User_Roles.User_id -> User.Id
如果是,为什么?
你认为最安全,最安全的方法是什么?我把这些片段从php.net上删除了.我只是想知道,因为人们发布了他们自己,我只是无法理解为什么有些人是他们的方式......有人可以帮助我,并告诉我更多关于这些?哪个最安全,为什么?
1.
<?php
$hash = md5($salt1.$password.$salt2);
?>
Run Code Online (Sandbox Code Playgroud)
2.
<?php
function eliteEncrypt($string) {
// Create a salt
$salt = md5($string."%*4!#$;\.k~'(_@");
// Hash the string
$string = md5("$salt$string$salt");
return $string;
}
?>
Run Code Online (Sandbox Code Playgroud)
3.
<?php
define ('SALT_ONE', 'some_random_123_collection_&$^%_of_stuff');
define ('SALT_TWO', 'another_random_%*!_collection_ANbu_of_stuff');
$password = 'dragon';
function generate_encrypted_password($str) {
$new_pword = '';
if( defined('SALT_ONE') ):
$new_pword .= md5(SALT_ONE);
endif;
$new_pword .= md5($str);
if( defined('SALT_TWO') ):
$new_pword .= md5(SALT_TWO);
endif;
return substr($new_pword, strlen($str), 40);
}
echo generate_encrypted_password($password);
?>
Run Code Online (Sandbox Code Playgroud)
4.
<?
function enchsetenev($toencode,$times)
{
$salt = 's+(_a*'; …Run Code Online (Sandbox Code Playgroud) 我有一个密码通过php脚本user.php从我的iPhone应用程序传递到数据库.
变量$ pass由以下内容填充:
$pass = str_replace("'", "", $_REQUEST['pass']);
Run Code Online (Sandbox Code Playgroud)
如何在插入数据库之前对其进行加密?我已经阅读了一些关于不同技术的内容,但寻找管理它的最佳方法.
谢谢大家.
我有一条信息,使用aes-256-cbc加密编码.我该如何将其存储在数据库中?目前我正在使用VARCHAR(255)utf8_bin.这样可以,还是应该使用其他字段类型,如VARBINARY(255)?在这种情况下,是否有可能使用VARCHAR丢失一些数据?谢谢.
php ×6
passwords ×4
security ×4
mysql ×3
aes ×1
algorithm ×1
api ×1
api-key ×1
asp.net ×1
asp.net-mvc ×1
c# ×1
credentials ×1
encryption ×1
entropy ×1
md5 ×1
salt ×1
sql-server ×1