Skip to content

SQLens

Featured image for SQLens
Apr 19, 2026
View Project
vscode-extension typescript php sql static-analysis security developer-tools

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
  • = NULL gibi 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ı
  • NULL karşılaştırma anti-pattern’leri
  • OR patlaması 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, Copy ve Refresh
  • 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 SELECT sorguları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


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.