Ссылка на статус заказа с конфиденциальными данными (без авторизации / входа) - PullRequest
0 голосов
/ 07 мая 2020

После каждого заказа в пользовательском интернет-магазине я отправляю ссылку на статус заказа для своих клиентов.

На данный момент я отправляю параметры Crypted :: (Laravel) в виде ссылки и не зарегистрирован пользователи могут проверить статус заказа. Трудно взломать, но один недостаток - длина ссылки. Это может быть что-то вроде этого:

https://mywebsite.com/order/status/eyJpdiI6InpkOXpGWkZvR3MrTWVTU2ZUZEJjaXc9PSIsInZhbHVlIjoiai9UN21VeWdObXUwd3VCaHplVGpQSzZFL0pyeGl5Zzc1UGcyRTFpVHdaMWJxNE5Qb2tNaGtkdEt5NlRIRFlwVUoxSDcvbFlRRXZnLzFCSU5jTGtPUHZNMXMxTmR2K3NIckp4c3cxTFhBNC91WnZ5RkpIckxMY1F0ajJiQWdlNHQzMXhJU29rS05FdE5lV3BMVkhyVlV5OEIyK2VJNlRSeENyQ3ZDcnNCVy80OUlXa0lHeHdOMzRrSEZOMmQ2ZDBzZ3hHNDNhdVl3bWJ5YjdQdjRwU0J1ZlVTdURmVXBadjJOSXBWNVp1K2lPNW5ZVXB4cDZ2SW9MVks5bGF2eGJqOHk4NHM5WU5vRytNYkQ5WkY2QVhiN0E9PSIsIm1hYyI6IjdiZTk0OTczN2E5NWUzYWFmMzRhN2EyNzE4NWE1ZTZmYTg0MzQwZTg5ODZlZTk2ZjUyYjJlZjA1MzM0MjVjOTEifQ==

Довольно длинный URL. Я думаю, что мне делать с этим. Сохранение случайного UID символа с каждым заказом и использование этого UID в качестве ссылки на статус заказа будет лучшим вариантом? Как насчет безопасности этой ссылки? Следует ли мне зашифровать параметры, как всегда, и UID может быть сделан из md5 этой крипты, или это не обязательно, и любой случайной строки длины X будет достаточно?

Что насчет чего-то вроде этого?

public function order(Request $request)
{
    $validatedData = $request->validate([
        'card_value' => 'required|integer|max:500|min:50',
        'first_name' => 'required',
        'last_name' => 'required',
        'email' => 'required|email',
        'phone' => 'required',
    ]);

    if($request->get('finalize')) {
        $order = VoucherOrder::create([
            'value' => $request->get('card_value'),
            'price' => $request->get('card_value'),
            'first_name' => $request->get('first_name'),
            'last_name' => $request->get('last_name'),
            'email' => $request->get('email'),
            'phone' => $request->get('phone'),
        ]);

        $parameters =[
            'order_id' => $order->id,
            'date' => Carbon::now(),
            'type' => 'voucher_order',
        ];

        $order->uid = md5(Crypt::encrypt($parameters));

        $order->save();

        SendVoucherOrderConfirmation::dispatch($order)->onQueue('high');
    }
}

Я ошибаюсь или короче md5 из Crypt :: будет на том же уровне, что и любая случайная строка из 32 символов?

1 Ответ

0 голосов
/ 07 мая 2020

Есть два случая.

В идеале ваши клиенты должны иметь учетную запись на вашей странице. Тогда у каждого заказа есть идентификатор в базе данных, и вы можете отправить ссылку, подобную этой: https://mywebsite.com/order/status/<orderID>. Когда клиент нажимает на ссылку, вам также необходимо проверить, принадлежит ли заказ пользователю или нет. Для этого вам нужно сохранить поле user_id с порядком в базе данных.

Немного лучше, если вы используете уникальный ha sh - возможно, длиной 8-16 символов вместо параметра OrderID в ссылке , поэтому клиенты и другие компании не узнают о популярности вашего веб-сайта, зная, сколько заказов вы сделали на данный момент.

Другой случай - когда вы позволяете пользователям без учетной записи покупать. Этот случай также не является полностью безнадежным, потому что вы отправляете им электронное письмо об их заказе. Для этого вам необходимо подтвердить их адрес электронной почты, отправив им письмо с подтверждением, а затем вы можете создать пользователя в своей базе данных для этого электронного письма, а затем продолжить с тем же решением, указанным выше.

Вы также можете пропустить электронное письмо часть проверки, но проблема заключается в том, что если пользователь пропустил символ, давая вам адрес электронной почты, то электронное письмо не будет go нигде, или, в худшем случае, его получит кто-то другой.

Но как только вы убедитесь, что у вас есть правильный адрес электронной почты, вы можете создать пользователя в своей базе данных и прикрепить проверки прав доступа к конечной точке, которые вы отправляете пользователю в виде ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...