我希望我的桌面应用程序能够.php
访问我网站上的页面。该.php
页面将执行服务器端任务,并将返回指示成功/失败等的 HTTP 响应。
如何确保只有我的桌面应用程序才能访问该.php
页面?如何防止机器人、爬虫和黑客访问该页面?
我应该在 URL 中有一个随机短语吗?例如:
http://www.website.com/s3g8k0d1q6/myphpfile.php
我希望我的桌面应用程序能够.php
访问我网站上的页面。该.php
页面将执行服务器端任务,并将返回指示成功/失败等的 HTTP 响应。
如何确保只有我的桌面应用程序才能访问该.php
页面?如何防止机器人、爬虫和黑客访问该页面?
我应该在 URL 中有一个随机短语吗?例如:
http://www.website.com/s3g8k0d1q6/myphpfile.php
一种简单的方法是进行基本的密码检查。假设您的意思是“命中” POST
,请将其放在 PHP 的顶部:
if($_POST["password"] !== 12345) { header("HTTP/1.0 404 Not Found");die(); }
这将返回您的通用 404,除非它是您的桌面应用程序发送正确的密码。
(请不要使用 12345
,这只是一个例子)
大多数访问 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,那么有人可能会嗅到密钥,但这取决于您的应用程序是否值得花时间破解。
您可以使用 robots.txt 文件:
User-agent: *
Disallow: myfile.php
当然,它不会阻止恶意机器人或忽略 robots.txt 文件的机器人,但可能会阻止搜索引擎爬虫等合法机器人。