我在php中为收银员(供我个人使用)提供了此销售点界面。因此,您要做的就是选择饮料,然后选择每种饮料的数量,然后单击一个按钮,使master.js中的javascript将jquery ajax请求发送到processSale.php。问题是,任何人都可以向processSale.php发送请求。而且,如果我在该javascript函数中添加了“键”,则人们可以看到它,因为他们只需要查找文件即可。如何将这些对我的php文件的请求设为私有,以便只有我可以向他们发送请求?
答案 0 :(得分:2)
在客户端(master.js)与服务器(processSale.php)之间建立cookie会话将确保没有人能够向您的服务器提出请求,除非那里有一种高度先进的回旋方法。
https://www.w3schools.com/php/func_http_setcookie.asp这可以帮助您开始使用PHP中的cookie会话
答案 1 :(得分:1)
如何将这些对我的php文件的请求设为私有,以便只有我才能向其发送请求?
好吧,您真的不能缺少某种登录或验证请求的方式。
如果我在该javascript函数中添加“键”,则人们可以看到它,因为他们只需要查找文件即可。
诀窍在于,每个用户,每个会话的密钥都应该不同。这样,只有授权用户才能执行操作,并且他们只能代表自己应该访问的数据来执行这些操作。
我通常的处理方式...
当用户登录并且我对他们进行了身份验证和授权时,我将他们仅返回为其会话生成的密钥传递回去。我通过HTTPS执行此操作,因此希望只有接收它的客户端才能看到此密钥是什么。
然后,客户端进行API调用并对其进行签名。也就是说,客户端找出请求数据中的内容,例如:
POST /processSale.php
{
"items": [
{"sku": "012345", "name": "Root Beer"}
]
}
然后找出请求数据的相关部分,将它们与相关请求数据一起进行哈希处理(请参阅HMAC),并将哈希值与请求一起粘贴。
这里要注意的一件事是,密钥从未离开客户端。也就是说,我们使用了单向哈希,因此将来的请求实际上不必包含密钥。服务器知道发生了什么,因此可以重新哈希以验证知道密钥的客户端必须发出请求。服务器还知道没有人摆弄请求数据,因为如果这样做,散列将不同意。
这是一个非常广泛的话题,所以我现在将其保留。我建议阅读此签名的API请求方法和HMAC,以确保签名操作正确。
答案 2 :(得分:0)
您需要实际保护使用脚本的位置,因此没有人可以查找您的秘密。例如。通过使用所谓的Kiosk模式,available in Chrome和其他浏览器。
除了建议在每个请求的基础上使用临时机密之外,它们的工作原理类似于the usual CSRF tokens,但时间有限。给一个存储在某个地方的随机秘密字符串,您可以使用以下方法创建令牌:
$timeInFuture = time() + 600; // 10 minutes
$signedTime = sprintf('%s-%s', $timeInFuture, hash_hmac('sha256', $timeInFuture, SERVER_SECRET));
通过添加为隐藏字段来使用它:
<input type="hidden" name="token" value="<?=$signedTime?>" />
然后验证:
do {
if (empty($_POST['token'])) {
// token missing
break;
}
list ($timeValidUntil, $hmac) = explode('-', $_POST['token']);
if ($timeValidUntil < time()) {
// past the validity time
break;
}
if (!hash_equals(hash_hmac('sha256', $timeValidUntil, SERVER_SECRET), $hmac)) {
// signature invalid
break;
}
// Token valid, now can secure a purchase
} while (false);
除非您实际保护自己的位置,否则无论您使用这些令牌还是与cookie对齐,都仍然可以发送伪造的请求。没有物理安全性,就不可能有安全的销售点(POS)环境。