Как я могу остановить мой фрейм-бастер от взлома страницы настройщика WordPress?
Вот простой фреймбастер:
<script type="text/javascript">
if (top.location != self.location) {
top.location = self.location.href;
}
</script>
Тем не менее, кажется, работает слишком хорошо. Он разрывает страницу администратора настройщика в WordPress, после чего сайт просматривается в рамке при настройке определенных настроек. Как я могу изменить это так, чтобы он разбивал кадры... но не тот.
Возможно, вы могли бы:
- Проверить, находится ли он в одном домене и не сломать эти кадры?
- Проверить наличие определенного 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>';
Обновление: я добавил решение, которое проверяет междоменный домен и улавливает любые ошибки.