Безопасность SQL-последовательностей / автоинкрементные целочисленные значения
Коллега однажды упомянул мне, что при разработке веб-приложений явное использование целого числа последовательности / автоинкремента (обычно первичного ключа) для уникальной идентификации значений в базе данных представляет собой угрозу безопасности, и что такие ключи часто используются как "суррогат" ключи " (например, для внутренней идентификации записей и связей между записями) наиболее безопасный способ идентификации ресурсов - использование первичного ключа домена.
Возьмите следующий пример.
create table category
(
category_key serial not null primary key,
name character varying(255) not null,
unique(name)
);
create table product
(
product_key serial not null primary key,
product_id character varying(8) not null,
name character varying(255) not null,
unique(product_id)
);
Чтобы получить доступ к категории, URL-адрес /category/(\d+)
с использованием category_key
основной ключ. Как это менее безопасно, чем URL /category/([^/]+)
с использованием name
уникальный ключ?
Единственное, о чем я могу думать, это то, что category_key
гораздо проще угадать (например, добавить один), и если вы не закодировали свой контроль доступа должным образом, это может позволить кому-то произвольно просматривать любую категорию в базе данных.
1 ответ
Я не думаю, что это испортит ваше приложение, все дело в угадывании.. Когда дело доходит до безопасности. для меня это больше о шифровании и проверке разрешений и многом другом.. В заключение, я не думаю, что есть связь между использованием автоинкремента и безопасностью.