Firefox: Desativar janela.localização no site

4

Estou tentando impedir que um determinado site possa usar o javascript para redirecionar o navegador para outra página. O script em questão é um script embutido, então o Greasemonkey e o adBlock não podem fazer nada a respeito.

Políticas de segurança configuráveis (CAPS) parecem ser a resposta, mas não consigo fazer com que funcione por window.location e todas as minhas pesquisas não estão dando em nada. O script é assim:

<script>
        window.location = "someotherpage.html";
</script>

E isso é o que eu tentei no meu arquivo user.js:

user_pref("capability.policy.policynames", "noredirect");
user_pref("capability.policy.noredirect.sites", "http://www.zshare.net http://127.0.0.1");        
user_pref("capability.policy.noredirect.Window.Location.replace", "noAccess");
user_pref("capability.policy.noredirect.Window.Location.assign", "noAccess");
user_pref("capability.policy.noredirect.Window.Location.reload", "noAccess");
user_pref("capability.policy.noredirect.Window.Location", "noAccess");
user_pref("capability.policy.noredirect.Document.Location.replace", "noAccess");
user_pref("capability.policy.noredirect.Document.Location.assign", "noAccess");
user_pref("capability.policy.noredirect.Document.Location.reload", "noAccess");
user_pref("capability.policy.noredirect.Document.Location", "noAccess");
user_pref("capability.policy.noredirect.Location.replace", "noAccess");
user_pref("capability.policy.noredirect.Location.assign", "noAccess");
user_pref("capability.policy.noredirect.Location.reload", "noAccess");
user_pref("capability.policy.noredirect.Location", "noAccess");

Estou testando em uma página hospedada localmente e consegui bloquear a função de alerta, mas nada que eu tentei conseguiu desativar o window.location .

Alguém sabe como fazer isso?

    
por Telanor 02.11.2011 / 22:38

2 respostas

0

Embora não seja uma solução do Firefox para o seu problema, que tal uma solução alternativa?

No Opera, tudo o que você precisa é de um regex simples que encontre e substitua o script. Nenhuma extensão complexa, apenas um arquivo JS de usuário simples, que ficaria assim.

Disable redirection 1.00.js :

// ==UserScript==
// @name Disable redirection
// @version 1.00
// @description Disables redirection.
// @namespace http://superuser.com/questions/353339/firefox-disable-window-location-on-website/511703#511703
// @copyright 2012
// @author XP1
// @homepage https://github.com/XP1/
// @license Apache License, Version 2.0; http://www.apache.org/licenses/LICENSE-2.0
// @include http*://example.com/*
// @include http*://*.example.com/*
// ==/UserScript==

/*
 * Copyright 2012 XP1
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*jslint browser: true, vars: true, maxerr: 50, indent: 4 */
(function (opera) {
    "use strict";

    var isReplaced = false;

    function replaceJs(userJsEvent) {
        if (isReplaced) {
            return;
        }

        var element = userJsEvent.element;
        element.text = element.text.replace(/window\.location = "someotherpage\.html";/g, "");

        isReplaced = true;
    }

    opera.addEventListener("BeforeScript", function listener(userJsEvent) {
        if (isReplaced) {
            opera.removeEventListener("BeforeScript", listener, false);
            return;
        }

        replaceJs(userJsEvent);
    }, false);
}(this.opera));
    
por 28.11.2012 / 09:23
4

A única maneira infalível é escrever o seu próprio add-on do Firefox. O Greasemonkey não pode fazer isso porque o javascript, como beforeunload , não pode bloquear redirecionamentos window.location = "..." .

No entanto, eu tenho sites bloqueados de fazer isso usando NoScript e / ou RequestPolicy . Nenhuma dessas abordagens é perfeita, mas elas podem funcionar para você.

  • O ideal é usar NoScript para bloquear o JS do site. Isso irá parar o window.location.
    Muitos sites funcionam de maneira aceitável sem o JS. Se este site realmente precisar de JS, o NoScript não ajudará você com o problema de localização. Mas o NoScript, como o AdBlock, é ótimo para acelerar a rede e reduzir o desperdício.

  • A próxima correção possível é usar RequestPolicy . RequestPolicy pode bloquear apenas solicitações de site_A para site_B por exemplo (enquanto permite site_B em outras circunstâncias).

    Isso funcionará enquanto o window.location for para uma página em outro site. Se for mesmo site, o complemento personalizado é a única alternativa.

    Tenha em atenção que o RequestPolicy encerra quase tudo, por predefinição, e requer a inclusão de sites aceitáveis. Isso significa que requer um pouco de treinamento / configuração.

    A parte boa é que ele pode parar praticamente todas as travessuras entre sites que estão desenfreadas na web - que é como o Facebook, o Google, etc. rastreiam cada movimento seu e como muitas explorações de segurança são perpetradas.

  • Se as duas primeiras opções não funcionarem, outra possibilidade é:

    1. Salve uma cópia de todo o JS da página que você quiser / precisar.
    2. Edite as partes ruins.
    3. Carregue esse JS no script GM usando a diretiva // @require ou apenas cole o código.
    4. Em seguida, use o NoScript para interromper completamente o JS da página. Tudo bem, porque o GM JS será executado, mesmo que o NoScript bloqueie o JS da página.
    5. O único inconveniente é que às vezes o JS da página precisará ser refatorado para portar o script GM. Na maior parte do tempo, no entanto, ela vai cair.

  • Se nenhuma das opções acima funcionar, sua única opção é escrever seu próprio complemento FF.

por 10.11.2011 / 09:52