Firefox: Vô hiệu hóa window.location trên trang web


4

Tôi đang cố gắng ngăn một trang web nhất định không thể sử dụng javascript để chuyển hướng trình duyệt sang trang khác. Kịch bản được đề cập là một tập lệnh nội tuyến để Greasemonkey và adBlock không thể làm bất cứ điều gì về nó.

Chính sách bảo mật có thể định cấu hình (CAPS) dường như là câu trả lời nhưng tôi không thể làm cho nó hoạt động được window.locationvà tất cả các tìm kiếm của tôi đều không có ích gì. Kịch bản trông như thế này:

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

Và đây là những gì tôi đã thử trong tệp user.js của mình:

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");

Tôi đã thử nghiệm nó trên một trang được lưu trữ cục bộ và tôi có thể chặn chức năng cảnh báo, nhưng không có gì tôi thử đã có thể vô hiệu hóa window.location.

Có ai biết cách để làm điều này không?


Chỉ là một gợi ý, nếu bạn đang làm việc với những người clickjack theo cách này, điều bạn thực sự cần không phải là một giải pháp phần mềm, đó là một người khác, trung thực hơn để làm kinh doanh. Bạn có thể mất vài tuần để thực hiện một giải pháp, sau đó chủ sở hữu trang web sẽ phát hiện ra clickjack bị chặn và tìm một cách khác để lừa bạn. Tìm một trang web tốt hơn, tìm những người tốt hơn, cuộc sống quá ngắn để lãng phí cho chồn.

Câu trả lời:


0

Mặc dù không phải là một giải pháp Firefox cho vấn đề của bạn, nhưng một giải pháp thay thế thì sao?

Trong Opera, tất cả những gì bạn cần là một biểu thức chính đơn giản sẽ tìm và thay thế tập lệnh. Không có phần mở rộng phức tạp, chỉ là một tệp JS người dùng đơn giản, trông như thế này.

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));

1
Vì vậy, tôi đã hiểu rằng sự kiện Opera ... hóa ra điều này thực sự tồn tại trong firefox kể từ phiên bản 4. developer.mozilla.org/en-US/docs/DOM/ . Gọi e.stopPropagation và e.preventDefault ngăn tập lệnh chạy.
Telanor

@Telanor Đẹp! Mặc dù nếu tập lệnh có nhiều mã hơn window.location, bạn có thể muốn tìm và thay thế thay vì dừng toàn bộ tập lệnh.
XP1

4

Cách đơn giản nhất là viết phần bổ trợ Firefox của riêng bạn. Greasemonkey không thể làm điều đó vì javascript, chẳng hạn như beforeunload, không thể chặn window.location = "..."chuyển hướng.

Tuy nhiên, tôi đã chặn các trang web thực hiện việc này bằng NoScript và / hoặc RequestPolicy . Không có cách tiếp cận nào là hoàn hảo nhưng chúng có thể phù hợp với bạn.

  • Lý tưởng nhất là sử dụng NoScript để chặn JS cho trang web. Điều này sẽ dừng window.location.
    Nhiều trang web hoạt động chấp nhận được mà không cần JS. Nếu trang web này thực sự cần JS, thì NoScript sẽ không giúp bạn về vấn đề vị trí. Nhưng NoScript, như AdBlock, rất tốt cho việc tăng tốc mạng và cắt giảm sự thô lỗ.

  • Cách khắc phục tiếp theo có thể là sử dụng RequestPolicy . RequestPolicy có thể chặn chỉ các yêu cầu từ site_A đến site_B chẳng hạn (trong khi cho phép site_B trong các trường hợp khác).

    Điều này sẽ hoạt động miễn window.locationlà một trang trên một trang web khác. Nếu đó là cùng một trang web, thì bổ trợ tùy chỉnh là lựa chọn duy nhất.

    Coi chừng rằng RequestPolicy tắt hầu hết mọi thứ, theo mặc định và yêu cầu bạn phải đưa vào danh sách trắng các trang web được chấp nhận. Điều này có nghĩa là nó đòi hỏi một chút đào tạo / cấu hình.

    Điểm hay là nó có thể dừng lại ở tất cả các shenanigans chéo trang đang lan tràn trên web - đó là cách Facebook, Google, v.v. theo dõi mọi di chuyển của bạn và cách khai thác bảo mật được thực hiện.

  • Nếu 2 tùy chọn đầu tiên không hoạt động, thì khả năng khác là:

    1. Lưu một bản sao của tất cả các trang JS mà bạn muốn / cần.
    2. Chỉnh sửa bất kỳ phần xấu.
    3. Tải mã JS đó vào tập lệnh GM bằng cách sử dụng lệnh // @requirehoặc chỉ dán mã.
    4. Sau đó sử dụng NoScript để dừng hoàn toàn JS của trang. Điều này là ổn vì GM JS sẽ chạy, ngay cả khi NoScript chặn JS của trang.
    5. Hạn chế duy nhất là đôi khi JS của trang sẽ cần tái cấu trúc để chuyển sang tập lệnh GM. Tuy nhiên, hầu hết thời gian nó sẽ rơi ngay vào.

  • Nếu không có cách nào ở trên hoạt động, tùy chọn duy nhất của bạn là viết phần bổ trợ FF của riêng bạn.


NoScript sẽ không hoạt động vì trang web được đề cập yêu cầu javascript để chạy và RequestPolicy sẽ không hoạt động vì trang web chuyển hướng đến một trang khác trên cùng một trang.
Telanor

Tôi đã thêm một cách tiếp cận khác. GM JS sẽ chạy, ngay cả khi NoScript chặn JS của trang. Điều đó có nghĩa là bạn có thể sử dụng NoScript và chỉ cần thay thế JS của trang bằng các phiên bản được khử trùng của bạn. Không, điều đó thay thế duy nhất của bạn là viết phần bổ trợ của riêng bạn.
Brock Adams

@Telanor, có vẻ như rất nhiều công việc cho Firefox. Trong Opera, tất cả những gì bạn cần là một biểu thức chính đơn giản sẽ tìm và thay thế tập lệnh. Không có phần mở rộng phức tạp, chỉ là một tệp JS người dùng đơn giản.
XP1
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.