在URL中向用户显示Key值是否存在安全问题?

Egg*_*olk 3 java security google-app-engine bigtable primary-key

我使用数据存储区中实体的Key值作为URL中用于提取记录的唯一标识符:

http://mysite.appspot.com/myaction/1x7s3fgdlbnRlcklkcicLAbcXc2VyQWNjb3VudCIFYW9uZ
Run Code Online (Sandbox Code Playgroud)

这不是一个非常有吸引力的解决方案,它也不是SEO友好的,但它是我发现在App Engine/Java中唯一识别实体的最简单方法.

不过,我主要担心的是,是否存在与显示实体的唯一Key值相关的安全问题?

Nic*_*son 5

编码密钥包含您的应用程序ID,名称空间(如果有),实体类型名称以及密钥名称或ID.这里有两个可能的问题:信息的披露(可能没有问题),以及您接受编码密钥的事实.如果您没有检查传入的密钥指定的实体是否属于正确的类型,并且用户应该有权访问它,那么他们可以传入自己的密钥以使您披露不应该泄露的信息.

但是,几乎普遍地,您已经知道要获取的实体的类型名称,因此更好的想法是仅使用密钥的密钥名称或ID,并根据需要构造完整密钥.这也使得更清晰的URL.