如何让应用使用私人.php网页?

时间:2012-10-20 14:42:46

标签: php security http httpwebrequest bots

我希望自己的桌面应用能够点击我网站上的.php页面。 .php页面将执行服务器端任务,并将返回指示成功/失败等的HTTP响应。

如何确保只有我的桌面应用才能访问.php页面?如何防止机器人,抓取工具和黑客访问该页面?

我应该在网址中有一个随机短语吗?例如:

http://www.website.com/s3g8k0d1q6/myphpfile.php

3 个答案:

答案 0 :(得分:1)

一种简单的方法是进行基本的密码检查。假设“命中”是指POST,请将其放在PHP的顶部:

if($_POST["password"] !== 12345) { header("HTTP/1.0 404 Not Found");die(); }

这将返回您的通用404,除非您的桌面应用程序发送正确的密码。

Please don't use 12345,这只是一个例子)

答案 1 :(得分:0)

访问Web服务的大多数桌面应用程序都需要应用程序密钥。然后,该应用程序密钥用于向Web服务发出请求。每个应用程序在用户注册时都会获得自己随机生成的密钥,或者桌面应用程序可以在后台静默执行此过程。

如何对用户/桌面应用程序进行身份验证,以便提供应用程序密钥取决于您。它可以是电子邮件/密码对,也可以是只有桌面应用程序知道的密钥,或通过电子邮件发送给每个用户的密钥,允许他们激活桌面应用程序。

密钥存储在数据库中,您可以在表中添加一个额外的列,以指示密钥是否已被撤销。

您可以使用SSL来帮助保密应用程序密钥。

如何将密钥传递给服务并不重要。它可能是$ _GET,$ _POST或Http标头的一部分。 PHP支持从所有这些方法中提取详细信息的功能。

一旦你收到了$ _POST ['key']的请求,你就会检查数据库以查看该密钥是否存在,并且没有被撤销。如果找到,那么您将执行请求或提供其他响应。

对于通知PHP用户一定要防止SQL注入攻击。这是一个快速示例代码,但未经过测试。

<?php
if(!empty($_POST['key']))
{
   $con = mysql_connect('localhost','mathew','1234') or die("can't open db");
   mysql_select_db('my_db',$con);
   $key = mysql_real_escape_string($_POST['key']);
   $result = mysql_query("SELECT * FROM Keys WHERE Revoked = 0 AND Key = '$key'");
   if(!empty(mysql_fetch_array($result)))
   {
       // perform web service here
   }
}

这将是最简单的方法,并且如果使用SSL执行则提供基本安全性。如果您没有SSL,那么有人可能会嗅到密钥,但这取决于您的应用程序是值得花费时间进行攻击。

答案 2 :(得分:-1)

您可以使用robots.txt文件:

User-agent: *
Disallow: myfile.php

当然,它不会阻止恶意机器人或机器人忽略robots.txt文件,但搜索引擎爬虫等合法机器人可能会被劝阻。