先说一个基础知识:URL和URI的区别?
url(Uniform Resource Locator,统一资源定位符)
是用于标识互联网上资源的地址,它不仅指定了资源的位置,还包括了用于访问该资源的协议。例如,http://www.example.com/index.html 就是一个 URL,它明确指出了使用 HTTP 协议访问 www.example.com 网站的 index.html 文件
uri(Uniform Resource Identifier,统一资源标识符)
是一个更广泛的概念,它只用于标识资源,而不涉及如何访问这些资源。URI 可以是 URL,但也可以是 URN(Uniform Resource Name,统一资源名称)等其他形式。例如,mailto:example@example.com 是一个 URI,但不是 URL,它只是标识了一个电子邮件地址这个资源。
http详解
http协议 HTTP 协议目前最新版的版本是1.1,HTTP是一种无状态的协议。无状态是指Web浏览器 与Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后 Web服务器返回响应(Response),连接就被关闭了,在服务器端不保留连接的有关信息。也就 是说,HTTP请求只能由客户端发起,而服务器不能主动向客户端发送数据。
请求响应
HTTP请求包括三部分,分别是请求行(请求方法)、请求头(消息报头)和请求正文。下面是HTTP请求的一个例子。
POST/1ogin.php HTTP/1.1 //请求行
HOST:www.xxser.com //请求头
User-Agent:Mozilla/5.0(Windows NT 6.1;rv:15.0) Gecko/20100101 Firefox/15.0 //空白行,代表请求头结束
Username=admin&password-admin //请求正文
与HTTP请求对应的是HTTP响应,HTTP响应也由三部分内容组成,分别是响应行、响 应头(消息报头)和响应正文(消息主题)。下面是一个经典的HTTP响应。
HTTP/1.1200OK //响应行
Date:Thu,28Feb 201307:36:47 GMT //响应头
Server:BWS/1.0
Content-Length:4199
Content-Type:text/html;charset=utf-8
Cache-Control:private
Expires:Thu,28 Feb 2013 07:36:47GMT
Content-Encoding:gzip
Set-Cookie: H_PS_PSSID=20221438_1944_1788; path=/;domain=,xxser.com
Connection:Keep-Alive //空白行,代表响应头结束
<htm1> //响应正文或者叫消息主题
<head><title>Index.html</title>
</head>
请求方式
get/post/head/put/delete./trace/options/connect/
状态码
1xx:信息提示,表示请求已被成功接收,继续处理。其范围为100~101。
2xx:成功,服务器成功地处理了请求。其范围为200~206。
3xx:重定向,重定向状态码用于告诉浏览器客户端,它们访问的资源已被移动,并告 诉客户端新的资源地址位置。这时,浏览器将重新对新资源发起请求。其范围为300~ 305。
4xx:客户端错误状态码,有时客户端会发送一些服务器无法处理的东西,比如格式错 误的请求,或者最常见的是,请求一个不存在的URL。其范围为400~415
常见的状态码:
200:容户端请求成功,是最常见的状念。
302 :重定向。
404 : 请求资源不存在是最常见的状态。
400:客户端请求有语法错误,不能被服务器所理解。
401: 请求术经授权。
403:服务器收到请求,但是拒绝提供服务。
500 : 服务内部错误 ,是最常见的状念。 503:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
http消息
请求头
key | value解释 |
Host | Host请求报头域主要用于指定被请求资源的Interet主机和端口号,例如:HOST: www.xxser.com:801。 |
User-Agent | User-Agent请求报头域允许客户端将它的操作系统、浏览器和其他属性告诉服务器。登录 一些网站时,很多时候都可以见到显示我们的浏览器、系统信息,这些都是此头的作用,如: User-Agent: My privacy |
Referer | Referer包含一个URL,代表当前访问URL的上一个URL,也就是说,用户是从什么地方 来到本页面。如:Referer: www.xxer.com/login.php,代表用户从login.php来到当前页面。 |
Range | Range可以请求实体的部分内容,多线程下载一定会用到此请求头。例如:表示头500字节:bytes=0~499 |
Cookie | Cookie是非常重要的请求头,它是一段文本,常用来表示请求者身份等。在后面将会详细 讲述Cookie。 |
Accept | Accp请求报头域用于指定客户端接收哪些MIME类型的信息,如Accep: texthml,表 明客户端希望接收HTML 文本。 |
Accept-Charset | Accp-Charset请求报头城用于指定客户端接收的字符集。例如:Accp-Charsetio-859-1, gb2312。如果在请求消息中没有设置这个域,默认是任何字符集都可以接收。 |
更多的头信息可以参考这个 | https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Accept |
响应头
key | value解释 |
Server | 服务器所使用的Web服务器名称,如Server:Apache/1.3.6(Unix),攻击者通过查看此头,可 以探测Web服务器名称。所以,建议在服务器端进行修改此头的信息。 |
Set-Cookie | 向客户端设置Cookie,通过查看此头,可以清楚地看到服务器向客户端发送的Cookie 信息。 |
Last-Modified | 服务器通过这个头告诉浏览器,资源的最后修改时间。 |
Location | 服务器通过这个头告诉浏览器去访问哪个页面,浏览器接收到这个请求之后,通常会立刻 访问Location头所指向的页面。这个头通常配合302状态码使用。 |
Refresh | 服务器通过Refresh头告诉浏览器定时刷新浏览器。 |
更多响应头参考这里 | https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status/100 |
更多的关于http协议的内容,可以去看看这个网站:https://developer.mozilla.org/zh-CN/docs/Web。 这里面讲的很详细了 。
信息探测
收集web信息
可以使用一些关键字在搜索引擎探测:
|
漏洞扫描
漏洞扫描也属于一种信息探测,使用扫描器可以帮组我们发现更多的问题。
可以使用下面几种进行扫描:
Burp Suite |
AWVS |
AppScan |
具体使用方式,可以自行百度。使用这些工具发先漏洞问题,后面就是如何防止这些漏洞发生。
漏洞原理
sql注入
2013年大学老师讲的案例是这样的:一个后台登陆页面,输入用户名密码后,后端拿着接受到的账号密码去验证。但是这个验证的过程是通过sql的条件比对进行的。所以,这些条件完全就依赖于用户在客户端输入的数据,如果输入的内容包含 “or 1=1 or” 这样的条件的时候,就已经注入了脚本。
说到底,是因为服务端的信任了客户端输入的数据,才会导致最终的执行结果。所以,对于客户端输入的任意的内容,都要视为不可靠的内容。
下面说说注入的分类
1.数字型注入
比如对输入的数字类型进行注入的情况:
select * from table where id = 8 ` //对于这样的查询肯定是会报错的,因为源ID是数字类型的
//如果注入的条件是id=8 and 1=1
select * from table where id=8 and 1=1 //对于这样的sql和正常的结果是一样的