我正在处理与业务相关的程序,所以我需要知道系统日期是否正确 - 与远程服务器进行了比较。你如何做到这一点在.NET .NET winforms?如何检查系统日期是否正确? (以防止滥用)vb .NET
P.S:另外,有什么办法可以在系统时钟发生变化时引发一些事件来防止黑客?我不希望用户在登录帐户后更改本地日期。
在此先感谢。
我正在处理与业务相关的程序,所以我需要知道系统日期是否正确 - 与远程服务器进行了比较。你如何做到这一点在.NET .NET winforms?如何检查系统日期是否正确? (以防止滥用)vb .NET
P.S:另外,有什么办法可以在系统时钟发生变化时引发一些事件来防止黑客?我不希望用户在登录帐户后更改本地日期。
在此先感谢。
您需要使用外部服务器验证时钟,并在某个容差范围内接受该时钟。所有时钟在某种程度上都是错误的。通常服务器上的web服务就够了,但有很多免费的NTP-services。但是请注意,我需要5分钟才能绕过该操作,因此为了提高安全性,您需要使用SSL(HTTPS)(使man-in-the-middle attacks不可能)。然而
注:
如果您想知道用户何时更改时钟,只需设置一个线程以60秒的Thread.Sleep(60000)循环。然后检查60秒前的当前日期时间。从上次检查开始,它应该始终为60秒 -/+ 1秒。 (+/- 1秒,以补偿像应用延误定时器正在执行略微挂等)
我一起扔一个简单的例子:
编辑:对不起,第一样品是在C#。在VB.Net中重做它。
Imports System.Threading
Public Class Form1
Private TimeMonitorThread As Thread
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
TimeMonitorThread = New Thread(TimeMonitorThreadLoop)
TimeMonitorThread.Name = "TimeMonitorThread"
TimeMonitorThread.IsBackground = True
TimeMonitorThread.Start()
End Sub
Private Sub TimeMonitorThreadLoop()
Dim sleepSeconds As Integer = 60
Dim tolerance As Integer = 1
While (True)
Dim before As DateTime = DateTime.Now
Thread.Sleep(sleepSeconds * 1000)
Dim after As DateTime = DateTime.Now
If (Math.Abs(CInt(after.Subtract(before).TotalSeconds) - sleepSeconds) > tolerance) Then
' Time has changed!
End If
End While
End Sub
End Class
只是在理论上的步骤。
首先,在远程服务器中创建一个asp.net应用程序,该应用程序将提供当前日期时间。为确保增加安全性,请加密当前日期。
然后在您的PC中创建一个可以访问该远程服务器并根据需要获取当前时间的winform应用程序。
然后在你的winform应用程序中检索当前的日期时间。然后,只需比较远程服务器和winform应用程序中显示的当前时间。
您可以根据需要调整您的PC当前日期时间,以便与远程服务器时间同步。在商业应用的情况下,您可以通知用户或禁用应用程序功能,直到用户按照您的意愿执行某项操作为止。例如,打电话给您的服务部门或获取解锁密钥等。
在。提交Tedd汉森净VB代码,请务必在私人小组Form1_Load的改变行之一: -
TimeMonitorThread = New Thread(AddressOf TimeMonitorThreadLoop)
(addressof必须有,否则你将得到一个异常)
很好的解释,谢谢。我会这样做。 – EvanBlack 2011-03-29 01:06:13