在应用程序中对密码进行硬编码有什么不安全之处?

时间:2016-02-27 22:25:38

标签: c# asp.net asp.net-mvc security authentication

我需要为我的ASP.NET MVC应用程序的单个页面创建基本登录,并且我在讨论是否应该花费数小时来尝试了解Identity库,SALTing密码等,或者我是否可以只需执行以下操作。

所以我使用Password Depot创建一个随机密码,如

for(i=0;i<4;i=i+1)
{
    queue_matrix[i] = 0.0;
}

for(i=0;i<SPACE;i=i+1)
{
    if(U_field_matrix[i][t1] > queue_matrix[0])
    {
        queue_matrix[0] = U_field_matrix[i][t1];
    }
}

for(i=0;i<SPACE;i=i+1)
{
    if((U_field_matrix[i][t1] > queue_matrix[1]) && (U_field_matrix[i][t1] < queue_matrix[0]))
    {
        queue_matrix[1] = U_field_matrix[i][t1];
    }
}

for(i=0;i<SPACE;i=i+1)
{
    if((U_field_matrix[i][t1] > queue_matrix[2]) && (U_field_matrix[i][t1] < queue_matrix[1]))
    {
        queue_matrix[2] = U_field_matrix[i][t1];
    }
}

for(i=0;i<SPACE;i=i+1)
{
    if((U_field_matrix[i][t1] > queue_matrix[3]) && (U_field_matrix[i][t1] < queue_matrix[2]))
    {
        queue_matrix[3] = U_field_matrix[i][t1];
    }
}

关于它所说的

  

预计破解密码的时间:7.37 * 10 ^ 30年。

然后我会将其存储在应用程序中以便提供给客户。登录将是一个简单的

g5\oLH*aFZn=mL5GKS@5&P%*

检查 [HttpPost] public ActionResult TryLogin ( string pwsdAttempt ) { if ( AdminController.CheckPassword(pwsdAttempt) ) { Session["loggedIn"] = "true"; return Json(new { correct = true }); } else { return Json( new { correct = false }); } } pswdAttempt(或任何随机生成的密码最终结束),这将通过SSL。

这有什么潜在的问题吗?如果是,那又是什么?

1 个答案:

答案 0 :(得分:4)

是的,您应该花时间研究安全性。它不需要花费太多时间,而且有标准的框架可以为您提供繁重的工作。

写作时你是什么意思

  

然后我将把它存储在应用程序中以供给客户。

您的方法有几个问题。

安全性非常差

首先,您编写的任何文本(无论是代码,字符串,还是密码)都可以进行反向设计和检索。有些语言更难,有些语言更容易。获取一个示例Java .class文件并“反编译”它,你将非常接近原始文件。

这意味着您可以从应用中检索密码。不是个好主意。不太安全。

您永远不应该以明文存储密码。你应该总是哈希它并加盐。引用维基百科

  

salt是随机数据,用作单向的附加输入   “哈希”密码或密码的功能。主要功能   盐是为了抵御字典攻击而不是列表   密码哈希和预先计算的彩虹表攻击。

实际上,如果您是开发人员,那么您应该让安全专业人员负责安全性。这就是为什么安全框架首先存在的原因。依靠他们。不要重新发明轮子,特别是安全轮。

管理不善

这是否意味着您必须重新编译并重新部署才能更改密码?

Bad UX

另一方面当然是UX。为什么要对密码进行硬编码?您不希望您的用户选择自己的密码吗?当你在这里时,你不想要多个用户吗?您也不希望用户使用他们已经拥有的帐户,例如Active Directory中有什么东西?

进一步阅读