Экранирование текста сообщения и паролей в HTML

ekranirovanie teksta soobshheniya i parolej v html Сервер PyMailCGI

Обратите внимание, что все видимое на странице просмотра сообщения, изображенной на рис. 16.14, подверглось экранированию с помощью cgi.escape. Поля заголовков и сам текст сообщения могут содержать специальные символы HTML и должны транслироваться как обычно. Например, поскольку некоторые почтовые программы позволяют отправлять сообщения в формате HTML, текст сообщения может содержать тег </textarea>, который без экранирования безнадежно испортит страницу ответа.

Здесь есть одна тонкость: экранированные последовательности HTML важны, только когда текст посылается броузеру сценарием CGI. Если этот текст затем передается другому сценарию (например, при отправке ответа), текст вернется в исходный, непреобразованный формат, когда будет снова получен на сервере. Броузер анализирует экранированные последовательности и не возвращает их обратно при отправке данных формы, поэтому в дальнейшем не требуется делать обратное преобразование. Например, ниже приводится часть текста после экранирования, посылаемого броузеру во время выполнения операции Reply (Ответить) (воспользуйтесь пунктом меню броузера View Source (Исходный код страницы или Просмотр HTML-кода), чтобы увидеть его в реальности):

<tr><th align=right>Text:

<td><textarea name=text cols=80 rows=10 readonly> more stuff

>  Mark Lutz (http://rmi.net/~lutz) [PyMailCgi 2.0]

&gt; Original Message

&gt; From: lutz@rmi.net

&gt; To: lutz@rmi.net

&gt; Date: Tue May 2 18:28:41 2000

&gt;

&gt; &lt;table&gt;&lt;textarea&gt;

&gt; &lt;/textarea&gt;&lt;/table&gt;

&gt; Mark Lutz (http://rmi.net/~lutz) [PyMailCgi 2.0]

&gt;

&gt;

&gt; &gt; Original Message

После отправки этого ответа его текст выглядит так же, как перед экранированием (и в точности каким он был у пользователя на странице редактирования сообщения):

more stuff

>  Mark Lutz (http://rmi.net/~lutz) [PyMailCgi 2.0]

>  Original Message

>  From: lutz@rmi.net

>  To: lutz@rmi.net

>  Date: Tue May 2 18:28:41 2000 >

>  <table><textarea>

>  </textarea></table>

>  Mark Lutz (http://rmi.net/~lutz) [PyMailCgi 2.0]

> 

> 

>  > Original Message

Помимо обычного текста экранированию в соответствии с правилами HTML подвергается также и пароль. Хотя этого не видно в наших примерах, тем не менее, скрытое поле пароля в сгенерированной разметке HTML (как видно на рис. 16.14) после шифрования может иметь совершенно причудливый вид. Оказывается, пароль POP остается зашифрованным при помещении в скрытые поля форм HTML. Так и должно быть по соображениям безопасности. Значения скрытых полей страницы можно увидеть при просмотре исходного кода разметки в броузере, воспользовавшись пунктом меню броузера View Source (Исходный код страницы или Просмотр HTML-кода), и нельзя исключить возможность перехвата текста этой страницы при передаче в Сети.

Однако когда пароль помещается в скрытое поле, он уже не подвергается преобразованию в соответствии с правилами оформления адресов URL, как при добавлении в конец URL-ссылки с информацией о состоянии. В зависимости от алгоритма шифрования пароль, сгенерированный здесь как значение скрытого поля, может содержать непечатаемые символы, но броузеру это безразлично, поскольку поле пропускается через функцию cgi.escape, как и все другое, помещаемое в поток HTML ответа. Модуль commonhtml заботится о том, чтобы при создании страницы просмотра весь текст и заголовки были обработаны функцией cgi.escape.

Для сравнения на рис. 16.15 показано, как выглядит сообщение, приведенное на рис. 16.12, при просмотре в PyMailGUI — почтовом клиенте с графическим интерфейсом на основе tkinter из главы 14. В этой программе список частей сообщения можно получить с помощью кнопки Parts (Части) и извлечь, сохранить и открыть с помощью кнопки Split (Разбить); кроме того, в нашем распоряжении имеются кнопки быстрого доступа к частям и вложениям, расположенные ниже заголовков сообщения. С точки зрения конечного пользователя интерфейс выглядит похожим.

Рис. 16.15. Так выглядит в PyMailGUI то же сообщение, что и на рис. 16.12

 

Однако, с точки зрения реализации, модели отличаются существенно. Программе PyMailGUI не требуется беспокоиться о передаче информации о состоянии в адресах URL или скрытых полях (она хранит состояние в переменных Python) или экранировать HTML и строки URL (броузеры не используются, а после загрузки почты не требуется выполнять передачу через сеть). Ей также не приходится создавать ссылки на временные файлы, чтобы обеспечить доступ к частям сообщения — сообщение хранится в памяти, присоединенное к объекту окна, и продолжает существовать между операциями. С другой стороны, программе PyMail- GUI требуется, чтобы на компьютере клиента был установлен Python, но к этому мы еще вернемся через несколько страниц.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий