如何限制对PHP文件的访问?
我想限制对服务器上PHP文件的访问。此PHP文件从HTTP GET请求中获取数据,并将其附加到文件中。简单。但是我不希望执行这个PHP文件,除非HTTP请求是从我开发的智能手机应用程序中生成的 我不想单独验证每个用户。我希望我的应用程序,并且只有我的应用程序,能够将请求发送到PHP文件。我不希望人们输入格式类似的请求(http://www.mydomain.com/check.php?string=blahblahblah)并具有相同的影响 我曾考虑过检查HTTP_USER_代理或其他变量,但我担心它们也很容易被欺骗。我可以在我寻找的应用程序中嵌入一个密钥,但该密钥也可能被泄露 下一步是让服务器向我发送一个挑战,我会相应地做出响应。或者我甚至可以研究PKI。但是,考虑到我并没有试图保护任何真正有价值的东西,只是为了防止轻微的破坏行为,那么做这件事的相对简单的方法是什么呢如何限制对PHP文件的访问?,php,http,Php,Http,我想限制对服务器上PHP文件的访问。此PHP文件从HTTP GET请求中获取数据,并将其附加到文件中。简单。但是我不希望执行这个PHP文件,除非HTTP请求是从我开发的智能手机应用程序中生成的 我不想单独验证每个用户。我希望我的应用程序,并且只有我的应用程序,能够将请求发送到PHP文件。我不希望人们输入格式类似的请求(http://www.mydomain.com/check.php?string=blahblahblah)并具有相同的影响 我曾考虑过检查HTTP_USER_代理或其他变量,但我
我是想在这里重新发明轮子吗?是否已经有一种简单且经验证的方法可以做到这一点?HTTP请求可以按发送方希望的任何方式逐字符构建。欺骗总是可能的。在你的应用程序和php文件中定义一个salt,然后将该salt与当前时间一起散列。这不太可能被欺骗
$hash = sha1(time() . 'bladieblasalt');
if($_GET['hash'] == sha1(time() . 'samehash'))
{
echo 'valid';
}
只需在PHP应用程序中添加授权(登录、密码、会话等和/或“API密钥”),然后让手机应用程序在发送所需请求之前先进行授权。你可能没有考虑这一点,因为如果你的脚本很简单,可能会给它增加一些混乱,但是几乎每一个Web系统都需要它,你最终也会面对它。
让您的手机应用程序通过HTTPS登录到PHP应用程序,以排除拦截。没有保证方法。您可以使用oauth身份验证。。。根据您使用的平台以及将应用程序部署到手机的方式,也许您可以将密钥编译到应用程序本身?任何东西都会被破解,没有100%的安全性。。。但尝试并不羞耻。:)
就我个人而言,我在移动应用程序中使用的是RESTful身份验证,定期登录/通过对令牌进行通信,直到过期。:) 首先,你需要在你的应用程序中实现ssl,其他不太了解ssl的人只需将手机连接到wifi上,然后用wireshark或cain和abel等嗅探应用程序与你的站点之间的流量。并获得url和传递的任何参数,无需反汇编任何内容 应用程序连接到您的站点,用户登录,无论是来宾还是成员,您的服务器都会为应用程序分配请求id,并且此密钥/令牌会随每个请求一起传递,并在服务器上的会话中进行验证 该令牌看起来像:
UNIQUE\u请求\u ID\u由\u服务器分配:APPsIP:APPsTIME
加密此字符串并将其作为$\u GET['token']
然后在服务器上解密字符串并将字符串分解成各个部分,然后对照数据库或会话检查请求id、ip和时间是否匹配ect,如果一切正常,则执行哪个操作
就像安全登录系统一样,为每个用户分配一个唯一的salt,并将其存储在用户请求id的旁边
底线是,让施虐者很难滥用这个系统。99%的人甚至不想玩小提琴,而另外1%的人想玩小提琴,ips被阻止。FWIW,这里是我能想到的最安全的方法,不会严重影响性能-本质上是RESTful(ish)方式,因为进一步升级需要在服务器上存储多个请求和连接状态信息:
- 应用程序和服务器有一个相同的盐字符串硬编码,每个后续版本的移动应用程序都是唯一的。此字符串必须保持私有
- 当用户在其设备上安装应用程序时,该应用程序会联系您的服务器,并通知其应用程序的版本以及设备的版本,您使用的任何移动平台的API都应允许您检索该应用程序
- 服务器为应用程序实例生成唯一密钥,该密钥发送回应用程序并存储在设备上,并将其与IMEI和安装版本一起存储在服务器端数据库中
- 在日常操作期间(即提出问题中概述的请求时),应用程序遵循以下步骤:
- 检索以下信息:
- 设备IMEI
- 应用程序密钥
- 应用程序版本
- 硬编码盐串
- 随机生成的附加盐字符串(当前时间戳的微秒导数对于合理的熵量总是好的)
- 将所有这些信息连接在一起,最好在它们之间使用硬编码填充,并生成结果字符串的散列
- 将以下信息与实际请求数据一起发送到服务器(可能在cookie中增加一点点安全性):
- 生成的散列
- 应用程序密钥
- 随机生成的字符串用作附加盐