【问题标题】:using C to generate simple html page with cgi使用C用cgi生成简单的html页面
【发布时间】:2018-04-09 12:28:27
【问题描述】:

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 页面,该页面仅显示带有 GET from html 的变量 uname。我试图通过首先将 C 编译为 CGI 来做到这一点:

gcc echo.c -o echo.cgi

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

【问题讨论】:

  • 看起来像是服务器配置错误。您是否正确配置了 CGI 接口?
  • 你的表单中的“get”是我不经常看到的东西,有机会修复它吗?
  • 另外,它似乎不是“Content-Length”标头,大多数浏览器都在寻找它来做出正确的决定?
  • 你的echo.cgi二进制文件在cgi-bin子目录下吗?
  • 但是,每当我按下提交时,cgi 文件就会开始下载。 你到底是什么意思?你打开浏览器到http://server/path/file.html了吗?还是您正在做一些不同的事情,例如在网络浏览器中本地打开 HTML 文件?

标签: html c cgi getenv


【解决方案1】:

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

另外,我想指出 CGI 存在安全风险。我意识到这可能只是最小的示例代码,但由于您在调用 sscanf 之前没有检查字符串的边界,您有一个漏洞,有人可以利用该漏洞访问您的服务器。 @ 987654321@

【讨论】:

    猜你喜欢
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多