Как я могу остановить мой фрейм-бастер от взлома страницы настройщика WordPress?

Вот простой фреймбастер:

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

Тем не менее, кажется, работает слишком хорошо. Он разрывает страницу администратора настройщика в WordPress, после чего сайт просматривается в рамке при настройке определенных настроек. Как я могу изменить это так, чтобы он разбивал кадры... но не тот.

Возможно, вы могли бы:

  1. Проверить, находится ли он в одном домене и не сломать эти кадры?
  2. Проверить наличие определенного URL-адреса настройщика с помощью совпадения регулярного выражения somesort?

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

2 ответа

Вы могли бы использовать wp_customize запрос arg и is_user_logged_in функция, чтобы обернуть ваш javascript в оператор if следующим образом:

<?php if ( ! ( isset( $_GET[ 'wp_customize' ] ) && is_user_logged_in() ) ): ?>
<script type="text/javascript"> 
    if (top.location != self.location) { 
        top.location = self.location.href; 
    } 
</script>
<?php endif; ?>

Таким образом, очевидно, что у top.location есть поле с именем pathname, которое содержит URL без домена. Проверяя это поле, я могу исключить эту конкретную страницу администратора.

            <script type="text/javascript">
            function parentIsEvil(parent) {
                var html = null;
                try {
                  var doc = top.location.pathname;
                } catch(err){
                  // do nothing
                }
                console.log(doc);
                return(doc != "/wp-admin/customize.php");
            }
            console.log(canAccessParent());
            if (top.location != self.location && parentIsEvil()) { 
                top.location = self.location.href;
            }
        </script>';

Обновление: я добавил решение, которое проверяет междоменный домен и улавливает любые ошибки.

Другие вопросы по тегам