davidpeach/laravel-hmac-validation-rule

用于验证Hmac签名的规则类

1.0.1 2021-09-14 18:28 UTC

This package is auto-updated.

Last update: 2024-09-15 18:09:25 UTC


README

一个用于检查基于您的请求键/值对的任何Hmac哈希的Laravel 规则对象

安装

composer require davidpeach/laravel-hmac-validation-rule:^1.0

原因

有时您可能希望有额外的保证,即到达预期目的地的数据是发送的确切数据。

我们可以通过使用只有客户端和目的地才知道的秘密密钥(一串随机字符)来“签名”数据来实现这一点。

客户端对数据进行签名,并将其与创建的数据哈希一起发送到目的地。然后目的地在收到请求后,将使用相同的秘密密钥对数据进行哈希处理,并检查其数据哈希是否完全相同。如果不同,您可以忽略并返回错误状态。

示例用法

对于这个例子,假设您正在构建一个端点,该端点将接受一个电子邮件和一个您需要确保未被篡改的名字。

以下是步骤

  1. 作为API设计者,决定您想要从数据中构建哈希的部分,以及它们的顺序。
    1. 对于这个例子,让我们假设我们想要使用电子邮件和名字字段来构建哈希。
    2. 在哈希时,字段应该保持相同的顺序,因为顺序将影响最终的哈希结果。
    3. 我可能在不久的将来添加一个配置选项,根据键的字母顺序对字段进行排序。
  2. 在您的请求验证中,像以下示例那样使用Hmac规则对象
use DavidPeach\LaravelHmacValidatorRule\Rules\Hmac;

[...]

public function store(\Illuminate\Http\Request $request)
{
    $request->validate([
        'email' => ['required', 'email'],
        'name' => ['required'],
        'hmac' => new Hmac($request->only(['email', 'name'])),
    ]);
}
  1. 定义.env变量HMAC_VALIDATION_SECRET为您的共享秘密。这将与客户端用于哈希所需字段的相同秘密。

  2. 客户端发送请求,并附带使用共享秘密计算出的hmac哈希

#########################
# Example hashing in PHP
#########################

# The data to hash and send.
$dataToSend = [
    'email' => 'test@example.com',
    'name'  => 'David Peach',
];

# Encode data to a JSON string.
$jsonEncodedDataString = json_encode($dataToSend);

# Calculate the HMAC hash (sha256 only at the moment)
# all the other hash_hmac algorithms will be available soon.
$hmacHash = hash_hmac('sha256', $jsonEncodedDataString, 'YOUR_SHARED_SECRET');

# Add the calculated HMAC hash on to the data to send.
$dataToSend['hmac'] = $hmacHash;

# Send the request to the endpoint.

向您的端点发送数据的客户端应使用与您传递给Hmac规则对象的顺序相同的顺序对数据进行json编码。然后,他们应该计算该json字符串的Hmac哈希,并将其与请求一起传递。在这个例子中,它作为键hmac,但它可以是任何键)。目前只支持sha256算法,但很快将可配置。