通过本篇文章,您可以了解一个web安全从业人员所具备的大致知识面,同时我也制定了一个循序渐进的学习计划,用以帮您找准自己的定位,并可以自己制定适合自己的学习计划,具体的会在下一篇文章里面进行讲解,如果觉得有帮助的话,可以关注一下我,感谢。
1. Web请求流程概览
2. Web中间件
中间件 (Middleware) 是一种连接软件组件和应用的计算机软件,它包括一切服务,一边运行在一台或多台机器上的软件通过网络进行交互,该技术所提供的互操作性推动了一致分布式体系架构的演进,该架构通常用于支持简化那些复杂的分布式程序,它包括Web服务器、事物监控器和消息队列软件。中间件是基础软件的一大类,属于可复用软件的范畴,顾名思义,中间件处于操作系统软件和用户的应用软件的中间。
Web中间件上运行着由Web脚本语言编写的系统。
3. Web编程语言
Web编程语言,根据解释执行的位置可以分为前端语言和后端语言。Web前段语言是指在浏览器上解释执行的Web编程语言,包括HTML和JavaScript等。Web后端语言是指在Web服务器上解释执行的Web编程语言,包括JSP、PHP、ASP、ASP.Net等。
3.1. PHP简介
PHP是“PHP Hypertext Preprocessor”的缩写,它是一门用来使得服务器产生动态输出的语言,输出的结果根据每次浏览器请求页面响应的结果而不同。通常,PHP文件的扩展名为.php。当Web服务器在请求的文件中遇到这个扩展名时,他将自动地将该文件传递给PHP处理器。当然,Web服务器是可以惊醒高配置的,一些Web开发者选择把文件强制命名为.htm或者.html,但还交给PHP处理器进行解析,通常这样做的目的是为了隐藏开发者正在使用PHP语言这一事实。
为了触发PHP命令,需要一个新的标记,这个标记由 <?php和?> 组成,前者开始一段PHP代码,代码内容放置在两个标记中间,最后由后者结束标记,整个PHP代码结束。这个标记的使用方法很灵活,一些开发者把标记的开始部分放在文档的开始点,在整个文档结束处放置结束标记,直接由PHP命令输出HTML结果;但是,还有一些人只是在需要动态叫本事将最少的PHP片段放入标记之间,剩下的文档保留在标准的HTML中。
3.2. JavaScript简介JavaScript是完全在网页浏览器上运行的客户端脚本,它的用途是为了实现以脚本的方式来访问HTML文档中的所有元素。换句话说,JavaScript提供了一种和用户动态交互的途径,结合CSS,JavaScript能够改变眼前动态网页的样式,而不是让服务器返回一个新的页面。要把JavaScript代码放在以<script>开头和</script>结尾的HTML标记之间才能调用它;除了在HTML文档中直接编写JavaScript代码之外,还可以包含自己网站或因特网上的任何JavaScript代码文件,其语法为:
<script type=“text/javascript” src=“script.js”></script>
或从因特网上获取文件:
<script type=“text/javascript” src=“http://someserver.com/script.js”></script>
MySQL是一个可以通过强大和快速的类英语命令管理数据并支持大型数据库的开源数据库管理系统,它采用标准的SQL数据库语言形式,可以运行在到各系统上并支持多种语言。一个MySQL数据库包含一个或多个表,每个表又包含多条记录(行),在这些行中有多种包括数据本身的属性(列)。
5. 常见的数据库和编程语言组合
6. B/S机制和C/S机制介绍
B/S结构(Browser/Server)即浏览器和服务器结构,他是随着因特网技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户界面时通过www浏览器来实现的,极少部分是无逻辑在前端(浏览器)实现,但是主要食物逻辑在服务端实现,形成所谓的三层结构。
C/S结构(Client/Server)中,服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或SQL Server。客户端需要用户安装专门的客户端软件。
7. HTTP介绍HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网服务器传输文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据的,它属于应用层的面向对象协议,适用于分布式超媒体信息系统。HTTP于1990年被踢出,经过几年的发展和使用得到不断的完善和扩展。B/S架构的系统使用协议为HTTP协议,浏览器作为HTTP客户端通过URL向HTTP服务器即Web服务器发送所有请求;Web服务器根据接收到的请求,向客户端发送响应消息。HTTP常用的端口号包括80、8080、3128、8081、9080等。
HTTP具备简单快捷、灵活、无连接、无状态等特点,并支持B/S和C/S模式。其中,HTTP的无状态特点是指,与FTP或者telnet不同,HTTP协议无法记忆客户端的当前状态,这种特性被称为HTTP的无状态性,因此,状态的记忆需要凭借响应(HTML)中的hidden参数。
URL全称Uniform Resource Location,即统一资源定位符,是互联网上用来表示某一处资源的地址,其基本结构格式如下所示:
[注]需要区分URL和URI。
URL中描述了协议,该URL用于检索资源和资源名称。如果资源是Web类型资源,则URL在开头包含http / https。同样,如果资源是文件,则以ftp开头,如果资源是电子邮件地址,则以mailto开头。
URI(统一资源标识符)是标识逻辑或物理资源的字符序列,与URL类似,也是一串字符。通过使用位置,名称或两者来标识Internet上的资源;它允许统一识别资源。
URL主要用于链接网页,网页组件或网页上的程序,借助访问方法(http,ftp,mailto等协议)来检索位置资源;URI用于定义项目的标识,此处单词标识符表示无论使用的方法是什么(URL或URN),都要将一个资源与其他资源区分开来。另外,URL指定要使用的协议类型,而URI不涉及协议规范。
8. HTTP请求用户和Web服务器之间的基本通信会话通过用户浏览器发送HTTP和接收HTTP响应实现的,下图反映了完整的HTTP请求过程
8.1. HTTP请求消息
在浏览器发送给Web服务器的请求消息中,请求消息的第一行(示例如下所示)被称作请求行,相当于浏览器下打给服务器的指令。请求行由请求方法 (GET)、URL (/31/31-001.PHP)和版本协议 (HTTP/1.1)组成,他们之间以空格相隔:
GET /31/31-001.PHP HTTP/1.1
请求方法除了GET(获取)以外,还有POST和HEAD等。GET和POST于HTML中form元素的method属性指定的值相同。
HTTP请求的第二行及以后的内容被称作请求头信息(Header),其格式为名称与值以冒号相隔。请求头信息,但其中只有HOST是必须的。HOST是表示接受信息的主机名(FQDN)和端口号(80时可以省略)。请求头部之后是请求数据,二者通过一个空行隔开。
GET方法使用的是URL后紧跟查询字符串的形式来传递参数的,但由于浏览器和服务器能够处理的URL长度有限,所以当传递的信息量很大时,使用POST方法哼安全;另外,敏感信息应该使用POST发送,这是因为POST有下列风险:
URL中指定的参数经由Refer泄露;
URL中指定的参数残留在访问日志中。
因此,传递请求中包含数据更新等请求时、发送敏感信息时以及发送信息量很多时,都应使用POST方法而不使用GET方法。
一般情况下,服务器接受并处理客户端发过来的请求后会返回一个HTTP的响应消息,HTTP响应也应由四个部分组成,即状态行,消息报头/响应头信息、空行和响应正文。状态行的内容是请求消息经过服务器处理以后的状态,其包括(示例如下所示)协议版本(HTTP/1.1)、状态码(200)和状态描述(OK)组成。
HTTP/1.1 200 OK
响应消息的第二行及以后的内容为响应消息,内容一直到出现空行(只含有换行符的行)为止,以下为典型的响应头信息:
Content-Length:现实响应正文的字节数
Content-Type:指定为MIME类型。MIME即为Multiple Internet Mail Extensions消息内容类型的因特网标准。HTML文档的情况下MIME类型为text/html。
常见的MIME类型如下表所
8.4. HTTP状态码
常见的HTTP状态码和其含义如下表所示:
[注]
重定向是指通过各种方法将网络请求重新设定方向转到其他位置,如网页重定向、域名重定向、陆游的选择变化等。现实中重定向的原因可能是网站调整(如改变网页目录结构)、网页被移到新地址、网页扩展名改变。如果不做重定向,那么用户浏览器页面则可能出现404错误。
开放式Web应用程序安全项目 (OWASP, Open Web Application Security Project) 是一个组织,它提供有关计算机和互联网应用程序的公正、实际、有成本效益的信息。其目的是协助个人、企业和机构来发现和使用可信赖软件。OWASP每隔四年就会发布一版十大最严重的Web应用安全威胁,即OWASP Top 10,它被视为web应用安全领域的权威参考。美国联邦贸易委员会(FTC)强烈建议所有企业需遵循OWASP十大WEB弱点防护守则。
(13版本的A4和A7合并为17版本A5;13版本A8和A10因为威胁的范围较小因而在17版本中被去除)
9.2. 注入类威胁 9.2.1. 简介
注入类威胁的产生原因是Web应用程序没有将程序代码和用户提交的数据严格区分开来,将恶意用户提交的数据当做了一部分代码解析执行,注入类威胁轻则泄露各种敏感信息,严重的将直接导致整个网站服务器被控制。
9.2.1. SQL注入原理:恶意用户提交的数据被Web用用程序当成数据库查询代码解析执行
威胁:用户敏感信息,如账号密码,家庭住址,联系方式等信息泄露
9.2.2. XSS漏洞
原理:恶意用户提交的数据被Web应用程序当作HTML标签和JavaScript代码返回给浏览器解析执行。XSS又叫CSS (Cross Site Script),跨站脚本攻击。
威胁:窃取cookie,网站钓鱼,网站挂马
9.2.3. 文件上传漏洞
原理:恶意用户上传的文件被Web应用程序当作脚本代码解析执行
威胁:植入Webshell,控制整个网站
原理:Web应用程序执行的过程中,往往需要调用多个文件,恶意用户提交的数据被Web应用程序当作正常的需要调用的文件,从而造成文件包含漏洞
威胁:植入Webshell,控制整个网站,窃取网站敏感信息
原理:Web应用程序往往会提供文件下载的功能,如果被下载的文件是黑客可以任意修改的,那么就会造成任意文件下载漏洞
威胁:窃取网站敏感信息,进一步发现网站更多漏洞
原理:Web应用程序会提供一些执行系统命令的接口,如果网站对用户提交的参数过滤不严格,那么就会把恶意用户提交的参数当成系统命令执行,从而造成命令执行漏洞。
威胁:执行系统命令,网站被控制
信息泄露类漏洞主要是由于Web应用组件(Web服务器,Web中间件,Web应用程序)配置错误或者设计缺陷造成的,通过此类问题,恶意攻击者能够获取目标服务器的各种敏感信息,进而为下一步攻击埋下伏笔。
9.3.2. 目录信息泄露原理:Web应用中间件配置错误时,如果用户访问不存在的索引文件 (index.html, index.php等)的目录,就会直接显示该目录下所有文件及其子目录。
威胁:泄露网站路径,文件名等敏感信息
原理:发布网站时,管理员往往会忘记删除网站开发时留下的包含网站敏感信息的各种文件,如网站源码压缩文件,.git,.bak,.svn等文件
威胁:泄露网站源代码等敏感信息
原理:弱口令简单说就是容易被黑客猜解出来的口令,网站后台的登录口令如果过于简单,就会被黑客猜解出来,从而造成弱口令漏洞
威胁:网站敏感信息泄露,某些情况写可以导致Web服务器被控制
原理:Web应用系统对管理后台,敏感API等没有进行有效的权限控制,从而造成未授权用户能够任意访问
威胁:造成网站敏感信息泄露
原理:Web应用系统的管理后台、编辑器后台等敏感路径设置的过于简单,就会被黑客猜解出来从而造成敏感路径泄露漏洞
威胁:网站敏感信息泄露
业务逻辑漏洞本质上属于业务设计缺陷,表现为设计者或开发者在思考过程中作出的业务流程存在明显或隐含的错误,恶意攻击者利用这些业务设计缺陷,通过篡改业务流程和数据,往往能达到设计人员‘意料之外’的效果
9.4.2. 订单金额任意修改原理:网站商品的订单处理的业务逻辑,信任了前端传入的金额参数,没有在服务端进行验证,导致恶意用户可以任意修改订单的金额
威胁:网站商品的订单处理的业务逻辑,信任了前端传入的金额参数,没有在服务端进行验证,导致恶意用户可以任意修改订单的金额
原理:用户在找回密码、认证注册时,网站发送的验证码可以被恶意攻击者直接获取或者重复提交
威胁:跳过验证码、任意修改密码
原理:网站敏感接口,如登录接口、验证码接口、优惠劵校验或其他防止枚举的机制容易遭受枚举攻击。
威胁:暴力破解密码,暴力枚举验证码
原理:Web应用在设计用户登录cookie时,没有严格遵循随机化机制,而是采用可预测的随机数或者直接使用账号、昵称等信息作为cookie,从而造成恶意用户可以伪造任意用户cookie
威胁:登录任意账号、泄露用户敏感信息
原理:Web 应用系统在设计密码找回功能时存在设计缺陷,比如没有采用安全的随机数作为密码找回凭证,导致该凭证可以被任意恶意用户预测,从而造成任意密码重复
威胁:任意修改密码