1

C程序:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char *data = getenv("QUERY_STRING");
    char userName[30];
    sscanf(data,"uname=%s", userName);
    printf ("Content-Type: text/html\n\n");
    printf ("<html>");
    printf ("<head> </head>");
    printf ("<body>");
    printf ("<h2 style=""text-align:center;color=red"";> %s </h2>", userName);
    printf ("</body> </html>");
    return 0;
}

HTML:

<!doctype html>

<html lang="en">

<head>

</head>

<body>
    <form action="echo.cgi" method="get">
        Please enter your name: <input type="text" name="uname">  <br> 
        <input type="submit" value="Submit">
    </form>
</body>

</html>

我正在尝试使用 C 程序制作一个简单的 html 页面,该页面仅显示带有来自 html 的 GET 的变量 uname。我试图通过首先将 C 编译为 CGI 来做到这一点:

gcc echo.c -o 回声.cgi

它做得很好。但是,每当我按下提交时,cgi 文件就会开始下载。我究竟做错了什么

4

1 回答 1

0

您必须通过配置了 CGI 的 HTTP 服务器运行它。简单地将浏览器导航到磁盘上的本地 HTML 文件不会执行您的代码。服务器将执行您的代码并将输出作为响应返回。

另外,我想指出 CGI 是一种安全风险。我意识到这可能只是最小的示例代码,但是由于您在调用之前没有检查字符串的边界sscanf因此您有一个漏洞,有人可以利用该漏洞来访问您的服务器。 https://en.m.wikipedia.org/wiki/Buffer_overflow

于 2017-10-27T21:00:01.637 回答