CGI

2017-10-27 4 views
1

C 프로그램으로 간단한 HTML 페이지를 생성하는 C를 사용하여 :CGI

#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 페이지를 만들기 위해 C 프로그램을 사용하려고

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

html에서 GET으로 uname하십시오. 내가 처음으로 CGI로 C를 컴파일하여이 작업을 수행하려고 :

GCC echo.c -o echo.cgi 그것을 잘 수행

. 그러나 제출을 누를 때마다 cgi 파일이 다운로드되기 시작합니다. 내가 뭘 잘못하고 있니?

+0

서버 구성이 잘못된 것처럼 보입니다. CGI 인터페이스를 제대로 구성 했습니까? – fvu

+0

양식에있는 "get"은 내가 자주 보지 않는 것입니다. –

+0

또한 "Content-Length"헤더가 아닌 것으로 보입니다. 대부분의 브라우저에서 올바른 결정을 내리고 싶습니까? –

답변

0

CGI가 구성된 HTTP 서버를 통해 이것을 실행해야합니다. 브라우저의 로컬 HTML 파일로 이동하기 만하면 코드가 실행되지 않습니다. 서버는 코드를 실행하고 출력을 응답으로 리턴합니다.

또한 CGI는 보안상의 위험이 있음을 지적하고 싶습니다. 이 코드는 아마도 최소한의 샘플 코드 일뿐입니다. 그러나 sscanf을 호출하기 전에 문자열 범위를 확인하지 않으므로 에 누군가가 서버에 액세스하는 데 악용 할 수있는 취약점이 있습니다.https://en.m.wikipedia.org/wiki/Buffer_overflow