从javascript到php的安全请求?

时间:2018-07-16 03:37:41

标签: javascript php backend web-development-server

我在php中为收银员(供我个人使用)提供了此销售点界面。因此,您要做的就是选择饮料,然后选择每种饮料的数量,然后单击一个按钮,使master.js中的javascript将jquery ajax请求发送到processSale.php。问题是,任何人都可以向processSale.php发送请求。而且,如果我在该javascript函数中添加了“键”,则人们可以看到它,因为他们只需要查找文件即可。如何将这些对我的php文件的请求设为私有,以便只有我可以向他们发送请求?

3 个答案:

答案 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)环境。