Руководство по JavaScript

         

Данные tainting


Navigator (версия 2.02 и позже) автоматически прекращает скрипты на одном сервере из доступных свойств документов на различных серверах. Это ограничение прекращает скрипты от выборки частной информации типа структур каталога или хронологии сеанса пользователя. Однако, это ограничение также воздействует на некоторые законные приложения, типа сценарии "navigation helper", которые используют фреймы и должны видеть содержание других фреймов, независимо от их происхождения.

JavaScript теперь имеет возможность, называемую данными tainting, которая сохраняет ограничение защиты, но обеспечивает механизм работы для законных приложений. Когда данные tainting активны, то JavaScript в одном окне будет способен видеть свойства другого окна, независимо с какого сервера документ другого окна был загружен. Однако, если JavaScript в первом окне пытается посылать данные, полученные от свойства другого окна, то отображается диалоговое окно подтверждения, так что пользователь может отменить или подтвердить операцию. По умолчанию, все свойства в втором окне заражаются так, что они не могут быть посланы серверу другого документа в исходном окне.

Возможность данных tainting:

  • На Unix, используйте команду setenv.
  • На Windows, используйте множества.
  • На Macintosh, установите переменную среды NS_ENABLE_TAINT. Редактируйте ресурс с типом 'Envi' и номером 128 в приложении Netscape, удаляя два ascii наклонные черты вправо "//" перед NS_ENABLE_TAINT текстом в конце ресурса.

Вы можете управлять tainting свойств двумя функциями: taint добавляет tainting к свойству, и untaint удаляет tainting из свойства. Эти функции каждая принимает свойство, как параметр.

Например, чтобы удалить taint из формы ввода элемента так, чтобы сценарий мог посылать это другому серверу, используйте: untainted = untaint(document.form1.input3) // now untainted can be sent in a URL or form post by other scripts

Ни taint и ни untaint не изменяют ее параметр; скорее, обе функции возвращают отмеченную или немаркированную ссылку к объекту параметра, или копии примитивного значения типа (номер или булево значение). Вы используете untaint, чтобы очистить "код taint" который отмечает данные как принадлежность к серверу, и следовательно не может быть послан другими сценариями различным серверам. Вы используете taint, чтобы отметить данные, который иначе не taint вашим сценарием "код инфекции". Сценарий может untaint только данные, которые имеет его свойство "код taint ", или имеет тождество (null) кода taint. Данные с любым другим сценарием "кода taint" скопированы и возвращены untaint без изменения или ошибки.

wwwwwwwwwwwwwwwwwwwwwЧтобы обрабатывать случаи, где поток управления скорее чем поток данных несет tainting taint, каждое окно, связывают сумматор инфекции с этим. Сумматор taint задерживает инфекцию, проверенную в части условия того, если, поскольку, и в то время как утверждения, и смеси различные коды инфекции, чтобы создать, новые коды который идентифицируют комбинацию происхождения данных (serverA, serverB, serverC, и т.д.).

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

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

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

Если сценарий, сервер, и инфекции данных несовместимы, диалог подтверждения зарегистрирован к подробности(подробному) находящееся в противоречии происхождение URL префиксы, и позволять пользователю отменять или ХОРОШО загрузку URL или пост формы.

Накопленная taint распространяется поперек setTimeout и в оценку первого параметра к setTimeout. Это распространяется через document.write в сгенерированные отметки, так, чтобы злонамеренный сценарий не мог сообщать о частной информации типа хронологии сеанса, генерируя отметку HTML с неявно-загруженным параметром URL SRC: Document.write (" < img src=fake-img - + Кодируйте (хронологию) + ">")



Содержание раздела