Использование JavaScript Framebreak для новых веб-проектов? [Дубликат]

Это означает, что указанная переменная не указана ни на что. Я мог бы сгенерировать это так:

SqlConnection connection = null;
connection.Open();

Это вызовет ошибку, потому что, пока я объявил переменную «connection», она не указала ни на что. Когда я пытаюсь вызвать член «Open», для его устранения нет ссылки, и он будет вызывать ошибку.

Чтобы избежать этой ошибки:

  1. Всегда инициализируйте свои объекты, прежде чем пытаться что-либо с ними делать.
  2. Если вы не уверены, что объект имеет значение null, проверьте его с помощью object == null.

Инструмент Resharper JetBrains определит каждое место в вашем коде, которое имеет возможность ошибки нулевой ссылки, позволяя вам ввести нулевую проверку. Эта ошибка является источником ошибок номер один, IMHO.

62
задан abovesun 24 May 2010 в 12:32
поделиться

6 ответов

Вы не можете проверить его со стороны сервера, но вы можете использовать javascript для его обнаружения после загрузки страницы. Сравните top и self, если они не идентичны, вы находитесь в кадре.

Кроме того, некоторые современные браузеры относятся к заголовку X-FRAME-OPTIONS, который может иметь два значения:

  • DENY - предотвращает визуализацию страницы, если она содержится в кадре
  • SAMEORIGIN - то же самое, что и выше, если страница не принадлежит к тому же домену, что и держатель набора фреймов верхнего уровня .

Пользователи включают Picasa Google, которые не могут быть встроены в кадр.

Браузеры, поддерживающие заголовок, с минимальной версией:

  • IE8 и IE9
  • Opera 10.50
  • Safari 4
  • Chrome 4.1.249.1042
  • Firefox 3.6.9 (более старые версии с NoScript )
86
ответ дан Maerlyn 25 August 2018 в 03:13
поделиться

Для современных браузеров вы можете использовать CSP (Политика безопасности контента), которая является стандартом. Следующий заголовок предотвратит загрузку документа в кадр где угодно:

Content-Security-Policy: frame-ancestors 'none'

(IE 11 нуждается в префиксе X-, хотя). Вы также можете изменить 'none' на начало координат, на котором разрешено создание рамки, например ваш собственный сайт.

Чтобы покрыть старые браузеры, это лучше всего использовать вместе с ответом @ Maerlyn .

20
ответ дан Community 25 August 2018 в 03:13
поделиться
  • 1
    Ваш ответ недостаточно ясен со всем уважением. Этот код заголовка или PHP? Например. – Gary Carlyle Cook 11 August 2016 в 13:39
  • 2
    @GaryCarlyleCook Это HTTP-заголовок, который должен быть частью ответа на браузер при обслуживании страницы. Это не PHP-код, хотя вы можете использовать PHP для его отправки; см. header () – rvighne 11 August 2016 в 15:33

Или вы можете заблокировать определенный домен, если вы не против вашего контента в некоторых местах, но не хотите его на определенном сайте. Например, если offendingdomain.com вставлял ваш контент, вы могли бы сделать это:

<script type="text/javascript">
    if(document.referrer.indexOf("offendingdomain.com") != -1) {
        window.location = "http://www.youtube.com/watch_popup?v=oHg5SJYRHA0";
    }
</script>

Это проверит местоположение родительского документа и посмотрит, является ли это offendingdomain.com, который встраивает ваш контент. Этот скрипт затем отправит этот iframe в известное видео youtube как наказание. По сути, они просто Рик-Роллинг сами.

6
ответ дан earl3s 25 August 2018 в 03:13
поделиться

Stackoverflow включает некоторые JS для тестирования (master.js). Это его часть:

if(top!=self){
    top.location.replace(document.location);
    alert("For security reasons, framing is not allowed; click OK to remove the frames.")
}

Но имейте в виду, что JS можно отключить.

38
ответ дан Felix Kling 25 August 2018 в 03:13
поделиться
  • 1
    Этот подход особенно полезен, если вы хотите получить сообщение либо тому человеку, который помещает ваш контент в iframe, либо конечный пользователь своего сайта, который смотрит на ваш контент в iframe. – kevinmicke 2 August 2017 в 18:40

вы можете предотвратить загрузку своей страницы в iframe с помощью javascript

<script type="text/javascript">
if ( window.self !== window.top ) {
    window.top.location.href=window.location.href;
}
</script>

этого кода изменения кода контейнера iframe вашей страницы на ваш адрес страницы и принудительного контейнера для показа вашей страницы.

13
ответ дан iman 25 August 2018 в 03:13
поделиться
  • 1
    Атрибут sandbox в iframe позволяет запретить такие кадрирующие экраны. Таким образом, этот способ не является защищенным способом предотвращения кадрирования, если ваша проблема связана с безопасностью. – Frédéric 3 September 2015 в 13:21

Используйте javascript для проверки того, была ли она загружена в iframe, поместив следующий скрипт в конец вашего php-файла и перенаправляя страницу, отображающую предупреждение или уведомление о том, что ваша страница не должна загружаться с использованием iframe.

<script type="text/javascript">
if(top.location != window.location) {
    window.location = '/error_iframe.php';
}
</script>
2
ответ дан jmslouie 25 August 2018 в 03:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: