4

我正在研究 SPA,想知道在页面上显示和隐藏 HTML 元素的最佳方法取决于用户凭据。

我有一个使用 AngularJS 的 RestfulAPI 后端和 JS 重型客户端。获得身份验证后,我希望页面的某些元素变得可见,而其他元素则根据用户被授权执行的操作隐藏。
现在,我通过身份验证从服务器发送一个 JSON 对象,该对象包含一个权限列表(只是一个字符串数组),并根据权限数组中相应键的存在来显示/隐藏元素。
我的服务器端 API 受到保护,并确保在处理每个请求之前 - 用户已授权。
我认为,这将帮助我防止人们篡改我的 HTML 和 JS,并在客户端启用元素并尝试发出他们未经授权的请求。

作为另一个伪安全级别,我确保发送给客户端的权限名称只是实际权限的别名。当 API 尝试授权请求时,它查找的声明的名称不同。
我的问题是 - 这是一种安全的方法吗?
那里有更好的方法吗?
我是否应该仅在仅包含用户有权查看的 HTML 的授权时才从服务器获取 HTML 模板?
如果我的服务器端授权是无懈可击的,那么用户查看所有 HTML 的能力是否重要?

4

2 回答 2

6

如果我的服务器端授权是无懈可击的,那么用户查看所有 HTML 的能力是否重要?

您问题的最后一部分确实是整个问题的关键。

您的服务器授权必须是无懈可击的,因为没有什么可以阻止任何人直接向您的 ajax API 发出 http 请求。一旦 API 是公开的(一旦您发布您的网站即公开),那么任何人都可以调用这些 URL。因此,从安全角度来看,您的服务器代码需要绝对可靠。

但是对于您的客户端代码,您是对的,这真的没关系。您无法阻止某人查看您网站上的 HTML、CSS 和 Javascript 代码,因此与其担心试图阻止他们这样做(这是不可能的),您需要专注于确保它不会不管他们是否这样做。

如果页面上有一个元素,那么用户可以访问它。这就是客户端软件的本质。

但您需要保护的是这些元素中的数据,而不是元素本身。

如果不允许用户查看给定数据很重要,那么首先不要将其提供给他的浏览器。这是唯一的方法。一旦它在浏览器中,用户就可以完全访问它,所以在发送之前确保他已经获得授权。

于 2013-09-23T13:47:08.270 回答
1

如果我的服务器端授权是无懈可击的,那么用户查看所有 HTML 的能力是否重要?

从安全的角度来看,它没有,你的方法是正确的。

从用户体验的角度来看,只要您还确保您的 HTML 呈现代码足够健壮,不会将用户与在错误时间出现的错误元素混淆,这是正确的。

于 2013-09-23T13:45:32.930 回答