2011-10-23 114 views
0

所以我目前没有代码,但由于以下问题我还没有开始。安全地上传文件C#/ PHP

我想有一个网站(用PHP编写),允许用户上传文件,但我也想有一个在Windows桌面上运行的C#应用​​程序,并且可以自动上传文件。我的问题与安全有关。

首先,从PHP的角度来看,就是简单地用MD5或类似的东西对网站上的帐户进行哈希和腌制?

此外,我该如何安全地存储和保存我的C#应用​​程序中的本地用户的凭据?几乎像饼干,除了我会自己管理它。我正在寻找一个高水平的答案,以及我应该使用什么特定的工具(或者我应该在完全追求这个之前阅读的内容)。

预先感谢您的时间。 :)

+1

当使用证书进行处理时,md5哈希值不再足够,请查看Sha256或更高版本以获取强哈希值,还应该使用https处理连接,并要求证书使其更安全。至于在本地保存证书,您可以将其加密或散列到文件中。即使您要做所有这些事情,也绝不能保证您的凭据不会以某种方式受到损害。 – Joakim

+0

sha256不错的提示我会去看看。至于散列/加密证书到一个文件我将如何验证我的PHP网站?即当有人经常登录时,我将不得不自己散列它,但如果本地证书被散列,我会遇到问题。 – AnthonyHurst

+0

您不能在本地存储凭据并确保其安全。 任何本地操作都可以进行反向设计和复制。 特别是使用C#等语言,可以轻松地对其进行反编译(并且在很多情况下可以反混淆)。 我可以考虑一些选择,但它们的适用性很大程度上取决于您的项目的具体情况。 – Svarog

回答

1

要回答这两个问题...

首先,散列和与MD5盐析不再是100%安全的,因为人可以用彩虹表来快速破解散列。您可能想要查看产生较长散列的内容以防止彩虹表攻击。

如果您想在客户端安全地存储身份验证令牌(如“记住我”复选框),您可以在服务器中有一个表,每次用户访问php页面时都会存储随机字符串。为了使其更安全,您可以散列该PC的唯一值,例如网卡的MAC地址。

它的作用是什么?

1)当用户第一次从C#应用程序登录,您将创建一个存储用户ID,MAC地址的记录,并且在很长的随机字符串表。然后您将此随机字符串返回到C#应用程序以存储在本地文件中。

2)当c#应用程序再次访问网页时,它会传递到您的PHP应用程序,MAC地址和存储在那里的随机字符串。如果它匹配一条记录,那么我们知道c#app的用户标识。

3)PHP端应该重新生成另一个随机字符串,并将其发送回c#应用程序以覆盖现有本地存储的身份验证令牌。这将确保令牌更改很多,并且人们不能简单地制作存储令牌的文件的副本,并且能够访问服务器。

希望这已经够清楚了。

-1
  1. 盐渍sha256哈希将罚款。用没有存储在数据库中的东西来加盐。数据来自两个不同的来源将使得暴力更难。

  2. 它取决于C#应用程序。如果只有一个用户,则使用您的公钥通过SSH传输文件。如果出现问题,您可以随时撤销密钥。

+0

特定用户的盐是否存储在数据库中根本不会影响暴力强制。除非你建议所有用户都有一口盐,否则这是一个糟糕的主意。 – TheEvilPenguin

+0

那么,在存储到数据库中之前对密码进行腌制和哈希处理更像是一种嗅觉,而不是100%的安全性。这是为了防止人们随便读取密码。如果黑客足够认定,那么你就没有太多办法来阻止他们以这种或那种方式破解密码。 – iWantSimpleLife