Как NoScript блокирует встроенные скрипты? - PullRequest
0 голосов
/ 12 мая 2018

Как блокирующие JavaScript расширения, такие как NoScript / ScriptSafe, блокируют встроенные скрипты?Для блокировки запроса к удаленным скриптам (т.е. для <script src="http://example.com/index.js"></script>) я могу использовать webRequest API [1].Но это не сработает для встроенных сценариев.

Я предполагаю, что мог бы пройтись по дому и удалить или как-то временно отключить блоки <script> без атрибута src, возможно, переименовав элемент.Я попытался покопаться в источниках NoScript и заметил, что в нем есть сценарий содержимого с настройкой "run_at": "document_start", который запускает его до загрузки DOM и запуска сценариев.

Кроме того, как расширение может предотвратить случай, когдаРазрешенный скрипт внедряет тег <script> с src, указывающим на заблокированный другой домен через 1 минуту после загрузки страницы?

[1] https://developer.chrome.com/extensions/webRequest

1 Ответ

0 голосов
/ 13 мая 2018

Нашел ответ в источниках ScriptSafe:

browser.webRequest.onHeadersReceived.addListener(
    response => {
        if (true) { // TODO check whether to block inline scripts for this HTML
            response.responseHeaders.push({
                'name': 'Content-Security-Policy',
                'value': "script-src 'none'"
            });
        }
        return response;
    }
    ,
    {
        'types': [ 'main_frame', 'sub_frame' ],
        'urls': [ '<all_urls>' ]
    },
    [
        'responseHeaders',
        'blocking'
    ]
);

Важной частью является добавление заголовка Content-Security-Policy со значением script-src 'none', что предотвратит выполнение встроенного JavaScript.Это также блокирует все удаленные сценарии.См. [1] для справки.

[1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src

...