unix에서 cgi 호출

pogs의 이미지

unix에서 c로 프로그램밍을 하고 있습니다.

c에서 cgi로 만든 페이지를 호출할 수 있는지 궁금합니다.

예로 c코팅중 test.cgi?id=iopoo 이런식으로 test.cgi페이지를 호출할려고 합니다.

이런게 가능한지 궁금합니다.

초보라서 잘 모릅니다.

ifyou의 이미지

가능합니다.

http규약에 따라 헤더 구성해서 보내고,

날아오는 것도 http 규약에 따라 해석하면 됩니다.

http 규약을 볼 시간이 없으면, 해당 페이지를

웹브라우저로 호출해 보고, 그 과정을 패킷 캡쳐해서

그대로 사용해도 별 문제 없습니다. 간단한 것은....

더 궁금점이 있으면 나중에.. 지금은 바빠서리~~ :lol:

see2002의 이미지

소켓으로 웹서버에 접속해서 요청해서 날라오는 결과값을 받으면 될거같은데요.
유닉스 네트워크프로그래밍 소켓관련 서적을 보시면 잘 나와있습니다.

아니면, 아주간단한 방법으로 C의 system함수를 써서("wget http://어쩌고.com/test.cgi?id=iopoo") 저장된 파일을 읽으면 될듯하군요.
이건 좀 무식한 방법이지만...

gnoygnas의 이미지


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char *argv[])
{
	int i=0;
	
	char *buffer;
	
	// 웹을 이용한 프로그래밍일 경우 아래와 같이 꼭 써준다.
	printf("content-type: text/html\n\n");

	buffer = (char*)malloc(sizeof(char) * 400);
	sprintf(buffer, "%s", getenv("QUERY_STRING"));
	printf("argc = %d \n<br>", argc);

	int i;

	for (i=0; i<argc; i++)
		printf("argv[%d] : %s<br>", i, argv[i]);

                free(buffer);

                exit(0);
}

지금 생각나는데로 써서 틀릴수도 있습니다.

웹상에서

http://192.168.1.1/cgi-bin/test.cgi?id=1&name=park

이런식으로 해보세요...
그러면 argument로 넘어간 것을 printf로 뿌려질겁니다.

[/code]

One must, In fact, Love your pursuit
My home is below...Well, just go own your gait!

jj의 이미지

see2002 wrote:
아주간단한 방법으로 C의 system함수를 써서("wget http://어쩌고.com/test.cgi?id=iopoo") 저장된 파일을 읽으면 될듯하군요.
이건 좀 무식한 방법이지만...

이런식의 방법이 왜 무식한 건지 모르겠군요. :)

--
Life is short. damn short...

kslee80의 이미지

jj wrote:
see2002 wrote:
아주간단한 방법으로 C의 system함수를 써서("wget http://어쩌고.com/test.cgi?id=iopoo") 저장된 파일을 읽으면 될듯하군요.
이건 좀 무식한 방법이지만...

이런식의 방법이 왜 무식한 건지 모르겠군요. :)

system() 함수를 사용하는 경우 생기는 단점을 모두 가지게 됩니다.
게다가, 이렇게 하는 경우 장점이라고는 코드의 간략함 정도밖에는 없죠.

서지훈의 이미지

jj wrote:
see2002 wrote:
아주간단한 방법으로 C의 system함수를 써서("wget http://어쩌고.com/test.cgi?id=iopoo") 저장된 파일을 읽으면 될듯하군요.
이건 좀 무식한 방법이지만...

이런식의 방법이 왜 무식한 건지 모르겠군요. :)


system()이라는 함수는 원래가 좀 보안상 홀이 많은 함수라 할 수가 있습니다.
아주쉬운 예로...
만약 실행하고자 하는 프로그램에대한 full-path를 주지 않는 경우 이 실행파일에 Set-UserID라도 붙어있고... root 사용자 파일이면 아주 문제는 심각해 지겠죠...
단지 PATH 환경 변수에 "." 이 dot을 하나를 추가 해주는 것만으로도 원하는 작업은 뭐든지 할 수가 있으니요...

그렇다고 full-path를 준다고 해도...
IFS 와 같은 환경 변수를 이용한 local-attack에도 취약 할 수가 있습니다.
(파일의 구분 단위를 " " space가 아닌 "/" 이 놈으로 바꾸는 것만으로도 또 문제가 생길 수가 있겠죠... 근데 요즘엔 이 환경 변수 먹질 않죠^^)
그리고 man 에서 보면은 인터럽트를 무시하는 버그도 있다고 하고...
뭐... 또 짱구를 굴리기에 따라서 문제의 소지가 있는 함수이니 사용을 지양하는게 좋을것 같군요...
테스트 코드가 아니라면...

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

jj의 이미지

서지훈 wrote:
system()이라는 함수는 원래가 좀 보안상 홀이 많은 함수라 할 수가 있습니다.

kslee80 wrote:
이렇게 하는 경우 장점이라고는 코드의 간략함 정도밖에는 없죠.

좋은 지적이네요.

단 제말의 의도는 꼭 system을 사용하라는 얘기가 아니라, binary의 process단위의 재활용을 너무 무시하지 말자는 얘기였죠.

코드의 간략함은 결코 작은 이익이 아니라고 생각합니다. 또한 라이브러리나 바이너리를 재활용 하는것이 간략함만을 추구하는것은 아니죠. 간략하고, 무엇보다 견고하기 때문이 아닌가요?

--
Life is short. damn short...

cdpark의 이미지

gnoygnas wrote:
	buffer = (char*)malloc(sizeof(char) * 400);
	sprintf(buffer, "%s", getenv("QUERY_STRING"));
	printf("argc = %d \n<br>", argc);

QUERY_STRING이 400 byte보다 더 길 경우에 문제가 될 수 있습니다. strlen으로 길이를 맞추거나, snprintf류를 쓰는게 좋겠죠.

만사 불여튼튼!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.