返回首页

介绍
我来的概念,这在观看电影中的白帽子黑客写了他所谓的1 quot虎胆龙威4.0;变异安全algorithmquot;我认为这可能是有用的,有一个系统的变化(变异)的密码,如果登录失败足够的时间,它可能会出现安全risk.nbsp;
此登录系统是不喜​​欢你的常规系统。经典的登录系统依靠一个定义的用户名和密码组合,以允许用户访问私人信息。很多人不经常使用足够强大的密码时,他们注册的一部分,一个社区网站,甚至当他们成立了自己的网上银行系统登录信息。
这些密码通常是生日或名字,这意味着注册一样的东西。这是其中的安全风险的用武之地。
一个可行的情况下,将一名女子签署了Facebook和设置她作为女儿的全名密码的情况。 可感觉"mischievousquot的; Facebook上的朋友,她可能已经猜到她的密码与她的女儿做的东西,并尝试在猜测她的登录详细信息。
在这种情况下,一个经典的登录系统,将允许的数量,在此期间,quot; attackerquot最终可能 猜测的权利和获得无限的猜测。
此登录系统,针对这种情况,注册用户提供了更多的安全。背景
该系统是在Visual Basic.NET编写,并使用SQL Server数据库中存储的用户信息。大多数用户数据存储为纯文本,与用户的密码使用SHA1加密的异常。
在开发过程中面临的挑战是围绕用户的密码以及跟踪登录尝试通过使用会话变量被计算每次尝试加密的小问题。这些问题是纯粹的概念和性质相对迅速地得到解决。它如何工作
新用户注册后,将发送一封电子邮件,其中会包含对他/她的帐户的详细信息。这些细节,包括他们的用户ID,用户名和密码。
要登录,用户将必须输入他们的用户ID,首先要确认他们确实有在系统上帐户。一旦用户ID进行验证,他们将被要求提供用户名和密码,他们输入的用户ID相关联。
哪里有记录不少于3登录尝试,为本届会议的登录哈希和盐的登录表单的密码字段输入值,并选择用户ID,用户名和密码值是创纪录相同的用户输入。如果选择不返回从数据库中单列,是无效的登录企图获取用户的会话计数。
如果有3计算的登录尝试,该帐户是标记为锁定的时间,因为它是由用户恢复之前,将不会被包括在未来的登录尝试的选择。
此外,36字符帐户被锁定后产生长期价值。然后将这个值散列和腌制和storednbsp;数据库作为新的帐户密码。login.aspx.vbnbsp;

Imports System.Data

Imports System.Data.SqlClient



Public Class Login

    Inherits System.Web.UI.Page



    Private connstr As String = "Data Source=.\SQLEXPRESS; Initial Catalog=test; Integrated Security=True;"

    Private conn As SqlConnection = New SqlConnection(connstr)



    Public NewPass As String = Nothing

    Public HashedPass As String = Nothing

    Public UserId As Integer = Nothing



    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        If Not IsPostBack Then

            pnlLoginForm.Visible = False

            Session("LoginAttempt") = 0

        End If



        If Session("LoginAttempt") = 2 Then

            ' This account may be vulnerable, generate a random string for the new password and lock the account

            Dim s As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

            Dim r As New Random

            Dim sb As New StringBuilder

            Dim idx As Integer = Nothing

            For i As Integer = 1 To 8

                idx = r.Next(0, 61)

                NewPass += sb.Append(s.Substring(idx, 1)).ToString

            Next

            HashedPass = Crypt.Compute(NewPass, "SHA512", Nothing)

            Dim sql As String = "UPDATE Users SET Password = @Pass, LockedYN = @Lock"



            Dim cmd As New SqlCommand(sql, conn)

            cmd.Parameters.AddWithValue("@Pass", NewPass)

            cmd.Parameters.AddWithValue("@Lock", "Yes")



            conn.Open()

            cmd.ExecuteNonQuery()

            conn.Close()

        End If

    End Sub



	Private Sub btnVerifyID_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnVerifyID.Click

		If txtUserId.Text IsNot Nothing Then

			Dim UserData As New DataSet

			Dim UserAdapter As New SqlDataAdapter

			UserAdapter.SelectCommand = New SqlCommand("SELECT * FROM Users " & _

													   "WHERE UserId = @ID", conn)

			UserAdapter.SelectCommand.Parameters.AddWithValue("@ID", txtUserId.Text)

			UserAdapter.Fill(UserData)

			If UserData.Tables(0).Rows.Count <> 1 Then

				lblError.Text = "Specified User ID does not exist."

				lblError.ForeColor = Drawing.Color.Red

			Else

				If UserData.Tables(0).Rows(0)(4).ToString = "Yes" Then

					lblError.Text = "The account you tried to log into has been locked to prevent possible unauthorized access. " & _

					"If this is your account, please check your email for instructions to unlock it."

					lblError.ForeColor = Drawing.Color.Red

				Else

					UserId = txtUserId.Text

					pnlLoginForm.Visible = True

				End If

			End If

		End If

	End Sub



	Private Sub btnLogin_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnLogin.Click

		If txtUser.Text IsNot Nothing And txtPass.Text IsNot Nothing Then

			If Session("LoginAttempt") <> 2 Then

				Dim pass As String = Crypt.Compute(txtPass.Text, "SHA512", Encoding.UTF8.GetBytes(Crypt.SaltValue))



				Dim UserData As New DataSet

				Dim UserAdapter As New SqlDataAdapter

				UserAdapter.SelectCommand = _

					New SqlCommand("SELECT * FROM Users " & _

						"WHERE Username = @User AND Password = @Pass " & _



						"AND LockedYN = @Lock", conn)

				UserAdapter.SelectCommand.Parameters.AddWithValue("@User", txtUser.Text)

				UserAdapter.SelectCommand.Parameters.AddWithValue("@Pass", pass)

				UserAdapter.SelectCommand.Parameters.AddWithValue("@Lock", "No")

				UserAdapter.Fill(UserData)



				If UserData.Tables(0).Rows.Count <> 1 Then

					lblError.Text = "Invalid username or password."

					lblError.ForeColor = Drawing.Color.Red

					Session("LoginAttempt") = CInt(Session("LoginAttempt")) + 1

				Else

					Session("LoggedIn") = True

					Response.Redirect("Home.aspx")

				End If

			Else

				lblError.Text = "The account you tried to log into is now locked due to excessive failed login attempts. " & _

					"If this is your account, please check your email for instructions to unlock it."

				lblError.ForeColor = Drawing.Color.Red

			End If

		Else

			lblError.Text = "Please enter a username and password."

			lblError.ForeColor = Drawing.Color.Red

		End If

	End Sub

