Я разрабатываю расширение для сценариев, похожее на Greasemonkey или движок сценариев содержимого Chrome. Это расширение позволит сценаристам делать очень опасные вещи, такие как доступ к локальным файлам.
Если я когда-нибудь выпущу это расширение для широкой публики, я бы хотел, чтобы оно могло предупреждать начинающих пользователей, если сценарий будет использовать «опасную» функцию. Я бы хотел, чтобы это предупреждение было как можно сложнее обойти.
Например, расширение может искать защищенную строку GM_openSQL_Connection
и предупреждать пользователя — например, так:
Предположим, что базовая веб-страница никогда не сможет получить доступ к GM_openSQL_Connection
благодаря механизмам песочницы. Точно так же ни один узел <script>
не сможет этого сделать.
Но сценарист все еще может обойти простой поиск сверху примерно так:
eval (decodeURI ("GM_op%65nSQL_Connection (...);") )
Итак, вопрос заключается в том, какими способами злонамеренный скриптер может обмануть проверку на ограниченное использование функций и как я могу предотвратить такое зло?
Примечание: ложные предупреждения могут быть в порядке. Например, если автор скрипта использует текст "GM_openSQL_Connection" в статической строке, то ему просто придется смириться с (ложным) предупреждением.
var foo = window["GM_op" + "enSQL_Connection"];foo(...)
. Вы не можете идти по имени функции, потому что имя функции может измениться слишком легко. - person Wladimir Palant   schedule 06.03.2012eval
. - person Brock Adams   schedule 06.03.2012window
нет, но вместо нее можно использоватьthis
. Честно говоря, я думаю, что единственный правильный способ контролировать использование опасных API-интерфейсов — это не раскрывать эти API-интерфейсы в первую очередь — возможно, вместо этого выставлять заполнители, которые будут отображать предупреждение. - person Wladimir Palant   schedule 06.03.2012