C/С++ CGI для встроенного устройства, POST, GET, LOGIN?

У меня есть небольшое встроенное устройство с uClinux. Существует веб-сервер Boa, который поддерживает сценарии CGI. Мне нужно сделать основные динамические страницы.

Требования

  • Метод GET для навигации
  • Метод POST для форм
  • ВХОД для аутентификации

Я нашел эту страницу http://www.cs.tut.fi/~jkorpela/forms/cgic.html Описывается, как реализовать методы GET и POST.

Но как насчет входа и пользователей? Можно использовать логин и пароль из linux? У вас есть пример, как реализовать проверку подлинности HTTP?

Или лучше использовать эту библиотеку cgi С++? http://www.gnu.org/software/cgicc/

У меня нет опыта в этом, спасибо.

Ответ 1

Или вы можете попробовать http://www.gnu.org/software/libmicrohttpd/ (никогда не использовались, но есть ссылки на google в uClinux-dist).

Ответ 2

Я также запускаю CGI в C на встроенном устройстве и используя cgihtml библиотеку с открытым исходным кодом от Eugene Eric Kim.

Пока это хорошо работает для методов POST и GET. Я не использовал его для аутентификации.

http://www.eekim.com/software/cgihtml/index.html

Ответ 3

Я думаю, вы можете использовать параметры URL или файлы cookie для хранения информации об аутентификации. Обратитесь к протоколу HTTP для хранения файлов cookie.

Ответ 4

Я не уверен, поддерживает ли дистрибутив Linux Perl. Недавно я разработал приложение CGI с использованием веб-сервера Perl и BOA для Angstrom Embedded Linux.

вы можете использовать Perl CGI-модуль для этого.

Ответ 5

Для аутентификации вам необходимо сохранить "таблицу состояний сеанса" на сервере. Это статическая структура данных, файл или таблица db, которая отслеживает идентификаторы сеансов, прошедших проверку подлинности, идентификаторы пользователей, на которые они сопоставляются, и разрешения. По соображениям безопасности, вероятно, также неплохо сохранить IP-адрес и пользовательский агент в таблице состояний (когда Slashdot спрашивает вас о том, что ваш сеанс никогда не перемещается, перемещается внутри подсети или не следует за вами повсюду, потому что они недействительны для любого сеанса который поступает из-за пределов вашего диапазона IP, если вы не сообщите им конкретно, что все в порядке).

Затем ваши программы CGI могут ссылаться на таблицу состояния сеанса, чтобы узнать, поступает ли данный запрос от пользователя входа в систему, кто этот пользователь и какие разрешения у них есть.

По соображениям безопасности вы должны хранить клиентскую часть идентификатора сеанса в файле cookie, а не в строке GET. Убедитесь, что ваши идентификаторы сеанса являются случайными, насколько это возможно.

EDIT: лучшим вариантом для таблицы состояний сеанса будет либо MySQL/PostgreSQL, если вы используете его, либо, может быть, IPC с небольшой программой на C, которую вы пишете специально для этой цели, используя либо встроенную самодельную структура данных или SQLite

Ответ 6

Это показывает аутентификацию дайджеста, но лучше всего использовать библиотеку, чтобы обеспечить ее правильное обращение во всех случаях. Обратите внимание, как он использует GET, хотя POST будет работать так же хорошо.

http://en.wikipedia.org/wiki/Digest_access_authentication

Этот тип проверки подлинности позволяет браузеру отображать небольшое окно для подробностей, а не в форме HTML. Неясно, какой механизм входа вы используете.

Ответ 8

Я бы использовал http://webtookit.eu

Они обеспечивают режим развертывания FastCGI для ваших приложений: http://www.webtoolkit.eu/wt/doc/reference/html/overview.html#fastcgi

Или встроенный веб-сервер (так что вы могли бы сорвать boa): http://www.webtoolkit.eu/wt/doc/reference/html/overview.html#wthttpd

И недавно добавлена ​​аутентификация: http://www.webtoolkit.eu/wt/doc/reference/html/group__auth.html#details

Ответ 9

вы можете просто попробовать thttpd или LightHTTPd, чтобы служить этому puropose, писать пользовательский веб-сервер С++ - это лучшее решение, если у вас не так много функций, чтобы смотреть на... u можно только начать с поиска http://www.jbox.dk/downloads/webserver.c эту реализацию и расширить ее для поддержки пользовательских потребностей пользователя. Если вы не планируете создание динамических веб-сайтов на веб-сервере,

С уважением, Mike

Ответ 10

загрузить сервер кэша squid, он имеет хороший безопасный и быстрый cgi с c.