Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.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
C# 公共配置文件的可公开查看的用户ID_C#_Asp.net_Database_Asp.net Mvc 3_Security - Fatal编程技术网

C# 公共配置文件的可公开查看的用户ID

C# 公共配置文件的可公开查看的用户ID,c#,asp.net,database,asp.net-mvc-3,security,C#,Asp.net,Database,Asp.net Mvc 3,Security,我想为我网站上的每个用户创建一个公共配置文件页面。与SO用户配置文件非常相似的东西。但我不想公开用作PK的Guid。我也不知道在网站的整个生命周期中,用户名在url中的使用会有多独特 问题是,url本身是如何做到这一点的?用户名可以删除,url仍然有效,但我是否应该在Guid旁边生成一些可公开查看的用户名,以便在指向配置文件页面的链接中使用,并在url中显示 我发现了类似的问题,但它们并不完全是我想知道的。你可以做两件事 首先,您可以在数据库上创建一个额外的增量ID,无论是在ASP.NET表上还

我想为我网站上的每个用户创建一个公共配置文件页面。与SO用户配置文件非常相似的东西。但我不想公开用作PK的Guid。我也不知道在网站的整个生命周期中,用户名在url中的使用会有多独特

问题是,url本身是如何做到这一点的?用户名可以删除,url仍然有效,但我是否应该在Guid旁边生成一些可公开查看的用户名,以便在指向配置文件页面的链接中使用,并在url中显示

我发现了类似的问题,但它们并不完全是我想知道的。

你可以做两件事

首先,您可以在数据库上创建一个额外的增量ID,无论是在ASP.NET表上还是在新的映射表上,并提供一个连接到Guid的较小数字。为什么是较小的数字?因为Guid是128位的,太大了,无法像url上那样使用

然后,您可以在url上使用与Guid连接的较小数字。这里唯一的漏洞利用问题是任何人都可以找到您的所有用户列表。所以,如果你把它们也公之于众,那么这就不是问题了。因此,使用他们的URL中的数字来查找用户,而用户名是为了更好地搜索引擎优化。号码保持不变,但名称可以更改,因此仅使用号码来定位用户

第二种解决方案是将128位Guid编号压缩并编码为73个基本字符串。我选择了73个基本字符,因为73是url上允许的非转义字符

以下是我发现的一些进行此转换的示例:

简单转换为base64(从)


在SO的情况下,使用PK。url的用户名部分是可选的,将被忽略。

因此只需使用用户id即可-也就是说,它们存储的是整数而不是GUID。
public static string Encode(Guid guid)
{
  string encoded = Convert.ToBase64String(guid.ToByteArray());
  encoded = encoded
    .Replace("/", "_")
    .Replace("+", "-");
  return encoded.Substring(0, 22);
}

public static Guid Decode(string value)
{
  value = value
    .Replace("_", "/")
    .Replace("-", "+");
  byte[] buffer = Convert.FromBase64String(value + "==");
  return new Guid(buffer);
}