Защита 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>