【问题标题】:How to have a secure time which is not using the local system time in C#如何在 C# 中获得不使用本地系统时间的安全时间
【发布时间】:2014-11-02 07:23:13
【问题描述】:

我正在使用 C# 和 SQL 开发一个 Windows 应用程序,我想将一些特定事件的时间存储在数据库中,我尝试使用 C# Datetime 类但是当我更改我的 Windows 本地时间时它没有给出我是真正的日期,然后我想也许SQL 有它自己的日期系统,我搜索但没有任何结果,那么拥有安全时间系统的最佳方法是什么?哪些用户不能轻易操纵存储在数据库中的时间?

【问题讨论】:

  • 您的数据库是在单独的服务器上还是与应用程序在同一台机器上?
  • 你所说的“安全”是什么意思?
  • 它只是在机器上
  • 所有机器都离线
  • 我真的不明白反对票!

标签: c# sql .net time


【解决方案1】:

通常用户在没有管理员权限的情况下无法更改系统时间。如果您的代码在用户是管理员的不受信任的机器上运行,那么您需要另一个时间来源。 (诚​​然,您的整个程序可能会受到影响,但这是另一个话题)。

您可以使用described here查询MSSQL的当前时间

SELECT CURRENT_TIMESTAMP
GO
SELECT {fn NOW()}
GO
SELECT GETDATE()
GO

另一种方法是查询 Internet 上其他地方的 NTP 服务器。这需要网络编程。有这个SO question about it here

【讨论】:

  • 我可以为我的整个程序做些什么?
  • 真正的答案是你无能为力。这是任何操作系统中用户帐户和权限的重点。用户可以弄乱你的二进制文件,打开和修改它们。如果他们尝试这样做,有多种方法可以让他们的生活更加艰难。我认为您现在不必为此费心,因为它需要相当先进的黑客技能。这真的取决于你想防御谁。
【解决方案2】:

如果您不信任您的工作站或服务器时间,您可以从 NTP 服务器获取时间,如果该时间不可用,仍会使用本地时钟。可以在此处找到如何从 NTP 服务器获取当前时间的简短示例https://stackoverflow.com/a/12150289/2360972

【讨论】:

    【解决方案3】:

    我实际上很晚才得到这个答案。 我也为这个答案做了很多搜索,最后我找到了最好的解决方案。

    UTC 是在应用程序中存储数据时间的标准格式。

    What is UTC?
    

    UTC 或协调世界时是标准国际时间,所有时区都表示为偏移量。 UTC 不会针对夏令时进行调整。要根据 UTC 计算本地时间,只需添加时区偏移量,然后在夏令时生效时再添加一个小时。

    请参考此链接 参考此链接后,您的所有疑问都会清楚: Click To refer

    UTC 时间将始终采用服务器日期时间,不会采用您的系统日期时间。 此外,如果您的应用程序在不同的国家/地区运行,那么消除 Time 之间冲突的唯一方法是使用UTC

    这是时间相关问题的非常好的示例: Click Here

    【讨论】:

    • @user3786134 我知道我来晚了 但是只是想和你分享这个问题
    猜你喜欢
    • 2011-01-20
    • 2014-09-10
    • 2013-09-13
    • 2013-05-11
    • 1970-01-01
    • 2019-03-20
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多