信息安全兴趣小组 – 基础培训第2讲

一、使用专有协议和HTTP协议的C/S模式的例子

  • 这次要看代码了,不过不是让你们非要读懂代码,就是先简单看一看感受一下网络编程。通过这个例子我们将会引出一些很重要的东西来
  • 客户端概况:iOS客户端,使用的是Objective-C语言(类似于C语言)
  • 服务器端概况:Java语言编写的的服务器
  • 这里注意,什么语言不重要,以后你们会更好的领会这一点,因为编程语言都是相通的,一通则百通。

专有协议通信:认证登录

  1. 客户端:需要有服务器的URL,先获取帐号密码,然后与服务器建立连接,连接建立之后再按一定的格式(协议)发送给服务器。这时候客户端需要等待服务器的回复才行。
  2. 服务器:被动等待客户端的请求,一旦有请求就开始向数据库进行查询,然后给客户端返回一个结果。
  3. 客户端:收到服务器的回复,然后进行下一步操作。

HTTP协议通信:拉取动态列表

  1. 客户端:创建HTTP请求,之前需要进行HTTP编码(URL编码),明确想获得的资源,然后建立连接进行发送,我的例子里用的是GET方法,然后等待服务器回复。
  2. 服务器:这里的服务器使用了一种“框架”,我无需编写代码具体的“回复”代码,只需要规定数据库查询就可以,比上一种情况简单得多。
  3. 客户端:收到服务器的回复,然后进行下一步操作。
  • 这里我们涉及到了一些之前没涉及到的概念。
  • 首先:数据库是干什么的,为什么很多时候服务器不可以独立给客户端回复呢?而一定要通过数据库才行呢。
  • 其次:HTTP请求还分GET方法和POST方法,这是什么意思?
  • 另外:URL编码是干什么的?端口又是什么?下面着重讲解以下内容。

二、HTTP协议详解

  • HTTP请求包具体的样子是什么样的,这时候我应该会给你们抓一个包来现场看看,到底是什么样的,这里根据实例讲解。
  • GET方法:是一种通过URL本身传送所需要的数据的方式,例如:http://example.com/test.php?id=1&sys=2就是一个GET方法的URL,其特点是GET方法会把所请求的参数表示在URL里面。
  • HTTP编码(URL编码):因为URL本身不能包含特殊字符,所以URL中如果包含非ASCII字符(例如汉字),就需要进行编码。注意区分编码和消息摘要以及加密,加密是有密钥的,没有密钥无法还原;消息摘要是没有密钥的,不能还原;编码也是没有密钥,但是随时都可以还原。这里我会用我自己服务器的例子。
  • 实际上在刚刚我的iOS端程序里,在URL编码的过程中使用了QueryAllowed这个东西,这个其实就和SQL注入有关系,我们一会儿讲完了数据库再讲SQL注入的问题。
  • POST方法:传送的数据放在HTTP请求包里,不体现在URL本身。但是要注意无论是GET还是POST,不采用HTTPS的话都没有安全性可言,只不过GET方法在编程的时候更容易实现一些。

三、数据库和SQL语句

  • 数据库:简单而言就是存储数据的一个专用软件,你们可以简单理解为Excel表格的样子。数据库中有很多的表,表中有行和列。
  • 为什么要有数据库:数据库是专门用于存储各种数据的,而服务器一般都忙于处理客户端的请求(一般称为业务),将业务和数据分离是有利于程序设计和系统的维护的。所以服务器经常会再向数据库请求一些东西。
  • 数据库的操作:数据库的操作使用的是SQL语句完成的,SQL语句十分容易,这里会讲一些SQL语句的例子来。
  • SQL注入:一般来说,在服务器端脚本,会把用户的输入放入SQL语句中,并将SQL语句提交给数据库执行。但是用户的输入是不确定的,不可信赖的,所以如果用户输入了精巧的SQL语句,可能会使得数据库的数据被泄露,这就称为SQL注入。刚刚我程序里的QueryAllowed就可以一定程度上防御SQL注入,而我之前的程序就没有考虑这个问题,可能存在SQL注入。
  • 总结:客户端-服务器-数据库的三个层次结构,这就是一般的业务所实现的方式。