身份验证系统 - 返回每次都必须更改的信息

时间:2012-09-27 17:09:25

标签: php delphi authentication password-protection

我有一个包含身份验证系统(登录名和密码)的应用程序(在Delphi中制作)。

此系统使用PHP,应用程序使用HTTP GET 方法从PHP获取结果。 如果登录和密码正确,系统将返回“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中),并且可以通过我的应用程序获得相同的信息。

我该怎么办?

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

...谢谢

2 个答案:

答案 0 :(得分:2)

我不熟悉Delphi(looooooong很久以前......),但就php和安全性而言:

  • 我会使用post代替get(如果可能,还会使用https
  • 如果您可以使用Delphi读取php会话,则可以添加带有随机数的会话变量,并将其添加为隐藏表单字段,将其发送并根据会话变量进行检查。

答案 1 :(得分:2)

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

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

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