Как даты и случайные числа могут быть использованы для зла в Javascript? - PullRequest
6 голосов
/ 30 сентября 2011

Подмножество Javascript ADsafe запрещает использование некоторых вещей, которые небезопасны для доступа гостевого кода, таких как eval, window, this, with,и так далее.

По некоторым причинам он также запрещает объект Date и Math.random:

Date and Math.random

Доступ к этим источникам недетерминизм ограничен, чтобы упростить определение поведения виджетов.

Я до сих пор не понимаю, как использование Date или Math.random приведет к недоброжелательности.

Можете ли вы привести пример кода, где используется Date или Math.random нужно что-то делать зло?

Ответы [ 5 ]

10 голосов
/ 30 сентября 2011

Согласно слайд-шоу , опубликованному Дугласом Крокфордом:

ADsafe не разрешает доступ к Date или random

Это разрешеночеловеческая оценка содержания рекламы с уверенностью, что поведение не изменится в будущем.Это для качества рекламы и соблюдения договорных обязательств, а не для обеспечения безопасности.

3 голосов
/ 30 сентября 2011

Не думаю, что кто-то будет считать их злыми как таковыми .Однако важная часть этой цитаты:

проще определить, как ведут себя виджеты

Очевидно, Math.random() вводит индетерминизм, поэтому вы никогда не можете быть уверены, как будет вести себя кодпри каждом запуске.

Что не очевидно, так это то, что Date приносит подобный индетерминизм.Если ваш код каким-то образом зависит от текущей даты, он (очевидно, снова) будет работать по-разному в некоторых условиях.

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

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

1 голос
/ 01 октября 2011

Я согласен с вами, что это странное ограничение.

Обоснование того, что использование даты или случайного числа затруднит прогнозирование поведения виджета, - это, конечно, глупость. Например, реализовать простой счетчик, вычислить sha-1 текущего числа и затем действовать в зависимости от результата. Я не думаю, что легче предсказать, что виджет будет делать в долгосрочной перспективе, по сравнению со случайным числом или датой ... если не использовать его навсегда.

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

1 голос
/ 30 сентября 2011

Как минимум, они позволяют вам записывать циклы, которые не могут быть показаны как не завершающиеся, но могут выполняться очень долго.

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

1 голос
/ 30 сентября 2011

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

Сами по себе Date и Math.random не должны представлять угрозу безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...