TekinAli ⎇ main

Bu site nasıl çalışıyor?

Özgeçmişimi neden bir IDE'ye ve gerçek bir SQLite veritabanına koydum, alttaki SQL konsolu nasıl güvenli tutuluyor.

Bu site ASP.NET Core Razor Pages ile yazıldı. Özgeçmişim tek bir cv.json dosyasında duruyor. Uygulama her açılışta bu dosyadan bir SQLite veritabanı üretiyor. Soldaki .cs ve .swift dosyaları da aşağıdaki SQL konsolu da aynı veriyi gösteriyor.

Ziyaretçiye SQL çalıştırtmak

Herkese açık bir sayfada SQL çalıştırmak kulağa riskli geliyor. Bu yüzden koruma, sorguyu metin olarak "temizlemeye" değil, veritabanının kendi mekanizmalarına dayanıyor:

raw.sqlite3_limit(handle, raw.SQLITE_LIMIT_ATTACHED, 0);   // ATTACH yok
raw.sqlite3_set_authorizer(handle, Authorizer, null);      // sadece okuma
raw.sqlite3_progress_handler(handle, 10_000, Progress, w); // 1,5 sn sınırı
  • Dosya salt okunur modda açılıyor.
  • Authorizer sadece SELECT, okuma ve fonksiyon çağrılarına izin veriyor. PRAGMA, ATTACH ve yazma işlemleri motor seviyesinde reddediliyor.
  • Progress handler 1,5 saniyeyi aşan sorguları kesiyor. Sonsuz bir WITH RECURSIVE bile sunucuyu kilitleyemiyor.
  • Yanıt 200 satırla sınırlı ve IP başına dakikada 30 istek kabul ediliyor.

Dene

Aşağıdaki konsola şunu yaz:

SELECT y.ad, count(*) AS proje_sayisi
FROM yetenekler y
JOIN proje_yetenek py ON py.yetenek_id = y.id
GROUP BY y.id
ORDER BY proje_sayisi DESC;
tekinali.db · salt okunur · ● bağlı

SQLite 3.53.3 · 8 tablo, 2 view.

Soldaki bir tabloya tıkla, aşağıdan bir sorgu seç ya da kendin yaz. Yardım: \?

↑↓ seç · Enter aç · Esc kapat