İçeriğe atla

SQL enjeksiyonu

SQL Enjeksiyonu tipi atak tekniğinin 2010 itibarı klasifikasyonu.

SQL enjeksiyonu, veri tabanına dayalı uygulamalara saldırmak için kullanılan bir atak tekniğidir; burada saldırgan SQL dili özelliklerinden faydalanarak standart uygulama ekranındaki ilgili alana yeni SQL ifadelerini ekler. (Örneğin saldırgan, veritabanı içeriğini kendisine aktarabilir).[1] SQL enjeksiyonu, uygulamaların yazılımları içindeki bir güvenlik açığından faydalanır, örneğin, uygulamanın kullanıcı giriş bilgileri beklediği kısma SQL ifadeleri gömülür, eğer gelen verinin içeriği uygulama içerisinde filtrelenmiyorsa veya hatalı şekilde filtreleniyorsa, uygulamanın, içine gömülmüş olan kodla beraber hiçbir hata vermeden çalıştığı görülür. SQL enjeksiyonu, çoğunlukla web siteleri için kullanılan bir saldırı türü olarak bilinse de SQL veri tabanına dayalı tüm uygulamalarda gerçeklenebilir.

SQL enjeksiyon saldırıları, saldırganların, sistemdeki kullanıcılardan birinin bilgileriyle giriş yapmasına, mevcut verilere müdahale etmesine, bazı işlemleri iptal etmesine veya değiştirmesine, veri tabanındaki tüm verileri ifşa etmesine, veri tabanındaki tüm verileri yok etmesine, veri tabanı sunucusunda sistem yöneticisi olmasına olanak sağlar.

SQL enjeksiyonu, SQL alt dilini kullanan PHP, ASPX gibi birçok programlama dili üzerinde görülebilmektedir. Bu atak tekniği, SQL dili kullanılan sistemlerde genellikle GET ve POST verileri gönderilir ve alınırken yapılmayan filtrelemeler sebebiyle ortaya çıkar.

2012'de yapılan bir araştırmada, bir web uygulamasının ayda ortalama 4 saldırı aldığı ve perakendecilerin diğer endüstrilerden iki kat fazla saldırı aldığı görülmüştür.[2]

Tarih

SQL enjeksiyonu, 1998 yılı civarında tartışılmaya başlanmıştır.[3] Örneğin, 1998'de Phrak dergisinde yayımlanan bir makalede SQL enjeksiyonundan söz edilmiştir.[4]

Form

Açık Web Uygulaması Güvenlik Projesi (AWUGP)[5]'ne göre, SQL enjeksiyonu (SQLI), 2007-2010 yılları arasında web uygulamalarında en fazla görülen 10 güvenlik açığından biri olduğu belirtilmiştir.[] 2013'te ise yine AWUGP kapsamında, SQLI'ın web uygulamalarına en fazla yapılan saldırı olduğu kabul edildilmiştir.[] SQL enjeksiyonun'ın dört ana alt sınıfı vardır:

  • Klasik SQLI
  • Körleme SQL enjeksiyonu
  • Veri Tabanı Yönetim Sistemi- Özel SQL enjeksiyonu
  • Bileşik (Compounded) SQL enjeksiyonu:
    • SQL enjeksiyonu + yetersiz kimlik doğrulama[6]
    • SQL enjeksiyonu + DDoS saldırıları[7]
    • SQL enjeksiyonu + DNS korsanlığı[8]
    • SQL enjeksiyonu + XSS[9]

Storm Worm saldırısı, Compounded SQLI saldırılarına bir örnektir.[10]

Bu sınıflandırma, 2010'a kadar olan SQLI saldırıları için geçerlidir.Yeni gelişmeler için sınıflandırmalar yapım aşamasındadır.[11]

Teknik uygulamaları

Çıkış (Escape) karakterlerinin yanlış filtrelenmesi

SQLi'ın bu türü, kullanıcıdan gelen veri escape karaklerlerine göre filtrelenmediği zaman, uygulamaya kullanıcı girişinden yeni SQL ifadeleri eklenmesiyle oluşur. Eklenen SQL ifadeleri, son kullanıcının veri tabanını istediği şekilde manipüle etmesine neden olur.

