2012-09-27 23 views
2

我有一个包含身份验证系统(登录&密码)的应用程序(用Delphi编写)。身份验证系统 - 返回每次都必须更改的信息

这个系统是在PHP中,并且应用程序从PHP获得结果使用HTTP GET方法。 如果登录名和密码正确,系统返回'OK',如果不正确则返回'NO'。

就像这个...

procedure Check; 
var 
x: string; 
begin 
x:=Get('www.mywebsite.com/auth.php?user=xxxxxx&pass=zzzzzz'); 
if x='OK' then 
    UnlockFeatures 
else 
    MessageBox(0,'You're not VIP','Error',0); 
end; 

那么,它做工精细,但它是很容易规避这个系统,嗅探器,包编辑器或代理。

因此,我希望获得一些每次都会更改的信息(可能是PHP),而这可能会通过我的应用程序获取相同的信息。

我该怎么办?

我不需要代码。只是提示,建议,请...

谢谢...

+0

我同意@jeroen关于使用post方法和https。另外,您可以使用加密和时间戳。首先,从服务器请求时间戳。服务器回复加密的时间戳。客户端解密时间戳并将加密的用户名pwd和时间戳发送到服务器。服务器检查时间戳。时间戳仅在一定时间内有效(几分钟)。所以,你可以避免重播攻击。如果有人试图重新发送请求,它将会过期。如果一切正常,那么服务器发回加密的'ok'信息。 – Hendra

+0

尝试去找一些OpenID或OAuth实现。当你处理安全问题时 - 任何你无法发现的小错误都可能毁掉你的所有框架。有一些相对简单的OpenID v.1,他们说,超出了实用性,但仍然或多或少是标准的OpenID v.2和OAuth v.2。他们已经解决了这些问题,只是实施它们。 –

+0

谢谢你们!你的提示肯定会帮助我很多。 – paulohr

回答

1

一般来说,我建议你不要试图智取每个人,发明全新的自行车 - 你会失败99%失败,一些愚蠢的错误使你的方法完全不安全。 DVD加密或Win95安全性有很多优先级。您最好尝试一些经过行业认可的机制,这些机制多年来一直在进行安全性测试,应该为Delphi和PHP提供现成的实现。很少人

  • TLS(https://开头协议)http://en.wikipedia.org/wiki/Transport_Layer_Security - 这将不提供任何免受攻击MITM,但它的声音正是你问,并需要尽可能少的变化。
  • 您可以通过integrated windows authentication尝试实施SSO如果你的服务器将支持
  • 您可以尝试建立OpenIDOAuth环境。通常他们的v.1会比v.2更简单
  • 您可能试图摆脱HTTP并使用XMPP/Jabber身份验证 - 它们严肃对待安全问题并存在PHP和Delphi库。虽然它不应该比仅仅使用TLS更安全,但你可能希望愚蠢的攻击者不会为非HTTP协议做好准备(Facebook之外没有互联网等)。
  • 您可以使用类似蓝牙的方法一次(当客户端和服务器都受到控制时)进行特殊连接(“握手”),以便交换和存储特殊的“令牌”。这是一个通用的特性,使用“受控环境”进行第一次连接,并使用一些令牌在后续连接中使用通用challenge/response特征来证明“我们以前遇到过”。这些令牌应该对每个客户端 - 用户 - 服务器组合都是唯一的!如果您制作一个服务器全局客户端 - 共享令牌集 - 它们只需从一个客户端轻松复制到另一个客户端,而不再需要更多的安全性。
    • 那些可能是一些不是最微不足道的RNG的系数。构建为服务器并由客户端和服务器保存。然后,RNG种子和客户端的服务器“挑战”应该以适当的随机值进行响应,推测他知道系数。
    • 那些可能有些asymmetric crypto,其中令牌是一些随机的“消息”,则服务器发送客户端encruyption密钥和预期由他们加密正确的消息,或令牌是密码和服务器生成随机文本并希望正确的加密数字签名能够被传回。例如,您可以在Torry.net找到加密库。 Lockbox3和Spring4Delphi是德尔福实施一些加密标准的最经过测试和注意的加密库之一。

考虑你的优先事项,并做出选择。 您是否可以稍后在一个键盘上切换所有身份验证层,完全不考虑与未更新的客户端的向后兼容性,然后您可以选择最简单的一个,只在需要时进行增强。如果你的用户在升级时懒惰,那么你最好从初学者中选择最安全的方法,因为你以后没有办法禁用不安全的实现。

+0

哇!如此多的选择,赫......我会为我选择最好的选择,谢谢! – paulohr

2

我不熟悉德尔福(looooooong很久以前......),但至于PHP和有关安全的问题:

  • 我会用post代替get(和https如果可能的话)
  • 如果你可以看到用Delphi PHP会话,你可以添加一个会话变量和随机数并补充说,作为一个隐藏的表单字段,发送并根据会话变量进行检查。
+0

我已经使用https ...我会检查使用POST而不是GET的可能性,谢谢你的提示。 – paulohr