Чтение онлайн

на главную

Жанры

19 смертных грехов, угрожающих безопасности программ

Виега Джон

Шрифт:

Ну и наконец пример JSP)страницы, из которой вызывается определенный выше тег:

...

<%@ taglib uri="/tags/htmlencoder" prefix="htmlencoder" %>

<head>

<title>Покайся, грешник...</title>

</head>

<html>

<body bgcolor="white">

<htmlencoder:htmlencode><script

type="javascript">BadStuff</script></htmlencoder:htmlencode>

<htmlencoder:htmlencode>testing</htmlencoder:htmlencode>

<script type="badStuffNotWrapped"></script>

</body>

</html>

Искупление

греха в PHP

Как и в остальных примерах, мы применяем оба лекарства: проверяем входные данные, а затем HTML)кодируем выводимую информацию с помощью функции htmlentities:

...

<?php

$name = $_GET[\'name\'];

if (isset($name)) {

if (preg_match(\'\^w{5,25}$/\',$name)) {

echo "Hello, " . htmlentities($name);

} else {

echo "Вон отсюда!";

}

}

?>

Искупление греха в Perl/CGI

Идея та же, что в предыдущих примерах: проверить входные данные, сопоставив их с регулярным выражением, а затем HTML–кодировать выводимую информацию.

...

#!/usr/bin/perl

use CGI;

use HTML::Entities;

use strict;

my $cgi = new CGI;

print CGI::header;

my $name = $cgi->param(\'name\');

if ($name =~ /^\w{5,25}$/) {

print "Hello, " . HTML::Entities::encode($name);

} else {

print "Вон отсюда!";

}

Если вы не хотите или не можете загрузить модуль HTML::Entities, то вот эк)

вивалентный код для решения той же задачи:

sub html_encode

{

my $in = shift;

$in =~ s/&/&amp;/g;

$in =~ s/</&lt;/g;

$in =~ s/>/&gt;/g;

$in =~ s/\»/&quot;/g;

$in =~ s/#/&#35;/g;

$in =~ s/\(/&#40;/g;

$in =~ s/\)/&#41;/g;

return $in;

}

Искупление греха в mod–perl

Как и выше, мы проверяем корректность входных данных и HTML–кодируем выходные.

...

#!/usr/bin/perl

use Apache::Util;

use Apache::Request;

use strict;

my $apr = Apache::Request->new(Apache->request);

my $name = $apr->param(\'name\');

$apr->content_type(\'text/html\');

$apr->send_http_header;

if ($name =~/^\w{5,25}$/) {

$apr->print("Hello, " . Apache::Util::html_encode($name);

} else {

$apr->print "Вон отсюда!";

}

Замечание по поводу HTML–кодирования

Прямолинейное HTML–кодирование всей выводимой информации для некоторых Web–сайтов представляется драконовской мерой, поскольку такие теги, как <1> или <В> безвредны. Чтобы несколько ослабить путы, подумайте, не стоит ли «декодировать» заведомо безопасные конструкции. Следующий фрагмент кода на С# иллюстрирует, что автор называет «HTML–декодированием» тегов, описывающих курсив, полужирный шрифт,

начало абзаца, выделение и заголовки:

...

Regex.Replace(s,

@"&lt;(/?)(i|b|p|em|h\d{1})&gt;",

"<$1$2>",

RegexOptions.IgnoreCase);

Дополнительные защитные меры

В Web–приложение можно включить много дополнительных механизмов защиты на случай, если вы пропустили XSS–ошибку, а именно:

□ добавить в кук атрибут httponly. Это спасет пользователей Internet Explorer версии (6.0) (и последующих), поскольку помеченный таким образом кук невозможно прочитать с помощью свойства document.cookie. Подробнее см. ссылки в разделе «Другие ресурсы». В ASP.NET 2.0 добавлено свойство HttpCookie.HttpOnly, упрощающее решение этой задачи;

□ заключать в двойные кавычки значения атрибутов тега, порождаемые из входных данных. Пишите не <img src=someinput>, a <img src=«someinput»>. Это сводит на нет атаки, которые могли бы обойти HTML–кодирование. Подробно этот прием объясняется в книге Майкла Ховарда и Дэвида Леб–ланка «Защищенный код», 2–ое издание (Русская редакция, 2004);

□ если вы пользуетесь ASP.NET, проверьте, задан ли конфигурационный параметр ValidateRequest. По умолчанию он задан, но лишний раз проверить не мешает. В этом случае запросы и ответы, содержащие недопустимые символы, будут отвергаться. Стопроцентной гарантии этот метод не дает, но все же является неплохой защитой. Подробнее см. раздел «Другие ресурсы»;

□ для Apache mod_perl есть модуль Apache::TaintRequest, помогающий обнаружить входные данные, которые копируются в выходные без проверки. Подробнее см. раздел «Другие ресурсы»;

□ предлагаемая Microsoft программа UrlScan для Internet Information Server 5.0 обнаруживает и обезвреживает многие варианты XSS–уязвимостей в коде вашего приложения.

Примечание. Для Internet Information Server 6.0 (IIS6) расширение UrlScan не нужно, так как его функциональность уже встроена в сам сервер. Подробнее см. раздел «Другие ресурсы».

Другие ресурсы

□ «Writing Secure Code, Second Edition» by Michael Howard and David C. LeBlanc (Microsoft Press, 2002), Chapter 13 «Web–specific Input Issues»

□ Mitigating Cross–site Scripting With HTTP–only Cookies:microsoft.com/library/default.asp?url=/workshop/author/dhtml/httponly_ cookies.asp

□ Request Validation – Preventing Script Attacks: www.asp.net/faq/ requestvalidation.aspx

□ mod_perl Apache::TaintRequest: www.modperlcookbook.org/code.html

□ «UrlScan Security Tool»: www.microsoft.com/technet/security/tools/ urlscan.mspx

□ «Divide and Conquer – HTTP Response Splitting, Web Cache Poisoning Attacks, and Related Topics»: www.securityfocus.com/archive/1/356293

□ «Prevent a cross–site scripting attack» ny Anand K. Sharma: www–106. ibm.com/developerworks/library/wa–secxss/?ca=dgr–lnxw93PreventXSS

□ «Prevent Cross–site Scripting Attacks» by Paul binder: www.perl.eom/pub/a/ 2002/02/20/css.html

Поделиться:
Популярные книги

На границе тучи ходят хмуро...

Кулаков Алексей Иванович
1. Александр Агренев
Фантастика:
альтернативная история
9.28
рейтинг книги
На границе тучи ходят хмуро...

Кодекс Охотника. Книга III

Винокуров Юрий
3. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
7.00
рейтинг книги
Кодекс Охотника. Книга III

Последний попаданец 11. Финал. Часть 1

Зубов Константин
11. Последний попаданец
Фантастика:
фэнтези
юмористическое фэнтези
рпг
5.00
рейтинг книги
Последний попаданец 11. Финал. Часть 1

Книга пяти колец

Зайцев Константин
1. Книга пяти колец
Фантастика:
фэнтези
6.00
рейтинг книги
Книга пяти колец

Поступь Империи

Ланцов Михаил Алексеевич
7. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Поступь Империи

Купидон с топором

Юнина Наталья
Любовные романы:
современные любовные романы
7.67
рейтинг книги
Купидон с топором

Наследник в Зеркальной Маске

Тарс Элиан
8. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник в Зеркальной Маске

Совок 5

Агарев Вадим
5. Совок
Фантастика:
детективная фантастика
попаданцы
альтернативная история
6.20
рейтинг книги
Совок 5

Аномальный наследник. Том 1 и Том 2

Тарс Элиан
1. Аномальный наследник
Фантастика:
боевая фантастика
альтернативная история
8.50
рейтинг книги
Аномальный наследник. Том 1 и Том 2

Теневой путь. Шаг в тень

Мазуров Дмитрий
1. Теневой путь
Фантастика:
фэнтези
6.71
рейтинг книги
Теневой путь. Шаг в тень

Попаданка в академии драконов 2

Свадьбина Любовь
2. Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
6.95
рейтинг книги
Попаданка в академии драконов 2

Гром над Империей. Часть 2

Машуков Тимур
6. Гром над миром
Фантастика:
фэнтези
попаданцы
5.25
рейтинг книги
Гром над Империей. Часть 2

Ритуал для призыва профессора

Лунёва Мария
Любовные романы:
любовно-фантастические романы
7.00
рейтинг книги
Ритуал для призыва профессора

Измена. Осколки чувств

Верди Алиса
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Осколки чувств