没有合适的资源?快使用搜索试试~ 我知道了~
boa-流程分析.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 179 浏览量
2021-09-13
17:12:13
上传
评论
收藏 1011KB PDF 举报
温馨提示
试读
15页
。。。
资源推荐
资源详情
资源评论
boa 流程分析
默认分类 2010-01-19 19:10:38 阅读 291 评论 0 字号:大中小 订阅
引 言
随着企业安全意识的增强以及现代化管理水平的提高,对设备的远程监控在
工业控制系统中得到了越来越广泛的应用。近年来,Web 技术广泛普及,把 Web
技术应用在这种监控系统中,可以让操作者通过浏览器维护和管理监测点,查看
监测数据。同时,监测中心的服务程序也可以很方便地通过 Web 把监测数据取
回来,进行进一步的处理,十分方便。
μClinux 是应用于微控制领域的一种嵌入式 Linux 操作系统,它源码开放,移
植性好,支持多种硬件平台和几乎所有常见网络通信协议,支持文件系统丰富,
是一个功能完整的嵌入式操作系统。并且有大量优秀的开放源代码的应用软件和
开发工具可用,因此,采用μClinux 作为操作平台,使用 Web 技术进行远程在线
监测系统的开发。
1 嵌入式 Web 服务器
为了能够通过 Web 来维护和管理远程在线监控系统,必须选择一个恰当的
Web 服务器,不但要求所选择的 Web 服务器支持动态 Web 技术,也要求它能够
在嵌入式系统中稳定地工作。
1.1 Web 服务器原理和功能
嵌入式 Web 服务器以 TCP/IP 协议栈为基础构建,需要实现 HTTP,TCP 和
UDP 等协议。任何一个客户机,都可以通过 HTTP 协议与嵌入式 Web Server 建立
连接。嵌入式 Web 服务器在 Web 浏览器和设备之间提供了统一的 GUI 接口,使
得客户端可以像在本地一样透明地监控管理设备状况。
嵌入式 Web 服务器的主要功能有:响应多个客户的实时 HTTP 请求,并为每
个客户建立连接,这是嵌入式 Web 服务器的首要功能;对设备的实时监控管理,
参数的在线查看与配置等;对设备访问的安全控制机制,包括 SSL、用户口令等;
实现设备的故障智能报警。
1.2 Boa 的特点
在 μClinux 中常用的 Web 服务器有:Boa,thttpd,httpd,其中 httpd 只支持
静态页面,显然不适合高级应用,thttpd 和 Boa 所提供的功能基本一样,但是
thttpd 在运行过程中所需要的资源要远大于 Boa,因此使用 Boa 作为该嵌入式系
统的 Web 服务器。系统的软件开发模型选用 B/S 模型。
Boa 是一个高性能的单任务型 Web 服务器,可以运行在几乎所有的类 Unix
的平台上,Boa 支持认证,支持 CGI,功能比较全,占用资源也少,非常适合于
用在资源有限的嵌入式系统中,目前 Boa 已经以源码的形式包含在 μClinux 的发
行包中。
2 Boa 源码分析
在此通过以下对 Boa 的源代码进行简单的分析,来提出解决避免恶意攻击的
安全解决方案。
2.1 Boa 工作流程
图 1 是 Boa 工作流程图。Boa 从新到达的套接字获得 HTTP 请求(由一个
request 结构来存储),并将其保存在队列当中。首先, get_request()将从套接字
获得的数据全部保存在 request→header_line 中,然后调用 process_request()来处
理在队列中的每一个请求。根据 request 结构中 status 所表示的不同状态,将进
行不同的处理。如果这个请求符合 HTTP 协议,则会调用 process_option_Iine()将
一 些 头 部 信 息 填 写 到 request 结 构 中 完 成 这 些 环 境 变 量 的 设 置 , 随 后
process_header_end()会对用户进行验证。如果验证通过则判断 request 结构中的
is_cgi,非 0 则是 CGI 程序,调用 init_cgi()函数进行处理,为 0 则是静态页面,调
用 init_get()函数进行处理。
2.2 init_get 函数工作流程
图 2 为处理静态页面请求的 init_get()函数的基本工作流程。图 2 中
process_get()函数完成的功能为将 request 结构中的 data_men 字符串返回套接字
并在用户浏览器上显示相应的内容。
2.3 init_cgi 函数工作流程
对 CGI 程序的处理函数 init_cgi()首先调用一系列函数完成对 CGI 环境变量的
设置,create_common_env(),complete_env()完成了大多数 CGI 环境变量的注册
工作。采用 PIPE(管道)方式,就是将 CGI 程序的输出重定向到管道,然后 Boa 从
管道读取并转发给客户端浏览器。整个流程结束后,返回到主函数的无限循环中
等待处理下一个套接字连接的到达。init_cgi()具体工作流程如图 3 所示。
管道读取函数 read_from_pipe()完成的主要功能是从套接字 req→data_fd 读
取数据到 req→header_end 中,并进行处理;然后修改 req→status=PIPE_WRITE
来调用 write_from_pipe()将 req→header_line 的内容返回套接字 fd,并在用户浏
览器上显示相应的内容。
3 Boa 源码改进
经过上述对 Boa 源码的分析可以看出,Boa 服务器将根据浏览器地址栏中输
入的文件路径调用相应的 CGI 程序或静态页面显示在浏览器中。这种方式使入侵
者很容易找到源文件,隐蔽性和安全性极差。这里在对 Boa 源码进行修改后,在
浏览器中输入对该系统指定的静态网页类型的请求后,Boa 服务器会自动进行文
件路径重定向,调用相应的 CGI 程序进行处理,而用户不会察觉到这一变化。从
而使用户无法得知源文件的路径,增加了程序的隐蔽性和安全性。
在源代码判断是否 CGI 程序之前添加判断:如果文件路径(req→pathname)
剩余14页未读,继续阅读
资源评论
苦茶子12138
- 粉丝: 1w+
- 资源: 6万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功