Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 地址栏中可见的用户ID_Security_Url_Web - Fatal编程技术网

Security 地址栏中可见的用户ID

Security 地址栏中可见的用户ID,security,url,web,Security,Url,Web,目前,为了在某些视图上向服务器传递用户id,我使用原始用户id http://example.com/page/12345 //12345 Being the users id 虽然暴露这些数据在我的特定应用程序中没有真正的安全风险,但我还是忍不住觉得有点脏。正确的解决方案是什么?我是否应该掩饰这些数据 也许提出我的问题的更好方法是问标准方法是什么。如果不存在安全风险,应用程序在普通视图中使用用户id是否常见?如果是安全风险,如何处理?我只是在这里寻找一个方向正确的点。这本身并没有什么问题。很

目前,为了在某些视图上向服务器传递用户id,我使用原始用户id

http://example.com/page/12345 //12345 Being the users id
虽然暴露这些数据在我的特定应用程序中没有真正的安全风险,但我还是忍不住觉得有点脏。正确的解决方案是什么?我是否应该掩饰这些数据


也许提出我的问题的更好方法是问标准方法是什么。如果不存在安全风险,应用程序在普通视图中使用用户id是否常见?如果是安全风险,如何处理?我只是在这里寻找一个方向正确的点。

这本身并没有什么问题。很多网站都这样做。例如,可以使用以下URL形式枚举堆栈溢出用户:

http://stackoverflow.com/users/123456
在URL中使用用户名的规范化形式,或者与ID结合使用,或者作为ID的替代方案,可能是一个更好的解决方案,例如:

http://example.com/user/yourusername

http://example.com/user/12345/yourusername
如果使用前者,则需要确保将规范化用户名设置为用户数据库中的唯一密钥


如果使用后者,您可以选择:如果数据库中的标准化用户名与URL中的用户名不匹配,您可以重定向到正确的URL(就像堆栈溢出一样),或者返回404错误。

除了duskwuff的建议使用用户名而不是ID本身之外,可以使用而不是整数。它们的长度为128位,因此无法枚举,同时也避免透露用户的确切数量。作为一个额外的好处,如果你的网站变得非常流行,那么它在未来是不会受到用户id限制的

例如,对于整数id,攻击者可以在第一天找到最大的用户id,然后在一周或几个月后回来,找到最大的用户id是什么。他们可以不断地这样做来监控你网站上的增长率——也许对于你的例子来说不是很大的,但是许多组织认为这种信息对商业敏感。还有助于避免社会工程,例如,使攻击者通过电子邮件向您请求重置其密码变得非常困难,“因为我更改了电子邮件提供商,忘记了旧密码,但我记得我的用户id!”。进攻一英寸,他们就会跑一英里

我更喜欢使用,但是您也可以使用Version/type5(基于SHA-1),这样您就可以使用UUID.fromName(12345)并获取从整数值派生的UUID,如果您想要迁移现有数据并需要更新一组外键值,这将非常有用。大多数主要语言都支持UUID,或者包含在流行的库(C&C++)中,尽管有些数据库软件可能需要一些调整——我和我自己都在postgres中使用过它们,而且很容易转换

缺点是UUID要长得多,而且不容易记住,但听起来您不需要用户手动键入URL。在创建用户时,您也需要这样做,如果这样做,只需继续生成,直到找到未使用的UUID-实际上,考虑到数字的大小,使用版本4随机UUID,您将有更好的机会赢得彩票,而不是处理冲突,因此这不会影响性能等


URL示例:

如果用户可以更改URL以查看另一个用户的页面,例如
/page/12346
,是否有问题?不太可能。这些网页是公开的。话虽如此,我并不为一个人能够一个接一个地增加数字而疯狂,因为没有更好的词来形容“烦人”。我想以某种方式伪装身份,但不确定正确的方法。