nweb_nweb:小型安全的Web服务器(仅静态页面)

本文介绍了nweb,一个仅200行C代码的简单Web服务器,专注于安全,仅支持静态内容。nweb不运行任何服务器端脚本,避免了特权和安全漏洞。文章探讨了nweb的功能、套接字系统调用、伪代码、客户端操作以及源代码。此外,还提供了服务器和客户端示例源代码,适合学习和试验。
摘要由CSDN通过智能技术生成

您是否曾经想过运行一个小型,安全的Web服务器,而不必担心使用安装和配置可能很复杂的功能强大的Web服务器? 您是否想知道如何编写一个通过网络套接字接收传入消息的程序? 您是否曾经希望自己的Web服务器进行试验和学习? 2012年将进行进一步更新,以支持最新的Web服务器和浏览器标准以及代码更新。

好吧,别无所求-nweb是您所需要的。 这是一个只有200行C源代码的简单Web服务器。 它以常规用户身份运行,并且无法运行任何服务器端脚本或程序,因此无法打开任何特殊特权或安全漏洞。

本文介绍:

  • nweb服务器程序提供什么
  • 程序中C函数功能的摘要
  • 伪代码有助于理解代码流
  • 使用的网络套接字系统调用和其他系统调用
  • 客户端如何操作
  • C源代码

nweb仅将以下类型的文件传输到浏览器:

  • 扩展名为.html或.htm的静态网页
  • .gif,.png,.jgp或.jpeg等图形图像
  • 压缩的二进制文件和归档文件,例如.zip,.gz和.tar

如果您喜欢的静态文件类型不在此列表中,则只需将其添加到源代码中,然后重新编译即可。

提供的示例文件包括C语言中的UNIX®源代码和AIX®的预编译源代码。 该源将使用IBMVisualAge®C编译器或GNU C编译器进行编译,并且应在AIX,Linux®或任何其他UNIX版本上保持不变。

使用以下命令进行编译。 该程序使用C语言编写,不需要任何其他库或服务。 仅当您要优化代码时才需要-O2选项:

cc –O2  nweb.c –o nweb

nweb中的功能

源代码中只有很少的功能,如下所述。

log()
将消息记录到日志文件。 如果用户请求Web服务器不允许或无法完成的操作,则nweb尝试直接通知用户。 这是通过将包含错误消息的假网页返回给用户来完成的。 由于仅从子Web服务器进程中调用此函数,因此该函数可以(一旦完成)退出,并且主Web服务器进程继续允许进一步的浏览器连接请求。 如果这不是可恢复的错误,则该过程将停止。
web()
处理HTTP浏览器请求,并将数据返回到浏览器。 在子进程中调用此函数-每个Web请求一个。 它还允许主Web服务器进程继续等待更多连接。 进行检查以确保请求是安全的并且可以完成。 完成检查后,它将请求的静态文件传输到浏览器并退出。
main()
这是Web服务器的主要处理功能。 检查命令参数之后,它将为传入的浏览器请求创建一个套接字,位于接受请求的循环中,并启动子进程来处理它们。 它永远不会结束。

伪代码

下面的清单1是大约200行源代码的伪代码。 它应该可以帮助您了解程序的流程。

清单1.伪代码
logger()

{

outputs error, sorry or log messages to the nweb.log file

if a sorry message, transmit it to the browser as a fake HTML response

if error or sorry message the program is stopped

}



web()  - this function returns the request back to the browser

{

read from the socket the HTTP request

check it’s a simple GET command

check no parent directory requested to escape the web servers home directory

if no file name given assume index.html

check the file extension is valid and supported

check the file is readable by opening it

transmit the HTTP header to the browser

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值