Aşağıdaki kod satırı, bu güvenlik açığını göstermektedir:

sorgu = "SELECT * FROM kullanicilar WHERE isim =' " + kullaniciAdi + " ';"

Yukarıdaki SQL sorgusu girilen kullancı adı bilgisine ait tüm verileri, kullanıcı tablosundan çekecek şekilde tasarlanmıştır. Sistem kullanıcı adı bekliyorken,kullanıcı adı kısmına kötü niyetli bir kullanıcı tarafından sisteme zarar verecek sql ifadeleri yazılabilir. Örneğin, "kullaniciAdi" değişkenini aşağıdaki şekilde düzenleme yapılabilir.

' or '1'='1

Bu girdi Sql ifadesinin aşağıdaki şekilde işlenmesine neden olur:

sorgu = "SELECT * FROM kullanicilar WHERE isim =' " + kullaniciAdi ' or '1' = '1 + " ';"

Sorgunun geri kalanını engellemek için yorum satırı karakterleri kullanılır. (Aşağıda üç farklı SQl yorum satırı karakteri gösterilmiştir.[12]). Üç satırın sonunda da bir boşluk bulunmaktadır.

' or '1'='1' -- 
' or '1'='1' ({ 
' or '1'='1' /* 

Saldırgan bu SQL ifadelerini, uygulamaya kullanıcı girişi olarak girerse, uygulama tabanında çalışacak sorgu aşağıdaki şekilde olur.

SELECT * FROM kullanicilar WHERE kullaniciAdi ='' or '1' = '1 + " ';

"SELECT * FROM kullanicilar WHERE isim ='' or '1' = '1 + " ';"

"SELECT * FROM kullanicilar WHERE isim = '' OR '1'='1' -- ';

SELECT * FROM kullanicilar WHERE kullaniciAdi = '' OR '1'='1' -- ';

kullaniciAdi verisi ne olursa olsun '1'='1' koşulu sağlanacağı için ve aradaki işlemin OR olmasından dolayı sorgu sonucu her zaman olumlu olacaktır. Yorum satırı karakterlerinden sonra gelen tüm karakterler yorum niteliği kazanacaktır ve onların bir önemi kalmayacaktır.

Aşağıdaki SQL ifadesindeki "kullaniciAdi" na girilen değer, kişiler tablosunun silinmesine ve kişiBilgileri tablosundaki tüm verilerin ifşa edilmesine neden olur.

a';DROP TABLE kullanıcilar; SELECT * FROM kullanıciBilgileri WHERE 't' = 't'

Bu girdi Sql ifadesinin aşağıdaki şekilde işlenmesine neden olur:

SELECT * FROM kullanicilar WHERE kullaniciAdi = 'a';DROP TABLE kullanicilar; SELECT * FROM kullaniciBilgileri WHERE 't' = 't';

Çoğu SQL sunucusu, bir çağrı ile birden fazla SQL ifadesinin yürütülmesine izin verirken, PHP'nin mysql_query () fonksiyonu gibi bazı SQL API'leri güvenlik nedenlerinden dolayı buna izin vermez. Bu durum, saldırganların farklı sorgular açmalarını engeller, ancak sorguları değiştirmelerine engel değildir.

Yanlış tip işleme (Incorrect type handling)

SQLI'ın bu türü, kullanıcı tarafından girilen alanın tür kontrolü düzgün yapılmadığında oluşur. Bir sql ifadesinde sayısal değer kullanıldığında, kullanıcının girdisinin de sayısal değer olması gereklidir. Bu kontrol yapılmadığı zaman bir güvenlik açığı oluşur. Örneğin:

sorgu = " SELECT * FROM kullaniciBilgileri WHERE id =" + deger + "; "

Bu ifadede "id" alanına bir sayının gelmesi amaçlandığı açıktır.Ancak bir string gelmesi bekleniyorsa, son kullanıcı sql ifadesini istediği şekilde değiştirebilir.Örneğin değer yerine aşağıdaki ifade yazılırsa,

