Если сайты электронной коммерции используют скрытый идентификатор заказа - PullRequest
2 голосов
/ 14 декабря 2011

Я замечаю, что при предоставлении пользователю идентификатора заказа простой интернет-магазин не имеет простого целого числа.Это практика безопасности или разрешено большее количество заказов с более короткими длинами символов?

Если это практика безопасности, то каков наилучший способ создания такого идентификатора (учитывая, что база данных вероятна)использует целочисленную IDENTITY для первичного ключа таблицы заказов)?

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

В основном, пользователи не могут просматривать чужой заказ.

Если пользователю назначена корзина покупок / идентификатор заказа 1000, можно предположить, что до 999 и, возможно, после 1001.

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

Для публичной стороны простой способ скрыть идентификатор заказа состоит в назначении GUID записи. Тогда вместо доступа к порядку пользователей из первичного ключа вы получите доступ к нему через GUID.

1 голос
/ 14 декабря 2011

Вы все еще можете использовать целое число в качестве идентификатора, но иметь поле ref порядка (которое все еще может быть проиндексировано в базе данных), как вы описали. Я не думаю, что это проблема безопасности, я думаю, это может быть немного похоже на причину, по которой мой первый выставленный счет НЕ был номером 0001. Люди обычно не хотят рекламировать тот факт, что они только начали.

Сказав все это, я могу дать вам фрагмент кода для генерации, казалось бы, случайного буквенно-цифрового кода заказа произвольной длины, если хотите.

Вот код на C #: РЕДАКТИРОВАТЬ: Я добавил первую (ранее отсутствующую) строку кода!

    static System.Random random = new Random();
    int lengthOfOrderCode = 6; // Obviously put what you like here
    char[] keys = "ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890".ToCharArray(); // and here. Doesn't need to be the entire alphabet and numbers...
    var orderCode = GenerateOrderCode(keys, lengthOfOrderCode); 

    private static string GenerateOrderCode(char[] keys, int lengthOfOrderCode)
    {
        return Enumerable.Range(1, lengthOfOrderCode).Select(k => keys[random.Next(0, keys.Length - 1)]).Aggregate("", (a, b) => a + b);
    }
...