Discord webhook linki şifre gibidir. Elinde olan herkes log kanalına istediği isim ve avatarla mesaj atabilir. Link bir resource’un client dosyasındaysa her oyuncu onu indirir. Linki sunucuda tut, logları da oradan gönder.
Client dosyasındaki webhook neden herkese açık
Discord’un geliştirici dokümanlarına göre webhook kullanmak için ne bot ne de giriş gerekir. Gizli token linkin içindedir ve mesaj atmak o linke tek bir istek göndermekten ibarettir. Token’lı uç noktalar sayesinde linki elinde tutan kişi webhook’un adını değiştirebilir, hatta onu silebilir.
Şimdi FiveM’in resource’u nasıl dağıttığına bak. Manifest dokümanına göre client_script ve shared_script dosyaları resource paketine ekler. Bu paketteki dosyalar resource yüklenirken client’lara indirilir. Yani client script’indeki, ortak config’teki ya da NUI sayfasındaki webhook her oyuncunun bilgisayarına iner. Merak eden biri onu oradan rahatça çıkarır.
Sızan webhook nasıl kötüye kullanılır
- Spam: gece 3’te yetkili kanalına yağan mesajlar ve etiketler.
- Sahte log: anticheat’in tanınmış bir oyuncuyu banladığını ya da bir yetkilinin kendine para verdiğini gösteren sahte bir mesaj. İsim ve avatar değiştirilebildiği için gerçek gibi durur.
- Silme: linki olan herkes webhook’u silebilir, logların da sessizce durur.
- Zararlı link: ekibinin güvendiği kanala, log botunun adıyla dolandırıcılık ya da virüs linki atılır.
En çok zararı sahte log verir. Ekip log kanalında okuduğuna göre hareket eder. Tek bir sahte ban logu topluluğunda gerçek bir kavga başlatabilir ya da gerçek bir hileciyi gürültünün altına gömebilir.
Webhook’un açıkta mı, kontrol et
resources klasöründe discord.com/api/webhooks ve eski adres olan discordapp.com/api/webhooks için arama yap. Her sonuç için o resource’un fxmanifest.lua dosyasını aç ve dosyanın nasıl yüklendiğine bak.
- client_script, shared_script ya da file altında: açıkta. Linki sızmış say.
- NUI sayfasında ya da onun JavaScript’inde: açıkta, çünkü sayfa oyuncunun oyununda çalışır.
- Yalnızca server_script altında: hiçbir event onu client’a göndermediği sürece sunucuda kalır.
- server.cfg’de setr ile: açıkta. Cfx.re dokümanlarına göre setr ile tanımlanan convar client’tan okunabilir.
Ekran görüntüsü script’lerine de bak. screenshot-basic’te requestScreenshotUpload adında bir client fonksiyonu var; oyuncunun oyunundan aldığı görüntüyü doğrudan bir URL’ye yükler. O URL bir Discord webhook’uysa link client kodunda duruyor demektir.
Resource’larında arka kapı olup olmadığını kontrol et
Logları yalnızca sunucudan gönder
Webhook’u yalnızca sunucunun okuyabileceği bir yerde tut. server.cfg’de düz bir set convar’ı iş görür. Cfx.re convar dokümanına göre standart convar’lar yalnızca sunucu script’lerinde kullanılabilir, sen de onu orada GetConvar ile oku. Client’ın okuyabildiği setr’den ve sunucu bilgilerinde herkese görünen sets’ten uzak dur.
Discord’a bir sunucu script’inden PerformHttpRequest ile gönder. Arkasındaki native yalnızca sunucuda çalışır, yani link makinenden hiç çıkmaz.
İkinci kural en az bunun kadar önemli. Client’tan log metni alıp Discord’a ileten bir sunucu event’i asla yazma. Cfx.re güvenlik rehberi hilelerin event’leri her bağlamda tetikleyebileceği konusunda uyarıyor. “Bunu logla” diyen bir event, gizli webhook’unu executor’u olan herkese bedavaya açar. Sunucu her logu kendi gördüğünden oluşturmalı.
- Mesajı sunucu verisinden oluştur: oyuncu adı, identifier’lar ve ne olduğu.
- allowed_mentions ayarla ki adı @everyone olan bir oyuncu bütün Discord’u etiketleyemesin. Discord dokümanları da veriyi temizlemeyi ve allowed_mentions kullanmayı öneriyor.
- Kill feed gibi yoğun logları daha az mesajda topla ki kalabalık bir saatte Discord’un rate limit’ine takılma.
Sızan webhook’u yenile
Link sızdıysa kodu düzeltmek yetmez. Eski link, onu kopyalayan herkes için çalışmaya devam eder. Discord’un webhook API’si adı, avatarı ve kanalı değiştirmene izin veriyor ama token’ı sıfırlamanın bir yolunu göstermiyor. Yani webhook’u değiştirmen gerekiyor.
- Discord’da log kanalının ayarlarını aç, Entegrasyonlar altında webhook’u bul ve sil.
- Aynı kanalda yeni bir webhook oluştur ve linkini kopyala.
- Yeni linki yalnızca sunucuda okunan bir convar’a koy ve resource’u yeniden başlat.
- Eski linki bütün client dosyalarından temizle, sonra aramayı tekrar çalıştır.
- Link açıktayken atılan sahte mesajlar için kanalı geriye doğru tara ve ekibe hangilerini görmezden geleceklerini söyle.
İyi bir ban logunda neler olur
- Oyuncu: adı ve varsa license, Discord ve Steam gibi değişmeyen identifier’ları.
- Kural: oyuncunun ne yaparken yakalandığı, ekibinin anlayacağı bir dille.
- Tepki: izlendi, engellendi, atıldı ya da banlandı; banlandıysa ne kadar süreyle.
- Kanıt: tespit anında alınmış bir ekran görüntüsü.
- Vaka kodu: oyuncunun itirazda yazacağı, ekibin arayıp bulabileceği kısa bir referans.
- Sunucu ve saat; birden fazla sunucun varsa nerede olduğunu bilmen için.
En çok zamanı vaka kodu kazandırır. Oyuncu kodu ticket’ına yapıştırır, ekip de isimle aramak yerine doğrudan o banı açar.
Discord’dan uzun yaşayan kanıt sakla
Discord kanalı bir akıştır ve akışlar kötü arşivdir. Mesajlar silinir, kanallar temizlenir, doğru role sahip herkes bir mesajı kaldırabilir. Altı ay sonra bir itiraz gelir ve kanıt ortada yoktur.
Kanıtı banın kendisiyle birlikte sakla, Discord mesajını da bildirim olarak gör. Daddy Shield tam olarak böyle çalışır. Her banda anticheat’in kendi aldığı ekran görüntüsü bulunur; görüntü banla birlikte saklanır ve kanalına gönderilir. Discord kanal bağlantını panelden ayarlarsın ve bu bağlantı oyun sunucusuna hiç ulaşmaz.
Kanıt her banla birlikte nasıl saklanıyor
Her FiveM banı neden ekran görüntüsüyle gelmeli
Sık sorulanlar
Yalnızca sunucu script’lerinde kullanılan webhook’u oyuncular görebilir mi? Ancak kodun onu onlara gönderirse. server_script altındaki dosyalar ve düz set convar’lar sunucuda kalır.
Linki obfuscate etmek işe yarar mı? Çok az. Oyunun mesaj atabilmesi için linkin tamamına ihtiyacı var, kararlı biri onu yine çıkarır.
Webhook’u açığa çıkarmadan Discord’a ekran görüntüsü gönderebilir miyim? Evet. Görüntüyü sunucu istesin, sunucu alsın ve sunucu göndersin. screenshot-basic’in requestClientScreenshot adlı sunucu fonksiyonu görüntüyü bir URL’ye değil, sunucuya yükletir.
Sahte logu nasıl anlarım? O webhook ile yalnızca sunucun mesaj atmalı. Sunucunun göndermediği bir mesaj görürsen link sızmış demektir, hemen yenile.
screenshot-basic çalışmayı bıraktığında ne yapmalı
Planlar 6 aylıkta aylık €19.99’dan, aydan aya €24.99’dan başlar. İlk ödemende 7 gün iade hakkın var.