1;DROP TABLE kullanicilar

Sql ifadesi aşağıdaki şekilde olacak ve bu ifade sonucunda kullanicilar tablosu veri tabanından silinecektir.

SELECT * FROM kullaniciBilgileri WHERE id=1; DROP TABLE kullanicilar;

Körleme SQL enjeksiyonu

Körleme SQL enjeksiyonu, bir web uygulaması bir SQLI'na karşı açık olduğunda kullanılır, ancak sonuçları saldırgan tarafından görülemez.Güvenlik açığı bulunan sayfada veriler ifşa edilemez ama SQL ifadesinin içine gömülmüş olan mantıksal ifade nedeniyle değiştirilmiş veriler görüntülenebilir.

Koşullu yanıtlar (Conditional Responses)

Veritabanını, sıradan bir uygulamada, mantıksal bir ifadeyi değerlendirmeye zorlar. Örneğin bir kitap inceleme sitesinde, hangi kitabın görüntüleneceğini belirlemek için yandaki sorgu kullanılır. http://kitaplar.ornek.com/incelemeyiGoster.php?ID=5 URL'si sunucunun sorguyu çalıştırmasına neden olur.

SELECT * FROM kitapIncelemeleri WHERE id=Deger(ID);

Sorgu sunucuda tamamlanır. Kullanıcı veritabanının, tablonun veya alanların adlarını ve sorgu ifadesini bilmediği için bu kısımlara müdahale edemez. Sadece yukarıdaki URL'nin bir kitap incelemesi getirdiğini görür. Saldırgan, http://kitaplar.ornek.com/incelemeyiGoster.php?ID=5 OR 1 = 1 ve http://kitaplar.ornek.com/incelemeyiGoster.php?ID=5 AND 1 = 2 URL'lerini yüklediği zaman aşağıdaki sorgulara neden olabilir.

SELECT * FROM kitapIncelemeleri WHERE id='5' OR '1'='1';
SELECT * FROM kitapIncelemeleri WHERE id='5' AND '1'='2';

Bu sorgular sonucunda "1 = 1" URL'si ile orijinal inceleme sayfası geliyorsa veya "1 = 2" URL'si ile boş sayfa veya hata sayfası gönderiyorsa, sorgu büyük olasılıkla her iki durumda başarıyla geçmiştir ve site SQL enjeksiyonu saldırılarına açıktır. Hacker, sunucuda çalışan MySQL sürüm numarasını ortaya çıkarmak için tasarlanmış bu sorgu dizesiyle devam edebilir: http://kitaplar.ornek.com/incelemeyiGoster.php?ID=5AND substring(@@version, 1, INSTR(@@version, '.') - 1)=4.Bu sorgu sonrasında MySQL 4 çalıştıran bir sunucuda kitap incelemesi gösterilecek diğer durumlarda boş sayfa veya hata sayfası gönderecektir. Hacker, başka bir saldırı yolu bulana kadar veya hedeflerine ulaşılıncaya kadar sunucudan daha fazla bilgi toplamak için sorgu dizeleri içinde kod kullanmaya devam edebilir.[13][14]

İkincil SQL enjeksiyonu (Second order SQL injection)

İkincil SQL enjeksiyonu, kötü amaçlı kodlar içeren değerlerin gönderilir gönderilmez yürütülmeyip, bir süre tutulduğu zaman oluşur. Uygulama SQL ifadesini doğru şekilde encode edip, geçerli SQL ifadesi olarak depo edebilir. Sonrasında SQL enjeksiyonuna karşı denetimsiz olan uygulamanın başka bir kısmında, depolanan SQL ifadesi çalıştırılır. Bu saldırıyı gerçeklemek için saldırganın, gönderilen değerlerin daha sonra nasıl kullanıldığına dair daha fazla bilgiye sahip olması gerekir. Otomatik web uygulaması güvenlik tarayıcıları, bu tür bir SQL enjeksiyonunu kolaylıkla algılayamaz. Dolayısıyla kötü niyetli yazılımların kodun handi kısmında olduğu manuel olarak kontrol edilmelidir.

Saldırılara karşı önlemler