End Class 
这释放containsnbsp;
本新闻稿中包含的基本安全quot; measuresquot;由于空闲时间的挑战,我一直无法将代码添加到处理电子邮件yet.nbsp,;
目前包括:
函数来处理的SHA1加密的用户密码一般会话管理,不断跟踪登录尝试测试时使用裸机的用户界面。尚未在此version.nbsp清理;

回答

评论会员:游客 时间:2012/02/07
标记Nischalke:普遍较差的执行和安全方面的考虑很少了解
ortund
评论会员:游客 时间:2012/02/07
你要挂我,因为我的工作,表明缺乏了解传下来的判断,而是你怎么样帮助人们明白了吗?这是我只是一个想法。当然,它会得到更好的配合越来越默契,但只要像你这样的人,像我这样的人不理解的抱怨,怎么能发展什么?做有用的东西,写一个基本的网络安全,而不是在脸上掴人的东西,或做的事情错误时,他们开始了前奏。甚至不知道为什么我用这个网站的困扰...在我看来,它只是刺卡住了谁认为他们是上帝的恩赐创作。这里是为什么从来没有人有什么不同了。这是为什么编程已经成为实际的编程知识,并了解如何使用预建库和API。主席先生,你真棒它不再是程序员的原因。因为没有人可以尝试新事物了,因为你踩住它打破惯例。我很惭愧自己开发的,因为这么多的"程序员"像你这样的人,谁破坏,在这个世界上的任何和所有的创造力。'1112月20日修改!为耻辱
马克Nischalke
评论会员:游客 时间:2012/02/07
?ortund写道:"你要挂我,因为我的工作表明缺乏了解通过编写和张贴的文章,它是假设和隐含的作者有知识,技能和经验,他们提出的有关问题。文章是不是一个作家反弹的想法,同时学习的地方。如果你想了解,这是这个网站是所有关于,然后在论坛中问的问题,那么当你有爱茉莉彻底了解的问题,提交了一篇文章。无可奉告
geo_m:嗨,

我读的文章(不是代码),虽然我一般喜欢这个主意,也有一些相关的整体安全解决方案的问题。请,以建设性的批评,可能可以改善您的网站{S0的}安全

1 - 永远存储在服务器上的密码,我知道,你加密,但它可以被解密并读取服务器上 - 对你不好。更好的是只存储盐腌哈希和盐。即使有人偷了你的数据库中,他将不能够读取密码(因为用户在多个地方使用一个密码,它仍然是有价值的信息,甚至当你的网站是下跌)

2 - 永远的密码通过电子邮件发送它像它张贴在黑板上时,每个人都可以阅读。

