Реклама:

Что же касается других типов данных, то вы должны знать, чего ожидать от пользователей, a XML Schema представляет очень мощный (и сложный) способ подтверждения соответствия документов XML определенному формату.

Белые списки и доступ к ресурсам

Использование белых списков также позволяет сдерживать атаки, связанные с прослеживанием каталогов. Идея, как и прежде, состоит в том, что сначала вы создаете список разрешенных вариантов и предоставляете пользователю возможность делать выборку из списка. Все, что не входит в список, является запрещенным. Одни из способов реализации этого метода состоит в том, чтобы поддерживать таблицу, посредством которой ID ресурса преобразуется в имя. Ниже приведено несколько примеров.

ID

Имя

V'ima#es/aboul.gif

-/Арр Data/cataloK.xinl

Затем вы можете использовать обработчик или страницу для извлечения тех же данных программным методом:

/аээ/SnowData. aspx' 1 rj=456

Это гораздо лучше, чем использовать такой прием:

/арр/ShowOata. aspx?id=catalog. xml

ВНИМАНИЕ! Очень низка вероятность того, что упомянутые выше Ю будут использоваться, поскольку они легко предсказуемы. Разве что только тогда, когда все содержимое открыто и вы хотите лишь освободиться от имен ресурсов, В других же случаях вам придется применять более длинные номера, в комбинации с соответствующей авторизацией для этих ресурсов. Длинные случайные номера можно получить с помощью RNGCryptoServiceProvider или класса Guid.

Если вы предпочитаете создать список разрешенных ресурсов во время выполнения программы, то можете использовать 10 API (где имякаталога предоставляется приложением, а имяфашш вводит пользователь), как в следующем примере.

private bool CnecKFilefstring rJirectoryname. string filename)

{

try

(

Oirectorylnfo di = new Oi^ect0ryln*o<

Reouest .Maf)Patri(direcroryname));

// Поручаем нее файлы а этой папке

FileInfo[] files = di.GerFllesO;

// Прояяряеч местонахождение указанного

// пользователем файла в каталоге Content

foreach (Filel'ifo file In files)

I

lf (string.rguaisCile.Nurro, filename. Si г ingCor.par isor.Ordina". IgnoreCase)) {

return true;

)

)

return false:

}

catch (Exception ex) {

// Регистрация return false;

>

»

ВНИМАНИЕ! Обратившись к документации библиотеки классов, вы. возможно, придете к выводу, что обращение к методу di.GelFHes(nua_0aHna) может оказаться более эффективным. Дело в том, что API не препятствует углублению в подкаталоги. Например, вызов new DirectorylnfoCC:\\foo'>.GetFilesCbaA\cwenz.txf) вернет результат только в случае существования файла C:\foo\bar\cwenz.txt.

Технологии сдерживания

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

Кодирование выходных данных

В некоторых случаях реализовать подтверждение с помощью черных или белых списков невозможно. Для этого могут понадобиться символы, которые используются для атак (например, угловые скобки в атаках XSS). В таких случаях нужно хотя бы убедиться в том, что эти входные данные при их визуализации на браузере не нанесут ущерба приложению и пользователям.


⇐ Предыдущая страница| |Следующая страница ⇒