0

我是这方面的新手,这可能是一个简单的问题。但我想验证 API 是否来自网站。

因此,我是一家拥有自己网站的公司的经销商。所有用户都通过我的网站在主要公司的网站上注册,这意味着用户名/密码与公司的网站相关联。现在,我的网站上有一些东西,我只想向注册用户展示。此外,我有 API 来检查任何用户的用户名和密码组合,作为回报,我在 (file_get_contents) 的帮助下得到类似于以下消息:

如果成功:

***<?xml version="1.0" ?> 
  <!DOCTYPE ValidateUser (View Source for full doctype...)> 
- <ValidateUser>
  <Customer>james</Customer> 
  <Result>Success</Result> 
  </ValidateUser>***

或者如果失败,则:

***<?xml version="1.0" ?> 
  <!DOCTYPE ValidateUser (View Source for full doctype...)> 
- <ValidateUser>
  <Customer>james</Customer> 
  <Result>Failed</Result> 
  <Reason>User/Password combination unknown</Reason> 
  </ValidateUser>***

情况就是这样。我正在考虑编写一个带有 if 语句的 php 代码,它可以检查或验证上述消息是否来自 API 请求,基于此我可以允许或拒绝用户访问我网站上的特定页面。

希望它对你有意义。提前致谢。

4

2 回答 2

0

看看PHP SimpleXML。使用它进行解析应该相当容易。

一些类似于以下的代码应该可以解决问题:

$result = file_get_contents('http://www.example.com/validate?username=john&pwd=mypwdhash');
$simpleXML = new SimpleXMLElement($result);

if ($simpleXML->ValidateUser[0]->Result == "Success"){
   // success
} else{
  // fail
}

或者,您可以只在 XML 字符串中搜索单词“success”。

附带说明:使用这种方法对用户进行身份验证并不那么安全,因为它涉及 GET 请求,其中您提到了用户名和密码哈希(我假设您确实使用密码哈希而不是明文密码,对吗?)。

于 2012-06-12T14:20:14.833 回答
0

您可能不想听到这个 - 但这种共享密码的方法确实不是相关第三方网站提供的一个很好的设置。这实质上意味着用户正在为其他站点输入密码给您(如果我没记错的话,是第三方)。如果您可以通过身份验证访问您身边的用户数据,他们可能应该为此使用 openAuth (http://www.oauth.net) 而不是共享密码...

我不一定说你应该告诉他们(因为它可能会让你付出代价),但我会考虑一下。如果他们的侧手指存在安全漏洞,则可能会指向您,因为您可以访问某些密码。

于 2012-06-12T14:53:54.943 回答