如何学习web

Web是什么

定义

早期的互联网非常的单调,一般只有静态页面,现在,随着技术的发展,web上大多数站点实际上是web应用程序,在服务器和浏览器之间进行双向的信息传递。他们支持注册登录,金融交易,搜索及用户创作的内容。用户(客户端)只需要拥有一个浏览器,就能实现各种功能。

层次

那么web为什么能变的如此强大?

可以把web简单的为几个层次:

浏览器

浏览器即客户端,提供客户端和服务器端的数据信息交互。

http

客户端与web服务器进行交互时就存在web请求,这种请求都基于统一的应用层协议——HTTP协议来交互数据。http属于轻量级协议,无需连接,提供了对通信错误的容错性。

中间件

中间件是位于平台(硬件和操作系统)和应用之间的通用服务

中间件工作示意图

Server容器

Server容器负责解析用户请求和脚本语言,类似的有Tomcat,JBoss等。我们访问网页看到是web容器处理后的内容。

数据库

动态页面可提供交互式的信息查询服务,主要依赖于web数据库的实现,对外提供包含 表单的Web页面作为访问接口,查询结果也以包含数据列表的Web页面形式返回给用户。

web工作概念图:

应用(哪些地方应用到了web)

应用程序有两种模式C/S、B/S, C/S是客户端/服务器端程序,也就是说这类程序一般独立运行。而B/S就是浏览器端/服务器端应用程序,这类应用程序一般借助浏览器来运行。

网站

即为基本的B/S模式,访问web的最传统的形式。

手机app

手机app属于C/S模式,目前的手机app大多属于web app,属于移动web的一部分。该模式通常是由“HTML5云网站+APP应用客户端”两部份构成。其特点是手机用户无法上网则无法访问app应用中的数据。移动Web是目前唯一的支持各种设备访问的平台。

智能家居

目前非常流行的智能家居, 利用硬件的智能化控制和网络化综合管理来实现家居智能化,其中的网络综合管理就应用到了web技术。例如手机远程遥控家具,家具和手机都联入互联网,从而实现数据传递和信息共享。

还有各种应用系统 如车载系统,无线监控系统等,web已经深入了生活的方方面面。


Web安全是什么

