SQLens
SQLens
SQLens, PHP dosyalarının içindeki SQL sorgularını editörü terk etmeden görünür hale getirmek için geliştirdiğim bir VS Code eklentisi. Amacım, sorgunun yalnızca bir metin parçası olarak kalmaması; güvenlik riski, performans sinyali ve bağlam bilgisiyle birlikte okunabilir bir geliştirici nesnesine dönüşmesiydi.
Problem
PHP projelerinde SQL çoğu zaman controller, helper, ORM sarmalayıcıları veya framework’e özgü veri erişim katmanlarının içine dağılmış halde kalıyor. Bu da şu sorunların daha geç fark edilmesine neden oluyor:
- kullanıcı girdisi ile yapılan güvensiz metin birleştirmeleri
SELECT *gibi gereksiz veri çekimine yol açan kalıplar= NULLgibi hatalı ya da maliyetli karşılaştırmalar- aynı çalışma alanı içinde dağılmış sorgular için ortak görünürlük eksikliği
Bu projeyi, PHP içindeki SQL’i “çalışıyor mu?” seviyesinden çıkarıp “ne yapıyor, ne kadar güvenli, nasıl iyileştirilir?” seviyesine taşımak için geliştirdim.
Bu projede odaklandığım noktalar
- PHP AST üzerinden sorguları yakalayıp framework’ten bağımsız bir analiz hattına toplamak
- WordPress, ezSQL, PDO, MySQLi ve Laravel DB gibi yaygın kullanım biçimlerini aynı deneyim içinde desteklemek
- Hover, CodeLens ve yan panel gibi editör içi yüzeylerde aynı sorguya farklı derinliklerde erişim vermek
- Varsayılan modu tamamen çevrimdışı tutup veritabanı bağlantısını isteğe bağlı ve güvenli kısıtlarla sınırlandırmak
Öne çıkan yetenekler
Akıllı kod analizi
- PHP AST çözümleme ile SQL metinlerini ve ilgili çağrıları tespit etme
- Framework ve metot bazlı otomatik sınıflandırma
- Temel girdi takibi ile kullanıcı girdisinin sorguya nasıl ulaşabileceğini işaretleme
Güvenlik analizi
- Olası SQL injection senaryolarını bayraklama
- Güvensiz birleştirme uyarıları
- Parametre bağlama kullanımının kontrolü
- Yüksek, orta ve bilgi seviyesinde risk sınıflandırması
Performans sinyalleri
SELECT *kullanım uyarılarıNULLkarşılaştırma anti-pattern’leriORpatlaması gibi okunurluğu ve plan kalitesini bozabilecek yapılar- İndeks kullanımı açısından dikkat isteyen sorgular için yönlendirme
VS Code deneyimi
Eklentinin en önem verdiğim tarafı, analiz sonuçlarının yalnızca bir günlük çıktısı olarak kalmaması. SQLens, sorguyu editör deneyiminin doğal bir parçası haline getiriyor:
- Hover bilgisi ile tablo, kolon ve güvenlik durumu özeti
- CodeLens aksiyonları ile
Preview,Explain,CopyveRefresh - Gezgin görünümleri ile çalışma alanındaki sorguların tek panelden takibi
- Explain planı ile sorgunun yalnızca metnini değil, nasıl çalışacağını da görmeye yardımcı akış
Güvenlik ve gizlilik modeli
Bu projede en net ürün kararı, “çevrimiçi servis gibi davranmamak” oldu. SQLens varsayılan olarak tamamen yerelde çalışır. İsteğe bağlı önizleme ve explain özellikleri etkinleştirilse bile şu sınırlar korunur:
- veritabanı bağlantısı kullanıcı tarafında açıkça tanımlanır
- salt okunur kimlik bilgileri kullanılması beklenir
- önizleme tarafında varsayılan olarak yalnızca
SELECTsorgularına izin verilir - satır limiti ve zaman aşımı ile kontrolsüz çalışma engellenir
Bu tercih, eklentiyi özellikle WordPress, legacy PHP ve operasyonel risk taşıyan kod tabanlarında daha güvenle kullanılabilir hale getiriyor.
Teknik yapı
- TypeScript ve VS Code Extension API
- php-parser ile PHP AST analizi
- mysql2 ve pg ile isteğe bağlı veritabanı bağlantıları
- esbuild ile paketleme
- VS Code 1.103+ ve Node.js 20+ geliştirme hedefi
Mimari olarak burada beni ilgilendiren ana konu, SQL’i sadece regex ile aramak değildi; PHP ifadesinin içindeki niyeti anlayabilecek kadar yapısal bilgiye erişmekti. Bu sayede daha doğru tespitler, daha anlamlı hover içeriği ve framework’e özgü kararlar üretmek mümkün hale geldi.
Şu anki sınırlar
Proje bilerek kapsamı kontrollü tutuyor. Şu an için:
- karmaşık Eloquent ORM sorguları tam kapsanmıyor
- girdi takibi temel seviyede ve bazı false positive/false negative sonuçlar üretebilir
- bazı ileri seviye explain akışları için veritabanı konfigürasyonu gerekiyor
Buna rağmen SQLens bugün bile ham PHP kodu içindeki SQL davranışını okumayı belirgin şekilde kolaylaştıran güçlü bir temel sunuyor.
Bağlantılar
- VS Code Marketplace: marketplace.visualstudio.com/items?itemName=aliyilmazco.sqlens
- GitHub deposu: github.com/aliyilmazco/sqlens
SQLens, PHP içindeki SQL’i editör içinde daha güvenli, daha görünür ve daha tartışılabilir hale getirmek için geliştirdiğim bir geliştirici aracı projesi.