XenForo’da JSON İstekleri Nasıl Engellenir?
/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.?json=1 parametresiyle tetiklenir. Bunu global seviyede yakalayıp 403 döndürmek için app_pub_setup event’ine bir listener bağlayabilirsin.src/addons/Ornek/NoJson/Listener/AppSetup.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;
}
}
}
app_pub_setupOrnek\NoJson\Listener\AppSetup::appPubSetup?json=1 Engellemejson=1 parametresini Apache ya da Nginx ile de engelleyebilirsin.<IfModule mod_rewrite.c>
RewriteEngine On
# JSON isteklerini engelle
RewriteCond %{QUERY_STRING} (^|&)json=1(&|$) [NC]
RewriteRule ^ - [F,L]
</IfModule>
?json=1 geçen tüm istekleri 403 (Forbidden) ile kapatır.location / {
if ($arg_json = "1") {
return 403;
}
try_files $uri $uri/ /index.php?$uri&$args;
}
json=1 GET parametresi olan istekleri engeller.routeMatch üzerinden controller/action’a göre filtre eklemen gerekirapp_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.İçerik sağlayıcı paylaşım sitesi olarak hizmet veren WebmasterForum.NET adresimizde, 5651 Sayılı Kanun’un 8. maddesi ile Türk Ceza Kanunu’nun 125. maddesi uyarınca, üyelerimiz tarafından yapılan tüm paylaşımların hukuki sorumluluğu ilgili üyeye aittir. WebmasterForum.NET hakkında yapılacak tüm hukuki şikayetler, iletişim bağlantımız üzerinden tarafımıza iletildikten sonra en geç 3 (üç) gün içerisinde ilgili mevzuat çerçevesinde incelenecek, gerekli işlemler yapılacak ve başvuru sahibine bilgi verilecektir.