关于http请求无状态、短连接的问题。

引言:

  公司面试的时候问了我这么一个关于用户登录的安全性问题,当时我简单的表述了一下我对于http请求的特点:短连接和无状态。(奇怪的是我好想答得不是很好,但是公司还是要我了,O(∩_∩)O哈哈~)。这里我就记录一下我对于B/S结构的http请求的理解,如果有错误之处还请各位看官多多之处,谢谢!

一、短连接

  Client端向Service端请求一份报表数据,此时C端和S端就会建立起一个连接,当S端将报表数据反馈给C端之后这个连接就会断开消失。如果C端过了一段时间又需要数据了,那么需要再次建立一个连接

问题:

这个短连接方面我也不太明白,如果相应/请求是一次连接那么如果用户在等待响应的时候中断了请求,服务器按理说是很好监听到的呀。但是有一种情况,如果一个请求在S端需要处理10S,当C端请求1S之后刷新了页面(或者其他方法,中断了请求连接),S端会任然相应出个10S的处理。解决方法这里有一个:

  https://mp.weixin.qq.com/s/Y9q4Orz14VHwGf2U-AAzeQ

但是.net下如何处理呢?

二、无状态

  什么是无状态呢。我的个人理解是,每一个请求都是一样的,没有区别的。举一个栗子:张三和李四两个用户都想服务器请求一份报表数据,这个时候服务器是无法却分哪个请求是张三的哪个请求是李四的,这样就可能造成数据的错误,把张三的报表给了李四,李四的报表给了张三。

1、Cookie  

这个时候为了区分谁是张三谁是李四,就需要标记一下,那么张三在请求的时候加上一个标记,说“我是张三”,李四请求的时候加上一个标记说“我是李四”,这样子服务器就可以区分谁是张三谁是李四了。这个标记就是Cookie,每次http请求的时候都会把客户端的Cookie带上。

2、Session

如果单纯的把信息都放在客户端上面很不安全,张三可以把自己的信息修改为“我是李四”从而获取到李四的报表(不考虑Cookie加密)。那么还有一种方式,当张三登录系统的时候,我们将张三的个人信息存放在服务器端,并给张三一个key,服务器凭借这个key可以在自己的仓库(iis/内存/文件/数据库)中找到张三的信息。

情景如下:

  张三登录系统,获取到服务器给的key。张三向服务器请求报表,并附上key。服务器根据key找到了张三的信息,确认该请求是登录过的用户。

所以Session其实和Cookie是一样的,但是Session是将实际内容存放在服务器端,而Cookie是将内容存放在了客户端(不考虑加密)。

  留意一下就可以在使用Session的.net网站中的Cookie看到这样一个值:

这个就是Session的key。

问题:

当时公司面试我问的是BS的登录验证问题,我将上述我个人对http请求的理解阐述了一遍之后又问了我这么一个问题:

如果通过抓包等手段截取到了用户登录的Session的key,之后不就可以凭借这个Key登录了吗?有别的安全手段吗?

我当时蒙了,因为按照我的认知,如果获取到了Session的Key,那么这个请求就完全是用户请求而不是非法请求了(无状态啊)。

后来想想可能问我的是如果获取到了key之后频繁请求占用资源吧?(缓存、IP黑名单、冷热数据分库)

希望以后有空问一下当初面试我的到底怎么弄。

补充第二个问题,关键词:CSRF

https://blog.csdn.net/stpeace/article/details/53512283

猜你喜欢

转载自www.cnblogs.com/moshanghuakai/p/9668391.html