web安全
1、理解web的范围
从意义上来说,web泛指一切主机与主机之间联系的场景。
(1)从通信介质来说,无线和有线
(2)从网络协议层次上来说,包括数据链路层、网络层、传输层和应用层的各种协议
对应的,包括公网和私网环境
(3)从交互形式来说,分为无中心和有中心,也称为客户端-客户端,与客户端-服务端
ssh是典型的客户端-客户端,而其他大多数都是客户端-服务端
(4)cs与bs
cs指client-server,客户端-服务端。bs指browser-server,浏览器-服务端。bs是cs的一个子类
cs并不局限使用的协议,即直接使用各种网络通信协议均可,同时服务端和客户端一般都是自定义开发。
bs主要使用http/https协议,客户端即各种浏览器,而服务端一般采用通用的服务器容器,nginx、tomcat、iis等
(5)bs的服务端编程
一般来说,主流的是php、java和.net作为常见的bs服务端编程语言。理论上,几乎所有编程语言都可以作为服务端编程,比如python,只是相对应用较少。
.net使用c#语言开发,是早期的主流,目前新增服务端应用相对较少。但也因为其大概率是早期开发和部署,可能不重视安全、和到目前为止的新增漏洞而作为渗透重点。
php是目前使用最频繁的网站开发,相对简单。java是企业级的服务开发,偏向高并发、高性能、高可用场景。
(6)前后端是否分离
早期,是前后端不分离,即请求提交数据、响应跳转。后来,ajax技术逐渐应用,而完全的依赖ajax即为前后端分离。
前后端分离的优点:可以分别开发、调试,尤其是团队开发;可以分别部署;以数据交互的角度设计与开发、摆脱ui设计,更容易实现,以及做安全防护。
(7)restful风格与传统风格
restful风格即对同一资源增删改查使用同一url,相关固定的主要参数在url中以路径参数形式包含,比如/id,然后结合ajax以请求方法get/post/put/delete表明对该资源的操作。
传统风格,是主要使用get和post方法,参数可能在url直接参数或者请求体部中表单形式。
(8)单一站点与微服务
所有功能,包括核心业务、注册登录功能、文件上传、图片存储、数据库、redis等都在同一主机的同一服务端口上运行。
如果是小型站点还好,但随着访问量和使用量的增多,单一站点就不符合。比如注册登录功能的特点是每个人几乎都会使用,但是短时间内使用后不再请求。
微服务是将功能拆分,不同功能部署到不同主机、不同端口上。这其中有些可能是会直接开发给用户访问,比如登录注册、图片请求与上传。而有些可能是需要使用,但由某一服务端间接调用,不直接开发给用户,比如数据库、redis,有时候图片服务器也不开放,等等。(不开放就构成了ssrf的待测目标)