Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.
CGI-прграммы

Стандатр CGI(Common Gateway Interface, т. е. общий шлюзовый интерфейс) явился первой ласточкой в развитии программирования на стороне сервера. CGI-программа называется ещё скриптом и может в принцепе быть написаной на любом языке программирования. Самый популярный язык для написания CGI-скриптов - Perl. Однако, как мы сейчас увидим, писать CGI-программы на С - весьма простое занятие.

Смысл работы CGI-программы в следующем:

  • CGI-программа получает данные через окружение;
  • стандартный вывод для CGI-программы означает формирование новой Web-стрвницы и передача её клиенту.

Итак, начнем с разбора окружения. Вспомним, что стандартный заголовок главной функции С-программы имеет вид:

int main(int argc, char* avgv[], char* envp[])

Параметр envp представляет собой масив строк, закнчивающийся строкой NULL. Это и есть окружение. Таким образом, мы легко можем посмотреть весь масив в поисках нужных данных.

Создадим проект простой консольной программы:

#include "stdafx.h"
 
 #include "cgi1.h"
 
 #include <stdlib.h>
 
 
 
 int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 
 {
 
 	printf("Content-Type: text/html\n\n");
 
 	printf("<HTML>\n");
 
 	printf("<HEAD> <TITLE>Пример CGI-программы </TITLE></HEAD>\n");
 
 	printf("<BODY>"\n);
 
 	printf("Пример CGI-программы на С\n");
 
 	int i=0;
 
 	while(envp[i])
 
 	{
 
 		printf("<p>значение параметра %s </p>",envp[i]);
 
 		i++
 
 	}
 
 	printf("</BODY>\n");
 
 	printf("</HTML>\n);
 
 	return 0;
 
 }

Ниже представлен результат работы программы, отображаемый броузером. Для вызова CGI достаточно на странице указать форму с сылкой на CGI-программу.
Например, вот так:

<form action="cgi1.exe" method="get" ID="Form1">
 
 	<input name="last" ID="Text2">
 
 	<input type="submit" ID="Submit1" NAME="Submit1">
 
 	<input type="reset" ID="Reset1" NAME="Reset1">
 
 </form>

По нажатии кнопки Submit будет выдана страница с представленой ниже информацией. В действительности, однако, можно поступить ещё проще: набрать в строке броузера команду, где вместо имени страници указать имя CGI-программы. Напримет так:
http://имя_сервера/cgi1.exe

Результат работы такстовой CGI-программы

Пример CGI-программы на С
Значение параметра ALLUSERSPROFILE=E:\Documents and settings\All Users
Значение параметра CommonProgramFiles=E:\ProgramFiles\Common Files
Значение параметра ComSpac=E:\WINNT\system32\cmd.exe
Значение параметра CONTENT_LENGTH=0
Значение параметра GATEWAY_INTERFACE=CGI/1.1
Значение параметра HTTP_ACCEPT=image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.mspowerpoint,application/vnd.msexcel,application/msword,*/*
Значение параметра HTTP_ACCEPT_LANGUAGE=ru
Значение параметра HTTP_CONNECTION=Keep-Alive
Значение параметра HTTP_HOST=localhost
Значение параметра HTTP_REFERER=http://localhost/index.html
Значение параметра HTTP_USER_AGENT=Mozila/4.0
и т. д.

Самой важной для нас строкой окружения является QUERY_STRING. Здесь содержатся параметры, передаваемые в CGI-программу. Конечно здесь придётся самому писать процедуру разбора командной строки, но это совсем не сложно. Как видим, формат строки представляет собой следующую строку:
имя=значение&имя1=значение&...



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS