我通过WCF公开Sql Server数据,以便在WP7应用程序上使用。现在我有一个选择,要么是使用主键处理数据,要么是使用同一个表的其他列。
我个人认为最好不要暴露PK,而不是手机不安全,而是因为互联网。但是,请告诉我。
感谢,
答案 0 :(得分:0)
我认为你提到的PK是int类型,暴露值是不安全的。
在这种情况下,我将添加GUID类型的备用键(SQL Server中的uniqueidentifier)。可以使用.Net代码中的System.Guid.NewGuid()
方法填充该字段,也可以使用SQL中的newid()
函数填充该字段。
这会使密钥无法预测。例如,如果某人嗅探您的WCF流量并看到值为4的PK,他们可以尝试接近值(2,3,5 ...)来访问其他记录。 GUID不是连续的,因此很难猜出其他关键值。
请注意,GUID占用的存储空间比int(或2x bigint)多4倍,因此如果这是一个大表,GUID方法可能会占用更多空间。
在这种情况下,您可能会重新考虑暴露密钥是否真的是一个安全问题;如果应用程序的设计是安全的,或者所有记录都是由任何人查看的,那么暴露PK值应该不会那么糟糕。
毕竟,如果您查看此页面的URL,您会注意到值8690786
,这很可能是问题的公开整数标识符。