例如,如果我想为所有用户显示一个0(0),并且我希望所有用户都将其标识为超级用户的数字相加一(1)。以及如何确保每个用户只能添加一次,当然,为了防止非自动访问来更改这些内容或获取任何信息,必须执行哪些安全要求?
我知道这是一个很大的话题,但是有人能为我简单地解释一下编程的哪些部分,以及一些关于这些主题的好书吗?
发布于 2017-06-04 12:21:04
网络是无状态的。这意味着,如果浏览器两次请求同一个页面,传统的web服务器就无法真正知道它是否是同一个用户。
输入会话。Django有一个身份验证系统,它要求每个用户都要登录。当用户登录时,就会给他们一个会话。会话由两个部分组成:一个包含随机生成令牌的cookie和一个具有相同令牌的数据库条目。
当用户登录时,生成一个新的会话令牌,并通过cookie将其发送回浏览器存储的用户。同时,在数据库中创建该记录。每次浏览器向Django发出请求时,它都会将其会话cookie与请求一起发送,Django将其与数据库中的令牌进行比较。如果存在令牌,则认为用户已登录。如果令牌不存在,则用户不会登录。
在Django中,有一些用户模型可以方便地检查每个请求当前登录的用户是谁。他们为我们在每个用户提出的每一个请求上做所有的标记检查。与此相结合,我们可以通过“外键”关系将其他型号联系起来,以表明谁拥有什么。
假设你在写一个博客,多个用户可以在博客上写文章。如果您想要构建一个编辑功能,您可能希望限制用户只能编辑自己的文章,而不允许其他人的文章。在这种情况下,您会收到请求,找出当前用户来自哪个用户,将该用户与blog Post模型中的“作者”字段进行比较,并查看该外键是否匹配。如果匹配,则发出当前请求的用户是所有者,并允许进行编辑。
整个过程的安全是因为会话令牌是随机生成的散列,而不是简单的ID号。恶意攻击者不能简单地获取哈希并增加值来尝试和访问相邻的帐户,他们必须完全拦截另一个用户的哈希。这可以通过使用SSL证书来进一步保护,这样您的连接就可以通过https://
进行连接,并且浏览器和服务器之间的所有通信都是加密的。
https://stackoverflow.com/questions/44358307
复制