Защита iFrame-позволяет работать только в одном домене

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

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

кто-нибудь знает как я могу это сделать это?

спасибо!

5 ответов


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

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

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


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


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


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

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


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

Он должен быть размещен там, где есть элемент 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>

Он должен быть помещен в ваш src для iframe

<script>
            function receiveMessage(event)
            {
                if(event.data=='checkHost'){
                    event.source.postMessage("checkHostTrue",
                           event.origin);
                } else {
                    return;
                }
            }
            window.addEventListener("message", receiveMessage, false);
</script>