一位同事曾向我提到,在开发Web应用程序时,明确使用序列/自动递增整数(通常是主键)来唯一标识数据库中的值是一种安全风险,并且因为经常使用此类密钥as"代理键" (例如,对于内部识别记录和记录之间的关系),最安全的识别资源的方法是用于域主键。
采用以下示例。
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)
);
要访问类别,使用/category/(\d+)
主键的网址为category_key
。与使用/category/([^/]+)
唯一键的网址name
相比,它的安全性如何?
我唯一能想到的是,特定category_key
更容易猜到(例如,添加一个),如果您还没有正确编码您的访问控制,这可能允许某人任意查看数据库中的任何类别。
答案 0 :(得分:0)
我认为它不会破坏你的应用程序,这完全是猜测...... 说到安全性。对我来说,它更多的是关于加密和权限检查等等。总之,我认为使用自动增量与安全性之间没有关系。