简单介绍了web的概念后,下面来了解web安全。Web安全是个比较宽泛的概念,其结构如下:`

web安全结构体系

着重注意的是两点:

数据通道安全

http协议下的网络连接是基于明文的,信息很可能被泄露和篡改,所以,数据通道安全有以下两个目标:
身份认证
数据的完整性(不被篡改或泄露)

浏览器安全

对于数据通道,理论上https协议是安全的,能解决点到点的身份认证和安全问题,接下来会出现问题的地方只会有两个:浏览器和服务器。但是对于这两个方面永远不会出现一劳永逸的安全策略。
在设计安全方案时,最基本最重要的原则就是”Secure by Defalult”。一个方案的安全与否,和有没有应用这个原则有很大关系。

1: 最小权限原则
最小权限原则要求系统只授予主体必要的权限,不能过度授权,以此来减少系统,网络,数据库出错的机会。
2: 纵深防御原则
包括两层含义:首先要在各个不同层面、不同方面实施安全方案,不同安全方案之间互相配合,构成整体,避免纰漏。其次是在解决根本问题的地方实施针对性的安全方案。
3: 数据与代码分离原则
这一原则广泛的适用于各种”注入”,如SQL injection,XSS,CRF injection等,简单说是从漏洞成因上看待问题。
4: 不可预测性原则
克服攻击方法的角度看问题。不可预测性,能有效的对抗基于篡改,伪造的攻击。


HTTP协议

HTTP协议即超文本传输协议,规定了浏览器和万维网服务器之间互相通信的规则,是万维网交换信息的基础,也是一个合格的渗透测试人员的基本功,后面复杂的内容很多都是基于对HTTP协议的分析。

通常一个http请求的数据流的流程示意图

HTTP协议的请求头不仅包含了请求访问服务器的信息,还会包含许多有关客户端环境和请求正文的有用信息,所以对其发动攻击,就能截获许多有用信息。

攻击一个http请求的数据流的流程示意图


安全观

安全本身就是相对的,并不存在绝对的安全。安全是基于假设的信任的。我们假设网站里的个人信息不会被他人窃取,假设不会有人来利用网站的各种漏洞。这时网站是安全的。可是事实偏偏相反,总存在一些人想法设法的攻击网站,窃取数据。所以我们只能不断发展防御技术,攻击与防御技术在两者不断的碰撞对抗中得到了发展。

1、 树立成熟的安全意识

任何用户输入都是有害的
密码问题: 设置复杂的密码并定期更换
注重隐私的保护: 尽量不在网上发布个人隐私信息。
不存在绝对的安全: 要跟随时代的脚步不断学习进步。

2、 代码规范:

比如XSS漏洞是因为对用户的输入过滤不足而产生的,SQL注入漏洞可以通过过滤用户输入的变量和URL传递的参数来防御。对于编程要讲究一定规范,不能偷工减料。

3、 对安全的好奇心和热情:

优秀的Web渗透测试工程师应像黑客一样思考,因为黑客是一种充满好奇且不断创新的人。Web安全瞬息万变,需要不断学习不断进步,保持对行业的热情才是学习最强驱动力。


学习资源

入门书籍推荐:

《白帽子讲web安全》概念比较多,对于初学者相对晦涩,可以慢慢理解
《黑客攻防技术宝典 - Web实战篇》
《网络攻防技术与实践》
《安全之路:Web渗透技术及实战案例解析(第2版)》 看目录是一本详细而又偏实战的书
《Web安全深度剖析》 与上面有些相对立,原理稍微多了一些,两本结合起来很棒。

了解web应用的各种常见漏洞

SQL注入
XSS
上传漏洞
任意文件包含
CSRF
Cookie欺骗

等等

了解他们的概念及形成原理,这些是很基础很常见的漏洞,需要掌握和理解。

渗透视频教程

一开始可能会无从下手,这时可以学习网上的渗透视频教程。或者加入一些网校学习。模仿之后一定要记住,看完要去明白,为什么要这样做,原理是什么,如果我是运维应该如何防御。
视频中可能会利用一些工具,这些工具能极大的提升效率,初学者对于工具的学习也是必不可少的。

分享几个我看过的系列
暗月原创网站入侵渗透视频
http://pan.baidu.com/s/1eS5oPiE

2015cracer入侵入门到精通视频教程
http://pan.baidu.com/s/1dFrdFUD
网上的资源非常丰富,可以根据自身需求来选择。

漏洞复现

学习了别人的经验,并掌握了一定的基础之后之后,可以根据别人的poc来自己搭建环境并复现漏洞。每一次复现成功,一能增加学习者的信心,在web这条艰难的路上,如果看不见希望将异常难熬;二复现的过程能加深对漏洞成因和利用的印象,所谓见多识广。
Freebuf http://www.freebuf.com/
Tools https://www.t00ls.net/
吾爱破解 http://www.52pojie.cn/
这些安全论坛会经常提供一些漏洞的分析和漏洞模型。

CTF

学生党可能擅长做题的感觉,所以大家也可以通过一些ctf的比赛做题来学习,以及验证自己的学习成果。
一些可进行CTF练习的网站
西普学院 http://www.shiyanbar.com/
idf实验室 http://ctf.idf.cn/
合天 http://www.hetianlab.com/
白帽学院 http://www.baimaoxueyuan.com/

其余方面

经常浏览大牛的博客,安全类网站、公众号
很多大牛的特点是利用博客来总结自己所学的知识。我们当然也可以向他们多多学习,增长见识。

知识的迁移性

Web方面的知识相互关联紧密,每次遇到新的知识和问题时,可以去现场学习一波,比如学习sql注入时构造sql语句,就可以学习一下数据库的知识。有针对的学习。

积累资源

学习web安全,重要的一点是要积累一些资源。比如加入一些技术交流分享群,
多认识一些web大牛。多参加一些CTF竞赛。当然这些都是入门的前提下才进行的。

学习的同时如果遇到超出自己能力的问题,向周围的大牛求教是非常好的办法。不过需要注意提问的智慧。毕竟大牛都是很忙的,对于简单的问题可以先行google。

最后想说的就是,写了那么多,也无法改变自己是个菜鸡的现实 :)