SQL enjeksiyonu, iyi bilinen bir saldırıdır ve basit önlemlerle kolayca önlenebilir. 2015'te Talktalk'daki bariz bir SQL enjeksiyon saldırısı sonrasında BBC, böyle büyük bir şirketin SQL enjeksiyonu açıklarının bulunmasının güvenlik uzmanlarını şaşırttığını belirtmişti.[15]

PHP dilinle ortaya çıkması

SQL alt dilinin dahil olduğu PHP sistemlerde örnek olarak aşağıdaki örnek kod üzerinde ortaya çıkar.

<?php
include("digerkodlar.php");
$veri = $_POST['veri'];
# burada veritabanına kaydedilecek olan veri filtreleme yapılmadan POST olarak alınıyor
?>

Güvenlik açığını kapatmak:

<?php
include("digerkodlar.php");
$veri = htmlspecialchars(addslashes(strip_tags($_POST['veri']));
# htmlspecialchars gibi bazı filtreleme komutlarıyla güvenlik açığını kapattık.
?>

Parametreleştirilmiş ifadeler

Çoğu uygulama geliştirme platformunda, parametre olarak kullanıcıdan gelen veri yerine parametrik ifadeler kullanılır. (placeholder veya bind variable olarak da isimlendirilirler.) Bir placeholder sadece verilen tipte veri saklar. Dolayısıyla SQL enjeksiyonu yalnızca ilginç (ve muhtemelen geçersiz) bir parametre değeri olarak ele alınır.

Çoğu durumda, SQL ifadesi belirlidir ve her parametre tablo olarak değil, bir skaler olarak saklanır. Kullanıcıdan gelen veri bu parametreye atanır.[16]

Kod seviyesinde zorlamak (Enforcement at the coding level)

Object-relational mapping (ORM) kütüphanelerini kullanmak, SQL kod yazma gereksinimini ortadan kaldırır. Etkin olan ORM kitaplığı, object-oriented koddan parametrik SQL ifadeleri üretir.

Escaping

SQL'de özel anlamları olan karakterlerden kaçınmak gereklilir. SQL DBMS, hangi karakterlerin özel bir anlam taşıdığını açıklar ve kapsamlı bir blacklist sunar. Örneğin her parametre içindeki tek tırnak işareti('), geçerli bir SQL string literal oluşturmsk için iki tek tırnak ile değiştirilir. ('') mysqli_real_escape_string();fonksiyonunu kullanarak parametrelerdern kaçınmak yaygın bir yöntemdir.

$mysqli = new mysqli('hostname', 'db_username', 'db_password', 'db_name');
$query = sprintf("SELECT * FROM `Users` WHERE UserName='%s' AND Password='%s'",
                  $mysqli->real_escape_string($username),
                  $mysqli->real_escape_string($password));
$mysqli->query($query);

Bu fonksiyon şu karakterlerin başına backslash (\) ekler. \x00, \n, \r, \, ', " \x1a. MySQL'e bir sorgu göndermeden önce veri güvenliğini sağlamak için kullanılır.[17]

