首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于μClinux下Boa的CGI技术实现 03

基于μClinux下Boa的CGI技术实现 03

 4.2 CGI程序工作原理
  CGI工作原理如下:客户端的用户通过浏览器完成一定输入工作后,向服务器发出。HTTP请求(称为CGI请求),服务器守护进程,接收到该请求后,就创建一个子进程(称为CGI进程)。该CGI子进程将CGI请求的有关数据设置成环境变量,在CGI程序与服务器间建立两台数据通道,然后启动URL指定的CGI程序。子进程通过标准输出流将处理结果传递给服务器守护进程,守护进程再将处理结果作为应答消息回送到客户端。一个CGI程序的任务分为输入任务和输出任务。输入任务根据请求方法的不同,从环境变量QUE-RY_STRING或标准输入中读取用户输入数据。输出任务生成HTTP响应头标内容,如消息正文的数据类型和数据长度等;生成HTTP响应消息正文内容,如动态生成的HTML文件内容。
  4.3 CGI程序改进方法
  传统的CGI程序编写方法简单地用printf()函数来产生HTML源代码。在输出的字符串中如果有双引号,在其前面必须有一个后斜字符,这是因为整个HTML代码串已经在双引号内,所以HTML代码串中的双引号符必须用一个后斜字符来转义。这样的CGI程序代码冗长,不利于阅读,且容易出错。这里所采用的方法是预先将需要显示的网页保存成文件,采用仿“ASP”的技术,将需要动态显示的内容写入符号“|%”与“|”之间。并设计配置文件,指定替换内容。CGI程序逐行读取源文件,将符号“|%”与“|”之间的内容替换成配置文件指定的内容。
  HTML源文件的格式设计如下:
  单选按钮:

  CGI程序找出“|%”与“|”之间的关键字key,如果key中不包含“@”则直接替换与之对应的值;如果包含“@”,将关键字分为三部分:replacestr=checked,key=system_mode,keyvalue=route。寻找数据结构中与key相等的name,将对应的value与keyval-ue比较,如果相等则替换为type的值。具体流程如图5所示。

  当在任意用户端浏览器中输入目标板的IP地址及对应的文件名后,就会显示如图6所示界面。其中在地址栏中输入的路径已经按照本文之前的方法被Boa服务器修改,实际路径为:http://192.168.0.1/cgi-bin/qs2.cgi。因此用户无法找到源文件,减小了被恶意用户攻击的可能性。图5中选中单选框和添加文本框内容这些操作都是经过CGI程序替换显示的配置文件中的内容。修改这些内容后点击下一步程序会自动保存到配置文件中,下一次再进入页面后就会显示上一次保存的结果。

  5 结 语
  这里通过对Boa源代码的分析,提供了较为完善的文件隐藏机制,该研究为Web服务器在嵌入式设备远程监控应用中提出了一个更为安全的解决方案。此外,通过对传统的CGI程序设计方法进行改进,可显著减少CGI程序代码量,使其便于修改升级。这种方法完全可以应用在其他嵌入式系统中,因此具有广泛的应用意义。系统也有一些尚需改进的地方,如:文件路径隐藏方式有些简单;CGI程序配置文件没有进行加密;这些都有待今后进一步研究。
返回列表