c 语言cgi编程,几种语言的CGI编程

为了了解PHP、JSP、ASP出现之前人们写 站的方法,洒家研究了一波CGI,使用C、Python、batch、shell script语言写了几个简单的 页。

CGI即通用 关接口,指web服务器调用编程语言编写的程序的一个接口。洒家用的是Apache的CGI,QUERY_STRING、REMOTE_ADDR、REQUEST_URI等参数是通过环境变量传递给CGI程序的,请求主体(POST数据)作为CGI程序的标准输入(stdin),而CGI程序的标准输出(stdout)作为HTTP响应的部分(注:标准错误输出stderr会出现在错误日志中)。

系统和软件环境配置

WAMP Apache 2.4.18 64位, Ubuntu Server 16.04 64位。

需要开启Apache的cgi_module。

sudoa2enmod cgisudo service apache2 restart

对于Linux,cgi-bin的目录在 /etc/apache2/conf-enabled/serve-cgi-bin.conf 中规定,使用浏览器访问这个目录的alias:/cgi-bin/。对于Windows 下的WAMP套件,对应目录默认在安装目录内(例如C:/wamp64/cgi-bin/)。

Date: Sun, 23 Oct 2016 13:10:01 GMT

Server: Apache/2.4.18 (Ubuntu)X-Author: http://www.cnblogs.com/go2bed/

Vary: Accept-Encoding

Content-Length: 1180

Connection: close

Content-Type: text/html

SERVER_SIGNATURE=

Apache/2.4.18 (Ubuntu) Server at 192.168.245.136 Port 80

HTTP_USER_AGENT=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7

SERVER_PORT=80

HTTP_HOST=192.168.245.136(省略)

intmain()

{

printf(“Content-Type: text/htmlnn”);

printf(“Hello World!n”);return 0;

}

一个 say hello 的动态 页

Linux/Windows,Python ,头部需要加Python可执行文件的位置。对于Windows,则可能是 #!C:/Python27/python.exe 。

效果如下图。此程序读取POST数据(stdin),Tom未在URL中出现。

intmain()

{inti;char *query;

query= getenv(“QUERY_STRING”);

printf(“Content-type:text/htmlnn”);if(getenv(“QUERY_STRING”) != NULL && strlen(getenv(“QUERY_STRING”)) > 5)

{

printf(“

Hello %s

n”, query + 5);

}

printf(“

“);return 0;

}

执行任意命令的Webshell,及其过程与经验

Linux,shell script

效果:

这个错误输出和下面的情况的输出相同:

经过一番研究之后洒家恍然大悟,这个 错表示,Python收到的参数(sys.argv[2])为  ‘import ,单引 的作用不是命令行中参数的边界,而是直接作为参数的一部分传进了Python。也就是说,直接执行  ${cmd} 相当于Python中的

subprocess.call([“python”,”-c”,”‘import”,”this'”])

一个字符串变量直接执行会有问题,正确的做法要用eval命令“扫描两次”,才能正确解析。使用 eval ${cmd} 使shell重新扫描命令,把 import 和 this看做同一个参数,相当于 subprocess.call([“python”,”-c”,”import this”]) 。

总而言之,这次的错误类似于这种情况:

使用Windows batch script(批处理)写的一个功能有限的webshell

批处理,这个的坑也有点多,而且洒家也不太熟悉,只能写这么多了。

相关资源:基于单片机的智能灌溉喷洒系统的设计_单片机灌溉喷头-单片机文档…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年4月14日
下一篇 2021年4月14日

相关推荐