Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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
Asp.net 正在放置一个用户';页面上的ID是否存在安全风险?_Asp.net_Asp.net Mvc 3_Angularjs - Fatal编程技术网

Asp.net 正在放置一个用户';页面上的ID是否存在安全风险?

Asp.net 正在放置一个用户';页面上的ID是否存在安全风险?,asp.net,asp.net-mvc-3,angularjs,Asp.net,Asp.net Mvc 3,Angularjs,我们正在使用Asp.NETMVC和AngularJS。我们想把用户的ID放在页面上的一些静态数据中。不用担心,我们已经使用[Authorize]属性保护了所有MVCAPI控制器。然而,将用户ID放在有人问我的页面上真的有风险吗?我真的想不出为什么不这样做,尽管我仍然认为这不是一个好主意。这不是一个安全风险,知道用户ID不足以获取任何机密信息。要获取此信息,您必须确保用户经过身份验证,例如使用authorize属性并在服务器端检查登录用户是否允许执行当前操作。在客户端的页面上保留普通用户id可能会

我们正在使用Asp.NETMVC和AngularJS。我们想把用户的ID放在页面上的一些静态数据中。不用担心,我们已经使用[Authorize]属性保护了所有MVCAPI控制器。然而,将用户ID放在有人问我的页面上真的有风险吗?我真的想不出为什么不这样做,尽管我仍然认为这不是一个好主意。

这不是一个安全风险,知道用户ID不足以获取任何机密信息。要获取此信息,您必须确保用户经过身份验证,例如使用authorize属性并在服务器端检查登录用户是否允许执行当前操作。

在客户端的页面上保留普通用户id可能会导致劫持风险。您需要授权所有请求,以使其能够执行操作,因为他是执行此操作的人。例如,我有一个配置文件页面,现在我在页面中更改了我的用户id并更新了名字,您的代码将无法捕获这次劫持,因为他已获得授权,可以更新配置文件。如果要保留Id,请始终生成GUID,并将其映射到服务器端的用户Id和GUID。您可以在每次相同用户登录时生成GUID。它将避免GUID劫持,因为它一直在更改

您可以将此映射保留在数据库中以便持久化,并将其以字典的形式保留在静态变量或缓存中,以便更快地从GUID映射到用户id

     Dictionary<string,int> mapping = new Dictionary<string,int>;
字典映射=新字典;

通常,当我必须在公共场所使用用户id(URL、回发值等)时,我使用GUID而不是整数。这取决于您如何使用该用户id。您是否直接使用它在DB上执行某些操作?是的,这是不安全的,因为恶意认证的客户端可能会发布不同的用户id(查看其他人的数据?发布带有其他人姓名的消息?)。这就是说,若您从当前登录的用户计算该用户ID,那个么您实际上不需要从客户端取回它。如果是更复杂的问题,您至少应该针对当前登录的用户对其进行验证。