3 - 现在还不清楚对我来说,用户将如何从系统中检索它的新密码
评论会员:游客 时间:2012/02/07
ortund:嗨地理,分指针感谢。我想如果我能解决这些问题,当我有时间,我会更新的文章,以反映:1-下载中,你会发现名为Crypt.vb文件。除了提供一般的散列,这个文件也没有盐。我看了你的评论后,我意识到我应该已经到文章。2-我曾想过的标准功能,重新设置一个密码(忘记密码),但我不知道如何设置,高达
geo_m
评论会员:游客 时间:2012/02/07
1-我明白了,但你所有的密码盐具有相同的salt值(VB代码对我来说是有点尴尬,所以纠正我时,我错了,但我看到盐没有列在用户表)。然后,字典攻击,而不是从列表常见的密码(密码)的SHA1,我需要做的SHA1(密码fixedsalt)-这并不增加攻击的复杂性,多更好的是添加盐列和每一个与它自己的随机盐盐密码。这是简单的一步,但它增加的攻击复杂得多(因为我可以不预先计算已知的弱口令和甚至当两个用户的密码将相同的哈希表,我可以不采取任何从这个优势)。2-哦,这是始终棘手-你需要做一些安全隐患存在。当用户点击"忘记密码",我想送他一个独特的临时性,一次性使用,网址到一个页面,在那里他可以设置新密码的电子邮件。一旦链接时,它不能被重用。它也是有效的,只有一段时间(尽可能短,但我们需要考虑的电子邮件传送延迟)
ortund
评论会员:游客 时间:2012/02/07
哦,我现在看到的,我希望每次使用一个随机的盐,但朋友指出,如果盐是随机的,哈希会有所不同,每次的密码是加密的,所以你永远无法再次登录。生成并存储为每一个注册随机盐的这个想法听起来真的很棒,我{S0的}我也很喜欢使用一个临时的,一次性使用的网址,密码恢复的想法,但我不知道如何产生的,虽然一个想法,只是我的头突然我打字。geo_m,期待您的建议,以及在下一个版本中的佳作基于改进
geo_m
评论会员:游客 时间:2012/02/07
OK伟大imgsrc=http://www.orcode.com/img/ico/smiley_biggrin.gif
ortund
评论会员:游客 时间:2012/02/07
geo_m我现在有一些空闲时间,我正要向您登录系统提出的变化做一些工作,但我现在我有点不知所措。此登录系统的想法,价值观改变,因为他们需要。因此,这里有我的问题:1。假设我只是允许用户重置其密码,如果他们忘记了它,如何与"变异"的理念,这合适吗?2。如何使您的建议修改我的系统不同/更好的系统目前向公众提供任何登录
geo_m
评论会员:游客 时间:2012/02/07
喜再次{S0的}它只是一堆的想法,所以裸与我{S0的}为变异的想法-检查一次性密码-{A}虽然它有其自身的问题,它类似于你想达到什么目的,如果我的权利。它不仅改变了"攻击"的时间,但是从字面上每次。广告-这将是困难的,如果不是不可能的,除非你会发现一些真正在数学新(如维斯特,沙米尔,阿德勒曼做)。我个人只能提供现有成熟的认证方案的实施。开发一个真正的新的认证。计划需要较强的数学背景,为公众验证{S0的}和大量的时间就个人而言,我认为,在autentication领域最大的问题是不开发新的权威性。计划,但平衡安全性和方便性。我们有不错的算法,在数学方面,但对方只是强迫用户使用真正的强密码,导致在显示器上的黄色贴纸-避免在所有{S0的}安全对于常见的业务相关的安全,我会说,UID/密码OTP是非常安全的解决方案:-当您使用PWD转移反应的挑战,你应该避免人中间和密码重放攻击。-当你不转移密码或它在导线的无盐的哈希,你会避免监听器只是读取它重用它-仅存储在数据库中的盐渍哈希会增加数据库的情况下被窃取或滥用(既不是数据库管理员能够读取密码)的安全。-应稍微限制的OTP社会攻击的可能性(虽然不完全,但它避免了常见的"我会告诉你我的密码"或"黄贴纸"的问题,因为你需要更多的东西比只知道密码){BR}密码自动复位的想法,我是有点问题,因为那样的话,你需要某种机制来向用户提供新的密码。作为攻击者,我会做一些虚假的登录尝试,黑客认证本身,而不是我想尝试打破这种密码传递机制-追赶的电子邮件,短信或任何其他的消息,其中包含新密码。它通常更容易{S0的}
geo_m:我只是发现了一些免费的电子图书,可以为你有趣[{A2的}
检查第59页及以下