print """Content-Type: image/jpeg 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

print """Content-Type: image/jpeg

Поиск

#!/usr/bin/python

 

import sys

 

print """Content-Type: image/jpeg

"""

 

import Image

 

i = Image.new("RGB", (10,10)) i.im.draw_rectangle((0,0,10,10), 1) i.save(sys.stdout, "jpeg")

 

Модуль cgi

 

ВPythonимеется поддержкаCGIв виде модуля cgi.Следующий пример показывает некоторые из его возможностей:

 

#!/usr/bin/python

 

# -*- coding: cp1251 -*-import cgi, os

# анализ запроса

 

f = cgi.FieldStorage() if f.has_key("a"):

a = f["a"].value else:

 

a = "0"

 

# обработка запроса b = str(int(a)+1)

mytext = open(os.environ["SCRIPT_FILENAME"]).read() mytext_html = cgi.escape(mytext)

# формирование ответа

 

print """Content-Type: text/html

 

<html><head><title>Решение примера: %(b)s = %(a)s + 1</title></head> <body>

%(b)s

<table width="80%%"><tr><td>

<form action="me.cgi" method="GET">

 

<input type="text" name="a" value="0" size="6"> <input type="submit" name="b" value="Обработать"> </form></td></tr></table>

 

<pre> %(mytext_html)s </pre>

 

</body></html>""" % vars()


 


В этом примере к заданному в форме числу прибавляется1.Кроме того,выводится исходный код самого сценария.Следует заметить,что для экранирования символов >, <, & использована функция cgi.escape().Для формированияWeb-страницы применена

 

операция форматирования.В качестве словаря для выполнения подстановок использован словарь vars() со всеми локальными переменными.Знаки процента пришлось удвоить,

чтобы они не интерпретировались командой форматирования.Стоит обратить внимание на то,как получено значение от пользователя.Объект FieldStorage"почти"словарь,с тем исключением,что для получения обычного значения нужно дополнительно посмотреть атрибут value.Дело в том,что в сценарий могут передаваться не только текстовые значения,но и файлы,а также множественные значения с одним и тем же именем.

Осторожно!

 

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

 

Например,не следует подставлять полученные от пользователя данные в путь к файлу,в качестве аргументов к функции eval() и ей подобных;параметров командной строки;

 

частей вSQL-запросах к базе данных.Также не стоит вставлять полученные данные напрямую в формируемые страницы,если эти страницы будет видеть не только клиент,заказавшийURL (например,такая ситуация обычна вweb-чатах,форумах,гостевых книгах),и даже в том случае,если единственный читатель этой информации-администратор сайта.Тот,кто смотрит страницы с непровереннымHTML-кодом,поступившим напрямую от пользователя,рискуют обработать в своем браузере зловредный код,использующий брешь в его защите.

 

Даже еслиCGI-сценарий используется исключительно другими сценариями через запрос наURL, нужно проверять входные значения столь же тщательно, как если бы данные вводил пользователь. (Так как недоброжелатель может подать наweb-сервер любые значения).

 

В примере выше проверка на допустимость произведена при вызове функции int(): если было бы задано нечисловое значение,сценарий аварийно завершился,а пользователь увидел Internal Server Error.

 

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

 

И,наконец,фаза вывода готового объекта(текста, HTML-документа,изображения,мультимедиа-объекта и т.п.).Проще всего заранее подготовить шаблон страницы(или ее крупных частей),а потом просто заполнить содержимым из переменных.

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 53; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.006 с.)