【问题标题】:How to have app use a private .php webpage?如何让应用程序使用私有 .php 网页?
【发布时间】:2012-10-10 23:17:01
【问题描述】:

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

如何确保只有我的桌面应用程序才能访问.php 页面?如何防止机器人、爬虫和黑客访问该页面?

我应该在 URL 中添加一个随机短语吗?例如:

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

【问题讨论】:

  • 使用公共和私有加密 .... 桌面上的 Puck .. 服务器上的私有 .....
  • @Baba:你有这个参考吗?

标签: php security http httpwebrequest bots


【解决方案1】:

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

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

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

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

【讨论】:

  • 好的,我认为这需要 SSL,否则密码将在 POST 请求中以明文形式发送?
  • 这取决于您所说的安全性。您可以使用 SSL,但这不是必需的。
  • 但是如果不使用 SSL,那么 POST 请求将包含明文密码,不是吗?
  • 正确,它不会阻止专门的黑客。您的问题仅提及机器人/爬虫等,它们无法从您的应用中看到 POST。
  • @CJ7 您是否担心机器人或专门的黑客?
【解决方案2】:

大多数访问 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,那么有人可能会嗅出密钥,但这取决于您的应用程序是否值得花时间破解。

【讨论】:

    【解决方案3】:

    您可以使用 robots.txt 文件:

    User-agent: *
    Disallow: myfile.php
    

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

    【讨论】:

    • 抱歉下载投票,但这提供了问题所要求的零安全性。
    • @Mathew 澄清一下,它在发帖时并未要求安全。
    • 抱歉,您的回答没有错。它只是没有回答问题。
    猜你喜欢
    • 1970-01-01
    • 2012-03-09
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    相关资源
    最近更新 更多