Защита iFrame - разрешить работать только на одном домене - PullRequest
11 голосов
/ 17 ноября 2011

У меня есть созданный виджет, и я встраиваю его в другие веб-сайты с помощью iFrame.Я хочу убедиться, что никто не сможет просмотреть исходный код, скопировать код iFrame и разместить его на своем веб-сайте.

Я могу сохранить URL-адрес, который должен быть разрешен в базе данных.Я видел, как это было сделано ранее, на одном сайте был длинный зашифрованный код, и если он не совпадал с доменом, то было сказано: Доступ запрещенсделать это?

Спасибо!

Ответы [ 5 ]

14 голосов
/ 17 ноября 2011

Нет, ты не можешь сделать это. Лучшее, что вы можете сделать, это:

if (window.top.location.host != "hostname") {
    document.body.innerHTML = "Access Denied";
}

Добавьте вышеперечисленное в ваш JavaScript, а затем используйте JavaSript obfuscator

8 голосов
/ 19 февраля 2016

Вы не можете запретить пользователям просматривать ваш HTML, но есть некоторые заголовки, которые позволяют вам указать, какие сайты могут встраивать ваш iframe. Посмотрите на заголовок X-Frame-Options и директиву frame-ancestors Content-Security-Policy. Обозреватели, которые его уважают, откажутся загружать iframe, если они встроены в чужой сайт.

5 голосов
/ 17 ноября 2011

На сервере в коде страницы, отображаемой в IFRAME, проверьте значение заголовка Referer. Если этот заголовок не был заблокирован по соображениям конфиденциальности, он содержит URL-адрес страницы, на которой размещена рамка.

2 голосов
/ 17 ноября 2011

То, что вы просите, практически невозможно. Если вы сделаете источник доступным в Интернете, кто-то может скопировать его тем или иным способом. Любые уловки JavaScript можно победить с помощью низкоуровневых инструментов, таких как wget или curl.

Таким образом, даже если вы защитите его, вы все равно обнаружите, что теоретически кто-то может скопировать код (как браузер получит его) и при желании может разместить его на своем веб-сайте.

1 голос
/ 21 июня 2016

Я столкнулся с той же проблемой, но я возвращаю пользователя на домашней странице. Выкладываю решение.

Должен быть размещен там, где есть iframe

<script>
        $(window).load(function () {
            var timetoEnd = '';   
            var dstHost   = 'YOUR-ALLOW-HOST';
            var backToUrl = 'BACK-TO-URL';

            function checkHost(){
                var win = window.frames.YOUR-IFRAME-NAME;
                win.postMessage('checkHost', dstHost);
                    console.log('msg Sended');
                    clearInterval(timetoEnd);
                    timetoEnd = setInterval(function () {
                        window.location.href = backToUrl;
                    }, 5000);
                }

                function validHost(event) {
                    if (event.data == 'checkHostTrue') {
                        clearInterval(timetoEnd);
                        console.log('checkHostTrue');
                    } else {
                        return;
                    }
                }

                window.addEventListener("message", validHost, false);
                checkHost();

                setInterval(function () {
                    checkHost();
                }, 10000
                );
            });
    </script>

Он должен быть помещен в ваш фрейм iframe

<script>
            function receiveMessage(event)
            {
                if(event.data=='checkHost'){
                    event.source.postMessage("checkHostTrue",
                           event.origin);
                } else {
                    return;
                }
            }
            window.addEventListener("message", receiveMessage, false);
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...