嵌入式设备上的C / C ++ CGI,POST,GET,LOGIN?

时间:2010-08-30 14:56:35

标签: c++ c cgi webserver

我这里有一个带uClinux的小型嵌入式设备。 有一个支持CGI脚本的Boa Web服务器。 我需要制作基本的动态页面。

要求

  • GET导航方法
  • 表单的POST方法
  • 登录进行身份验证

我找到了这个页面http://www.cs.tut.fi/~jkorpela/forms/cgic.html 描述了如何实现GET和POST方法。

但是登录和用户呢? 可以使用linux的登录名和密码吗? 您是否有一个如何实现http身份验证的示例?

或者更好地使用这个cgi c ++库? http://www.gnu.org/software/cgicc/

我对此没有经验,谢谢。

10 个答案:

答案 0 :(得分:1)

或者你可以尝试http://www.gnu.org/software/libmicrohttpd/(从未使用过,但在uClinux-dist中谷歌上有引用)。

答案 1 :(得分:1)

对于身份验证,您需要在服务器上保留“会话状态表”。这是一个静态数据结构,文件或db表,用于跟踪当前经过身份验证的会话ID,它们映射到的用户ID以及权限。出于安全原因,将IP地址和用户代理存储在状态表中可能也是一个好主意(当Slashdot询问您的会话是否永远不会移动,在子网内移动,或者跟随您到处时,这是因为它们使任何会话无效来自你的IP范围以外,除非你明确告诉他们这是可以的)。

然后,您的CGI程序可以引用会话状态表,以查看给定请求是来自登录用户,该用户是谁以及他们拥有哪些权限。

出于安全原因,您应该将会话ID客户端存储在cookie中,而不是存储在GET字符串中。确保您的会话ID尽可能随机。

编辑:对于会话状态表,你最好的选择是MySQL / PostgreSQL,如果你正在使用它,或者你可能使用一个专门为此目的编写的小型C程序的IPC,使用内置的本地语言数据结构或SQLite

答案 2 :(得分:0)

我还在嵌入式设备上运行C中的CGI,并使用Eugene Eric Kim的cgihtml开源库。

到目前为止,它似乎适用于POST和GET方法。我没有用它进行身份验证。

http://www.eekim.com/software/cgihtml/index.html

答案 3 :(得分:0)

我认为您可以使用URL参数或cookie来存储身份验证信息。有关如何存储cookie的信息,请参阅HTTP协议。

答案 4 :(得分:0)

我不确定您的Linux发行版是否支持Perl。我最近使用Perl和BOA Web服务器为Angstrom Embedded Linux开发了一个CGI应用程序。

你可以使用perl CGI模块。

答案 5 :(得分:0)

这显示了摘要式身份验证,但您最好使用库来确保在所有情况下都能正确处理。请注意它是如何使用GET的,尽管POST也能正常工作。

http://en.wikipedia.org/wiki/Digest_access_authentication

这种身份验证让浏览器弹出一个窗口来显示详细信息,而不是HTML表单。目前尚不清楚您正在使用哪种登录机制。

答案 6 :(得分:0)

尝试切诺基,它支持各种功能,以及嵌入式Linux平台。

http://www.cherokee-project.com/

http://en.wikipedia.org/wiki/Cherokee_%28web_server%29

答案 7 :(得分:0)

我会使用http://webtookit.eu

他们为您的应用提供了FastCGI部署模式:http://www.webtoolkit.eu/wt/doc/reference/html/overview.html#fastcgi

或内置的网络服务器(所以你可能会放弃蟒蛇):http://www.webtoolkit.eu/wt/doc/reference/html/overview.html#wthttpd

最近添加了身份验证:http://www.webtoolkit.eu/wt/doc/reference/html/group__auth.html#details

答案 8 :(得分:-1)

下载squid缓存服务器,它具有良好的安全性和快速cgi与c。

答案 9 :(得分:-2)

你可以尝试使用thttpd或LightHTTPd来实现这个目的,编写一个自定义C ++网络服务器是最好的解决方案,如果你没有太多的功能可以看...你可以从查看http://www.jbox.dk/downloads/webserver.c开始这个实现并扩展它以支持您的自定义需求。如果您没有计划在网络服务器中使用动态网页托管设施。

此致 麦克