网络攻防小学期(三)网站安全

HTTP协议,常见的网站攻击

第一章 HTTP协议

HTTP请求

在客户端的浏览器中发起 HTTP 请求,通常是在地址栏里输入以 HTTP 开头的 URL

1
http://主机[:端口][路径]

其中主机可以是 IP 地址,也可以是域名;如果不填写端口,则默认为 80;如果不填写路径, 浏览器会自动补充为“/”。

访问http://www.tsinghua.edu.cn/publish/newthu/index.html,用wireshark捕获并追踪HTTP流所看到的内容

第一行给出了这条 HTTP 请求的方法、URL 和协议版本。HTTP 请求有多种方法,常用的 是GET和POST。GET常用于从服务端获取资源和查询数据,POST常用于向服务端提交表单 数据。GET 方法可以通过 URL 向服务端提交数据,但 URL 长度是受限的,并且只允许是 ASCII 字符;相反 POST 方法允许使用二进制数据,对数据长度也没有限制。由于 URL 常会显示在 浏览器中,因此 GET 方法的安全性不如 POST 方法。在这条 HTTP 请求中,URL 是 “/publish/newthu/index.html”,协议版本是“HTTP/1.1”

从第二行开始是这条 HTTP 请求的头信息。头信息之后是请求的正文,这条 HTTP 请求的正文为空。

通过 HTTP 请求向服务端提交的数据称为 HTTP 请求的参数,其格式是:参数名=参数值。 如果有多个参数,则各参数项用&连接起来,例如:param1=value1&param2=value2。如果使用GET 方法,则在参数前加问号并紧接在 URL 后,这时提交的数据也称为 URL 参数,例如 http://host_name_or_IP/order.html?color=red&amount=5

就在请求 order.html 资源时提交了 color 和 amount 两个参数值。如果使用 POST 方法,则参数 放在 HTTP 请求正文中。

HTTP响应

状态码 意义
200 成功
302 重定向
400 请求有语法错误
401 请求未经授权
403 拒绝提供服务
404 请求资源不存在
500 服务端发生不可预期的错误
503 目前无法处理请求

常见的网站攻击

拒绝服务攻击

拒绝服务攻击(Deny of Service, DoS)的目的是让网站不能提供正常服务。由于服务端不 管是网络带宽,还是 CPU 和内存,其资源总是有限的,拒绝服务攻击除了让服务端系统崩溃 或死机外,通过大量恶意访问和服务请求就能够使服务端网站出现资源不够的情况,从而影响 正常服务。

拒绝服务攻击中最有代表性的可能就是 SYN Flood 攻击了,该攻击利用了 TCP 协议通过 三次握手来建立连接的机制。攻击者(客户端)向服务端发送 SYN 报文请求建立 TCP 连接, 服务端将发出 SYN+ACK 应答并等待客户端发回第三次握手的 ACK 报文。但实际上攻击者发 出 SYN 报文后就不再与服务端通讯了,而不知情的服务端仍在内存中维护着这个等待建立的 连接,直到一定时间之后才会丢弃。如果攻击者在短时间内大量向服务端发送这种 SYN 报文, 服务端就容易出现堆栈溢出,或者 CPU 忙于处理这种无用的连接请求,而没有能力处理正常 用户的正常服务请求。 类似 SYN Flood 的攻击利用了协议本身的缺陷,所以并没有办法阻止。通过增加服务端的 带宽和处理能力,能够使服务端不容易被攻陷。于是又出现了分布式拒绝服务攻击(Distributed Deny of Service, DDoS),攻击者先通过黑客手段获得大量计算机(傀儡机、肉机)的控制权, 甚至直接租赁大量计算机资源,再组织这些计算机同时向服务端发起 DoS 攻击。

跨站脚本攻击

跨站脚本攻击(Cross-Site Scripting, XSS)利用网页漏洞,往网页中插入恶意的脚本代码, 当用户浏览含有恶意脚本代码的网页时就受到攻击。

SQL注入攻击

后台使用数据库的网站是非常普遍的,用户管理、数据管理都需要用到数据库,网站通常 需要将固定的字符串与用户提交的数据组合为 SQL 语句以便执行数据库操作。如果不对用户 提交的数据进行严格检查,就存在被攻击的可能。

目录遍历与文件包含攻击

客户端通过 URL 访问服务端的资源,如果服务端不注意控制本地资源的可访问权限,就 可能受到目录遍历攻击。

命令注入攻击

程序员在进行网站开发时,有些功能可以通过调用已有的程序或系统命令来实现,例如获取指定目录下的文件列表。如果没有同样功能的函数,自己实现相同功能函数又较麻烦时,有些程序员就会通过 system()、exec()等类似的函数来调用外部程序或命令,这使得命令注入攻击有个机会。