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

ВИДЕОКУРС ВЗЛОМ
выпущен 8 октября!


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

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



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

Как эмулировать отправку данныех формы на www-сервер при помощи WinInet

Для эмуляции отправки данных формы, необходимо отправить на сервер заголовок, содержащий правильный Content-Type. Для форм, заголовок Content-Type должен выглядеть следующим образом:

Content-Type: application/x-www-form-urlencoded 

Во многих случаях, сервер может неправильно отреагировать, если в запросе не указан Content-Type. Например, компонент Active Server Pages вебсервера IIS 3.0 проверяет заголовок на наличие в нём 'application/x-www-form- urlencoded' перед тем, как добавить переменные формы в объект "Request.Form". Данный MIME/Content-Type указывает на то, что передаваемые данные это список URL-кодированных переменных формы. Под URL-кодированием понимается, что символы пробела (ASCII 32) будут закодированы как '+', а специальный символ, например, такой как '!' будет закодирован шестнадцатиричной форме как '%21'.

Вот кусок кода, использующего классы MFC WinInet для эмуляции запроса формы POST:

   CString strHeaders =
       _T("Content-Type: application/x-www-form-urlencoded");
    // URL-кодированные переменные формы -
    // name = "John Doe", userid = "hithere", other = "P&Q"
    CString strFormData = _T("name=John+Doe&userid=hithere&other=P%26Q");
 
    CInternetSession session;
    CHttpConnection* pConnection =
       session.GetHttpConnection(_T("ServerNameHere"));
    CHttpFile* pFile =
       pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,
                               _T("FormActionHere"));
    BOOL result = pFile->SendRequest(strHeaders,
       (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength()); 

Без MFC тот же код будет выглядет следующим образом:

   static TCHAR hdrs[] =
       _T("Content-Type: application/x-www-form-urlencoded");
    static TCHAR frmdata[] =
       _T("name=John+Doe&userid=hithere&other=P%26Q");
    statuc TCHAR accept[] =
       _T("Accept: */*");
 
    // для понятности, проверка ошибок была удалена
    HINTERNET hSession = InternetOpen("MyAgent",
       INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    HINTERNET hConnect = InternetConnect(hSession, _T("ServerNameHere"),
       INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
    HINTERNET hRequest = HttpOpenRequest(hConnect, "POST",
       _T("FormActionHere"), NULL, NULL, accept, 0, 1);
    HttpSendRequest(hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata));
    // закрываем internet-дескрипторы

 


За более подробной информацией URL-кодированию и формату запроса POST обращайтесь к секции 8.2 в RFC 1866.




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

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




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



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


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