Web Analytics Made Easy - Statcounter

Tema düzenleyici

XenForo’da JSON İstekleri Nasıl Engellenir?

XenForo’da JSON İstekleri Nasıl Engellenir?

Sorunun özeti
XenForo’da /index.php?login/login&json=1 gibi JSON isteklerini (özellikle frontend’de görünen ?json=1 yanıtlarını) tamamen kapatmak veya ziyaretçilere kullandırmamak istiyorsun.

Aşağıda iki mantıklı yaklaşım var:

  • XenForo’nun kendi mekanizmasını kullanarak JSON/“API benzeri” istekleri devre dışı bırakmak (önerilen, güncelleme dostu)
  • Web sunucusu (Apache/Nginx) seviyesinde JSON isteklerini engellemek

1. XenForo İçinde JSON İsteklerini Engelleme (Add-on / Listener ile)

XenForo’da JSON cevaplar genelde ?json=1 parametresiyle tetiklenir. Bunu global seviyede yakalayıp 403 döndürmek için app_pub_setup event’ine bir listener bağlayabilirsin.

Örnek basit eklenti mantığı:

a) Listener sınıfısrc/addons/Ornek/NoJson/Listener/AppSetup.php:

PHP:
<?php

namespace Ornek\NoJson\Listener;

use XF\App;
use XF\Http\Request;

class AppSetup
{
 public static function appPubSetup(App $app)
 {
 /** @var Request $request */
 $request = $app->request();

 // JSON isteklerini tespit et
 $isJson = $request->filter('_xfResponseType', 'str') === 'json'
 || $request->filter('json', 'bool');

 if ($isJson) {
 // İster direkt 403 döndür
 $reply = $app->reply()->errorException(
 \XF::phrase('no_permission'),
 403
 );

 // Veya basit bir 403 header + exit:
 // header('HTTP/1.1 403 Forbidden');
 // exit('JSON istekleri devre dışı bırakıldı.');

 $app->runReply($reply);
 exit;
 }
 }
}

b) Event Listener kaydı (addon.json / admin panel)
Admin panelden:

  • DevelopmentCode event listeners
  • Add code event listener
  • Event: app_pub_setup
  • Execute callback:
    Ornek\NoJson\Listener\AppSetup::appPubSetup

Bu şekilde public tarafta tüm JSON istekleri (login, register, overlay formlar vb.) engellenir. Dikkat et: Bazı XenForo fonksiyonları (özellikle overlay login vs.) JSON’a bağımlı; bunları kapatırsan kullanıcı deneyimi bozulur, tıklamalar tam sayfa yenilemeye dönmelidir (tema/şablon düzeni gerekebilir).

2. Web Sunucusu Seviyesinde ?json=1 Engelleme

JSON isteklerinin büyük kısmı query parametre üzerinden gidiyorsa, json=1 parametresini Apache ya da Nginx ile de engelleyebilirsin.

Apache (.htaccess) için:

Kod:
<IfModule mod_rewrite.c>
 RewriteEngine On

 # JSON isteklerini engelle
 RewriteCond %{QUERY_STRING} (^|&)json=1(&|$) [NC]
 RewriteRule ^ - [F,L]
</IfModule>

Bu kural, URL’de ?json=1 geçen tüm istekleri 403 (Forbidden) ile kapatır.

Nginx için (server bloğu içine):

NGINX:
location / {
 if ($arg_json = "1") {
 return 403;
 }

 try_files $uri $uri/ /index.php?$uri&$args;
}

Bu da json=1 GET parametresi olan istekleri engeller.

3. Nelere Dikkat Etmelisin?

  • XenForo’nun bazı AJAX/overlay fonksiyonları JSON yanıt bekler. Bunları engellersen:
    • Login penceresi overlay şeklinde açılıyorsa çalışmayabilir
    • Bazı butonlar “arka planda” çalışmak yerine tam sayfa hata verebilir
  • Canlı sitede denemeden önce mutlaka test ortamında dene veya en azından dosya/DB yedeği al
  • Sadece belirli route’larda (örneğin login, register dışındakilerde) engellemek istersen, listener içinde routeMatch üzerinden controller/action’a göre filtre eklemen gerekir

Sonuç
XenForo’da JSON isteklerini tamamen kapatmak mümkün; en temiz yöntem app_pub_setup event’ini yakalayıp JSON istekleri 403’e düşürmek, daha basit/pratik yöntem ise .htaccess veya Nginx ile json=1 parametresini bloklamak. Hangisini uygularsan uygula, bazı arayüz fonksiyonlarının buna göre davranacağını göz önünde bulundurman gerekir.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Giriş Yap

Zaten bir hesabınız var mı? Buradan giriş yapın.

← Önceki Konu

XenForo’da Misafir Trafiği Nasıl Yönetilir?

  • Mert
  • Cevaplar: 1
Sonraki Konu →

XenForo SEO Eklentileri Hangileri?

  • Mert
  • Cevaplar: 1
Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Son Konular

İpuçları
Geri
Üst