PHP'de birçok vertabanı türü için birçok fonksiyon var örneğin pg_escape_string() fonsiyonu PostgreSQL için. Slash eklemek için kullanılan addslashes (string $ str) fonksiyonu escaping karakterler için kullnılır. Veri tabanında sorgulanacak karakterlerin başına backslash (\) eklenmiş bir string döndürür. Bu karakterler tek tırnak işareti ('), çift tırnak işareti ("), backslash (\) ve NUL (NULL bayt) şeklindedir.[18]

İnput güvenliğini sağlamak için şeffaf bir katman oluşturmak hata eğilimini azaltabilir, ancak tamamen ortadan kaldırmaz.[19]

Örüntü kontrolü

Integer, float, boolean, string parametreleri, değerlerinin belirtilen tür için geçerli olup olmadığı kontrol edilebilir. Stringlerin başka paternlara göre de kontrol edilmesi gerekebilir. (tarih, UUID, sadece alfanumerik, vb.)

Veri tabanı izinleri

Web uygulamaları tarafından verilen, veri tabanında oturum açma izinlerini kısıtlamak, web uygulamalarındaki açıkları kullanan bir SQL enjeksiyon saldırılarının etkinliğini azaltmaya yardımcı olabilir.

Örneğin, Microsoft SQL Server'da bir veritabanı oturum açma işleminde bazı sistem tablolarına erişim kısıtlanabilir bu sayede veritabanındaki tüm text sütunlarına JavaScript eklemeyi deneyen kötü niyetli yazılımlar sınırlandırılmış olur.

deny select on sys.sysobjects to webdatabaselogon;
deny select on sys.objects to webdatabaselogon;
deny select on sys.tables to webdatabaselogon;
deny select on sys.views to webdatabaselogon;
deny select on sys.packages to webdatabaselogon;

Dış bağlantılar

Kaynakça

  1. ^ "SQL Injection". Microsoft. 2 Ağustos 2013 tarihinde kaynağından arşivlendi. Erişim tarihi: 4 Ağustos 2013. SQL injection is an attack in which malicious code is inserted into strings that are later passed to an instance of SQL Server for parsing and execution. Any procedure that constructs SQL statements should be reviewed for injection vulnerabilities because SQLi Server will execute all syntactically valid queries that it receives. Even parameterized data can be manipulated by a skilled and determined attacker. 
  2. ^ "Imperva Web Application Attack Report" (PDF). 17 Nisan 2016 tarihinde kaynağından (PDF) arşivlendi. .
  3. ^ Sean Michael Kerner (25 Kasım 2013). "How Was SQL Injection Discovered? The researcher once known as Rain Forrest Puppy explains how he discovered the first SQL injection more than 15 years ago". 18 Mart 2014 tarihinde kaynağından arşivlendi. .
  4. ^ Jeff Forristal (25 Aralık 1998). "NT Web Technology Vulnerabilities". Phrack Magazine. 22 Nisan 2017 tarihinde kaynağından arşivlendi. (8. makale) 
  5. ^ "The Open Web Application Security Project". 23 Nisan 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Nisan 2020. 
  6. ^ "WHID 2007-60: The blog of a Cambridge University security team hacked" 18 Nisan 2016 tarihinde Wayback Machine sitesinde arşivlendi.. Xiom. 03-06-2011 tarihinde arşivlendi.
  7. ^ "WHID 2009-1: Gaza conflict cyber war" 19 Nisan 2016 tarihinde Wayback Machine sitesinde arşivlendi.. Xiom.03-06-2011 tarihinde arşivlendi.
  8. ^ 18 Haziran 2009 tarihinde Arşivlendi,( Wayback Machine)
  9. ^  "Third Wave of Web Attacks Not the Last". 22 Nisan 2017 tarihinde Wayback Machine sitesinde arşivlendi. Dark Reading. 29-07-2017 tarihinde arşivlendi.
  10. ^ Danchev, Dancho (23-01-2007. "Mind Streams of Information Security Knowledge: Social Engineering and Malware"[]. Ddanchev.blogspot.com. 03-06-2011 tarihinde alıntılandı.
  11. ^  Deltchev, Krassen. "New Web 2.0 Attacks" 16 Ağustos 2017 tarihinde Wayback Machine sitesinde arşivlendi.. B.Sc. Thesis. Ruhr-University Bochum. 18-02-2010 tarihinde arşivlendi.
  12. ^  IBM Informix Guide to SQL: Syntax. Overview of SQL Syntax > How to Enter SQL Comments, IBM
  13. ^  macd3v. "Blind SQL Injection tutorial" 14 Aralık 2012 tarihinde Wayback Machine sitesinde arşivlendi.. 6 Aralık 2012 tarihinde arşivlendi.
  14. ^ Andrey Rassokhin; Dmitry Oleksyuk. "TDSS botnet: full disclosure" 9 Aralık 2012 tarihinde Wayback Machine sitesinde arşivlendi.. 6 Aralık 2012 tarihinde arşivlendi
  15. ^  "Questions for TalkTalk - BBC News" 26 Ekim 2015 tarihinde Wayback Machine sitesinde arşivlendi.. BBC News. 25-10-2015 tarihinde arşivlendi.
  16. ^ "SQL Injection Prevention Cheat Sheet". Open Web Application Security Project.3 Mart 2012 tarihinde arşivlendi.
  17. ^  "mysqli->real_escape_string - PHP Manual 17 Nisan 2016 tarihinde Wayback Machine sitesinde arşivlendi.". PHP.net.
  18. ^ "Addslashes - PHP Manual 5 Eylül 2011 tarihinde Wayback Machine sitesinde arşivlendi.". PHP.net.
  19. ^ "Transparent query layer for MySQL 11 Kasım 2010 tarihinde Wayback Machine sitesinde arşivlendi.". Robert Eisele. 8 Kasım 2010

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">MySQL</span>

MySQL, altı milyondan fazla sistemde yüklü bulunan çoklu iş parçacıklı, çok kullanıcılı, hızlı ve sağlam bir veri tabanı yönetim sistemidir.

<span class="mw-page-title-main">JavaScript</span> programlama dili

JavaScript, HTML ve CSS ile birlikte World Wide Web'in temel teknolojilerinden biri olan programlama dilidir. Web sitelerinin %97'sinden fazlası, web sayfası hareketleri için istemci tarafında JavaScript kullanırlar ve kullanılan kodlar genellikle üçüncü taraf kitaplıkları içerir. Tüm büyük web tarayıcılarında, kaynak kodunu kullanıcıların cihazlarında yürütebilmek için özel bir JavaScript motoru bulunur.

<span class="mw-page-title-main">ASP</span>

Active Server Pages kısaca ASP, Microsoft'un ilk dinamik web sayfaları üretmek için geliştirdiği sunucu taraflı betik motoru. Klasik ASP ya da ASP Klasik olarak da bilinir.

<span class="mw-page-title-main">PHP</span> bir programlama dili

PHP: Hypertext Preprocessor, internet için üretilmiş, sunucu taraflı, çok geniş kullanımlı, genel amaçlı, içerisine HTML gömülebilen betik ve programlama dilidir. İlk kez 1995 yılında Rasmus Lerdorf tarafından yaratılan PHP'nin geliştirilmesi bugün PHP topluluğu tarafından sürdürülmektedir. Ocak 2013 itibarıyla 244 milyondan fazla web sitesi PHP ile çalışırken 2.1 milyon web sunucusunda PHP kurulumu bulunmaktadır.

SQL, verileri yönetmek ve tasarlamak için kullanılan bir dildir. SQL, kendi bir programlama dili olmamasına rağmen birçok kişi tarafından programlama dili olarak bilinir. SQL herhangi bir veri tabanı ortamında kullanılan bir alt dildir. SQL ile yalnızca veri tabanı üzerinde işlem yapılabilir; veritabanlarında bulunan sistemlere bilgi ekleme, bilgi değiştirme, bilgi çıkarma ve bilgi sorgulama için kullanılmaktadır. Özellikle de ilişkisel veritabanı sistemleri üzerinde yoğun olarak kullanılmaktadır. SQL'e özgü cümleler kullanarak veri tabanına kayıt eklenebilir, olan kayıtlar değiştirilebilir, silinebilir ve bu kayıtlardan listeler oluşturulabilir.

Kaynak Tanımlama Çerçevesi, metadata model olarak tasarlanmış bir World Wide Web Consortium (W3C) spesifikasyonu olmasına rağmen, çeşitli sözdizim biçemlerinde bilgi modellemek için kullanılan genel bir metoda dönüşmüştür.

<span class="mw-page-title-main">Microsoft SQL Server</span>

Microsoft SQL Server, Microsoft tarafından geliştirilen ve yönetilen bir ilişkisel veritabanı yönetim sistemidir. SQL Server, büyük ve karmaşık veritabanlarını depolamak, yönetmek, sorgulamak ve işlemek için kullanılan bir yazılım ürünüdür. Veri depolama, veri güvenliği, yedekleme, geri yükleme, veri entegrasyonu, analiz ve raporlama gibi çeşitli veritabanı yönetimi işlevlerini destekler.

Exploit, bir bilgisayar programı veya betiktir, bilgisayar programlarında bulunan zayıflık veya hatalar için kullanılır.

Language Integrated Query .NET dillerine SQL benzeri sorgulama becerisi ekleyen bir Microsoft .NET Framework bileşenidir. "Link" diye okunur.

phpMyAdmin

phpMyAdmin, PHP ile yazılmış açık kaynak kodlu bir araçtır. Başlıca kullanım amacı İnternet üzerinden MySQL veritabanı yönetimidir. Veritabanı oluşturma ve silme, tablo ekleme/değiştirme/silme, alan ekleme/değiştirme/silme, SQL sorguları çalıştırma, kullanıcıları, yetkileri ve alan anahtarlarını yönetme gibi işlevleri yapabilen ücretsiz bir yazılımdır.

DNS spoofing diğer adıyla DNS önbellek zehirlenmesi, Alan Adı Sistemi verisini bozarak, DNS çözümleme önbelleğine bozuk verinin yerleştirildiği bir bilgisayar güvenliği saldırısıdır. Ad sunucusunun yanlış sonuç dönmesini sağlar, örneğin IP adresi. Böylece saldırgan, trafiği kendi bilgisayarına yönlendirebilir.

MongoDB (“humongous”); MongoDB Inc. tarafından ölçeklenebilir, doküman tabanlı, C++ ile geliştirilmiş açık kaynak, NoSQL veritabanı uygulamasıdır. MongoDB, verileri JSON benzeri bir veri biçimi olan BSON tabanlı dokümanlarda saklamaktadır, anlamsal alanları dokümandan dokümana değişir ve veri yapısı zaman içinde değiştirilebilir. Belge modeli, uygulamanızın kodundaki nesnelerle eşleştirilir, böylece verilerin kullanımı kolaylaşır. Geçici sorgular, dizin oluşturmak için ve gerçek zamanlı verilerinize erişmek ve analiz etmek için güçlü yollar sağlar. MongoDB, özellikle hız gerektiren ve geleneksel ilişkisel veritabanlarının (RDBMS) hantal ve yavaş kaldığı yapılarda kullanılmaktadır. MongoDB, dağıtılmış bir veritabanı yapısına sahiptir, bu nedenle yüksek erişilebilirlik, yatayda ve dikeyde ölçeklendirme yapılabilmektedir. MongoDB, GNU Affero Genel Kamu Lisansı uyarınca yayınlanan ücretsiz ve açık kaynaktır.

Fuzzing, sisteme beklenmedik, yarı geçerli, sıralı verilerin gönderimi gibi yöntemlerle sistemin iç yapısındaki hataları bulmayı hedefleyen Kapalı-Kutu yazılım test etme yöntemi. Fuzzing için çeşitli test yöntemleri isimlendirilmektedir:

Bir uzamsal (mekansal) veri tabanı verileri depolamak ve bir geometrik uzayda/uzamda/mekanda tanımlanmış nesneleri temsil için sorgu verileri ile en uygun hale getirilmiş bir veri tabanıdır. En gelişmiş uzamsal veri tabanları, noktalar, çizgiler ve çokgenler gibi basit geometrik nesnelerin temsiline izin verir. Bazı uzamsal veri tabanları, 3D nesneler, topolojik kapatıcılık, doğrusal ağlar ve Üçgenlenmiş Düzensiz Ağ gibi daha karmaşık yapıları işlemektedir. Özgün veri tabanları çeşitli sayısal veriler ve karakter tiplerini yönetmek için tasarlanmış olsa da veri tabanlarına etkin uzamsal veri türlerini işlemek için ek işlevsellik eklenmesi gerekiyor. Bunlara genellikle geometri veya özellik denir. Open Geospatial Consortium basit özelliklerin belirtimini oluşturdu ve veri tabanı sistemlerinde uzamsal işlevsellik eklemek için ölçütleri belirliyor.

W3Schools, 1998 yılında kurulmuş programlama dillerini öğretmeyi amaçlayan ücretsiz bir eğitim sitesidir. Aynı zamanda bir uygulaması da bulunmaktadır. İsmi World Wide Web'den (W3) türetimiştir fakat W3C ile herhangi bir bağlantısı yoktur.

İlişkisel veritabanı, 1970 yılında Edgar Frank Codd tarafından önerildiği gibi, organizasyonu ilişkisel veri modeline dayanan bir dijital veritabanıdır. İlişkisel veritabanlarını korumak için kullanılan çeşitli yazılım sistemleri bir ilişkisel veritabanı yönetim sistemi (RDBMS) olarak bilinir. Neredeyse tüm ilişkisel veritabanı sistemleri, sorgulama ve veritabanının bakımı için dil olarak SQL(Structured Query Language) kullanmaktadırlar.

<span class="mw-page-title-main">HeidiSQL</span>

HeidiSQL; MySQL'in yanı sıra Microsoft SQL Server ve PostgreSQL için ücretsiz ve açık kaynaklı bir istemcidir. Kullanıcılar HeidiSQL ile veritabanlarını yönetmek için, bir oturum oluşturarak kabul edilebilir kimlik bilgileri olan bir yerel veya uzak MySQL sunucusuna giriş yapmalıdır. Bu oturumda kullanıcılar MySQL veritabanlarını bağlı MySQL sunucusu içinde yönetebilir ve bittiğinde sunucudan bağlantısını kesebilir. Özellik kümesi, en yaygın ve gelişmiş veritabanı, tablo ve veri kaydı işlemleri için yeterlidir, ancak bir SQL veritabanı önündeki tam işlevselliğe doğru aktif olarak gelişmeye devam etmektedir.

Siteler arası betik çalıştırma, genellikle web uygulamalarında görülen, genellikle HTML enjeksiyonu zafiyetiyle birlikte ortaya çıkan veya Java Script kullanan bazı aplikasyonlarda bulunan bir güvenlik açıklığıdır. XSS, diğer kullanıcılar tarafından görüntülenen web sayfalarına istemci taraflı Java Script kodunun enjekte edilmesine imkân verir. Siteler arası betik çalıştırma açıklığı, saldırganlar tarafından aynı kök politikası gibi bazı erişim kontrollerini atlatmak ve hedef adresin oturum katmanını ele geçirmek için kullanılabilmektedir. Web sayfaları üzerinde gerçekleştirilen siteler arası betik çalıştırma saldırıları, 2007 itibarıyla Symantec'in raporladığı tüm güvenlik açıklıklarının yaklaşık olarak %84'ünü oluşturmaktadır. Zafiyet içeren sitenin işlediği verinin hassasiyetine ve site sahibi tarafından uygulanan güvenlik tedbirlerine bağlı olarak, etkisi ufak bir aksamadan önemli bir güvenlik riskine kadar değişebilmektedir.

SQL Server Compact veya SQL CE Mobil cihazlar ve masaüstü uygulamalar için Microsoft tarafından üretilen kompakt bir ilişkisel veritabanıdır. Masaüstü platformunun tanıtımından önce, Windows CE ve SQL Server Mobile Edition için SQL Server olarak biliniyordu. En yeni sürüm SQL Server Compact 4.0, .NET Framework 4.0'ı destekliyor ve bu sürümde Windows Mobile için destek bırakıyor. Hem 32 bit hem de 64 bit yerel desteği içerir. SQL CE zaman zaman bağlı uygulamaları ve uygulamaları gömülü bir veritabanı ile hedefler. İndirmek ve yeniden dağıtmak serbesttir. SQL CE için bir ODBC sürücüsü yoktur ve planlanmamış biridir. Yerel uygulamalar, OLE DB aracılığıyla SQL CE'yi kullanabilir.

Kod enjeksiyonu, geçersiz verilerin işlenmesinden kaynaklanan bilgisayar hatasından yararlanmadır. Enjeksiyon, saldırgan tarafından savunmasız bir bilgisayar programına kod enjekte etmek ve yürütmenin seyrini değiştirmek için kullanılır. Başarılı kod eklemenin sonucu felaket olabilir. Örneğin, bilgisayar virüslerinin ya da solucanların yayılmasına izin verilebilir.