CGI

2017-10-27 9 views
1

Cプログラムで、単純なHTMLページを生成するために、Cを使用して:私はちょうど変数を表示する簡単なHTMLページを作成するCプログラムを使用しようとしていますCGI

<!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> 

#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 htmlからGETでunameを実行します。 gccのecho.c -o echo.cgiそれがうまくない

:私が最初にCGIにCをコンパイルすることによって、これを行うにしようとしています。しかし、submitを押すたびに、cgiファイルのダウンロードが始まります。何が間違っているのですか

+0

サーバーの設定ミスのようです。 CGIインターフェイスを正しく設定しましたか? – fvu

+0

あなたのフォームの「取得」は、私があまり頻繁に見ていないものです。 –

+0

また、「Content-Length」ヘッダーではないようですが、ほとんどのブラウザーが正しい決定をするために探していますか? –

答えて

0

CGIを設定したHTTPサーバーでこれを実行する必要があります。ブラウザのブラウザをディスク上のローカルHTMLファイルに移動するだけでコードを実行することはありません。サーバーはコードを実行し、出力を応答として返します。

また、CGIがセキュリティリスクであることを指摘したいと思います。これはたぶん最小限のサンプルコードだと認識していますが、sscanfを呼び出す前に文字列の境界をチェックしていないため、にはあなたのサーバーへのアクセスに悪用される脆弱性があります。https://en.m.wikipedia.org/wiki/Buffer_overflow