Veri Tabanı Güvenliği Eğitimi Notları


  • https://www.exploit-db.com/ghdb/4924 SQL yedeklerini internette unutan siteleri bulup bu dosyaalarından veri tabanı şifreleri bujlunabilir.
  • SQL Union select fonksiyononu url’den göndererek diğer tablo adlarını öğrenebilir ve faydalanabilirsiniz: https://portswigger.net/web-security/sql-injection/union-attacks Bu fonksiyonda tablo adı ve kolonları bilmeye gerek yoktur.
  • Yukarıdaki işlemden sonra kullamnıcı tablosunda kullancı adları ve şfireleri de elde edilebilir.
  • Bunu elle yapmak yerine SQLMap adlı uygulama ile elle de yapılabilir. sqlmap -u “url” denerek sonuçlar görüntülenebilir ve buradan zaafiyetler tespit edilebilir.
  • vulnweb.com adlı web sayfasından öğrendiğiniz saldırı tekniklerini deneyebilirsiniz.
  • İç güvenliği teminen hangi kullanıcnın hangi IP’den girebileceği ve ne yapacağı belirlenmeli ve ayarlanmalıdır.
  • Kullanıcıların çalıştırabileceği fonksiyonlar belirlenmeli. Kullanıcılara insert select gibi fonksiyonlarda kısıtlama getirilebilir. Grant insert,update on firma.tablo1 to ‘editor_kullanici’@ip şeklinde bir sınırlama getirilebilir.
  • show grants komutu ile hangi tabloda kimin ne yetkisi olduğu görülebilir.
  • Hangi tablolara gireceği ayarlanmalıdır.
  • Diyelim ‘developer’ diye bir grup var. Kullanıcı adı sabit, farklı IP’ler tanımlanarak tek tanımlama ile grup halinde tanımlşama da yapılabilir.
  • Yetkilendirmek için ‘grant’ yetki kaldırmaki için ‘revoke’ kullanılır.
  • Bir kullanıcıyı sadece spesifik bir veri tabanına tanımlayıp geri kalanını izole etmek mümkündür.
  • Her ne kadar bazen kapalı da olsa sql iiçerisinde LOAD_FILE adlı bir komut vardır. Bu komout ile sistemdeki herhangi bir yere dosya yazmak olasıdır. Eğer bu açık varsa bu çok iyi şekilde kullanılabilir. Bu foksiyonla dosya okumak da mümkündür.
  • Load file açık gelir MySQL ve SQLServer’da. DÜZELTİLMELİ.
  • Yukarıdaki senaryoda bu durumda PHP dosyası içerisinde exec fonksiyonu içerisinde $_GET(“”) içerisine CMD yazılarak buradan konsolda istenen şey çalıştırılabilir. Böylece o php dosyasını web arayzüden çalıştırıp url’den paramatere yollanabilir.
  • Düzenli mysql yedeği için mysqldump komutu Cron Jobs olarak tanımlanmalıdır.
  • MySQL’de logları tabloda da haricen text dosyalarında da tutmak mümkündür.
  • Loglar üzerindeki logları incelmeek için select * from mysql.general_log ile konutlar görünür.
  • Ama komutlar hexadesimal olarak görünür convert fonsksiynonu ile komutlae görünmelidir.
  • Güvenlik amacıyla logların text olarak saklanması iyidir. Bu biraz yer kaplar.
  • Dosya halinde log tutulduğu takdirde logun yazılacağı yerdeki dosya izinleri iyi ayarlanmalıdır.
  • MSSQL’de xmp_cmdshell saldırıları çok kritiktir. Bu sayede veri tabanı sunucusu üzerinde sunucu konsoluna komut yollanabilir. Bunu engellemek için ‘sa’ kullanıcısı uygulamaların içerisinde kullanılmamalıdır.
  • Bu ilkelere uyulduğu takdirde paralı bir güvenlik uygulaması olmaksızın da sunucu güvenliği sağlanabilir.
  • Port numaraları defaulttan değiştirilmelidir ki Shodan yakalamasın.

RStudio içinde Python Kullanmak


RStudio harika bir araç. Özellikle değişkenleri canlı olarak göstermesi, grafik ve yardım paneli ile vazgeçilmez bir veri bilim aracı. Bu aracın tam bir Python muadili yoktu, Python ile analizler için. Gerek de kalmadı. RStudio’nun son sürümlerinde Python ile analizleri gerçekleştirmek mümkün. Bunun için `reticulate` adlı bir R kütüphanesini import etmek gerekiyor. Gerisi şöyle:

R Markdown içerisinde python kullanıyoruz.

Yeni Akademik Makale: Haberler ve Gerçeklik İlişkisi: Bir Kamu Kurumu Hakkındaki Haberler Üzerine İnceleme


Karadeniz Teknik Üniversitesi dergisinde çıkan bu makalemizde, algoritmik haber analitiği metotları ile TKDK hakkında farklı kaynaklarda çıkan haberleri analiz ettik. Bu yöntemler haberleri bir nevi “bilgisayarların okuyarak değerlendirmesine” olanak veren metotlar olarak kabul edilebilir. İşin içerisinde bilgisayarlar olunca yanlılık mevcut olmadığı gibi, milyonlarca haber bile olsa bunları hızla okuyacak bir güç söz konusu oluyor.

TKDK hakkında çıkan haberlerin kelime bulutu (İlgili makaleden)

Veri madenciliği daha da özelde metin madenciliği yöntemleri ile Söz gelimi haberlerde en sık görülen kavramları yukarıdaki gibi modelleyebiliyoruz. Ya da en çok hangi konuların ele alındığını aşağıdaki gibi görmek mümkün:

Haber Konuları Dağılımı (İlgili Makaleden)

Yine haberlerin yıl içerisinde yayınlanma tarihlerini de görebiliyoruz:

Haberlerin zamansal dağılımı (İlgili makaleden)

Haberlerin bu şekilde analizi, özetle şu sonuçları verdi:

  • Kurum hakkında çıkan haberlerde en çok yatırımlar ve hibe tutarları vurgulanmıştır.
  • Haberler genellikle hibelerin sunulacağı tarihlerde yoğunlaşmıştır.
  • Tanıtım toplantıları da haberlerde önemli bir yer edinmektedir.

Analizi Neyle Yaptık

Haberlerin otomatik olarak bulunup, daha sonra analiz edilmesi için R dili ile bir betik yazılması gerekiyor. R dili bu tür veri analitiği işlerinde harika bir araçtır ve ücretsizdir. R dili öğrenmek için hazırladığımız Türkçe bir kitap da mevcut:

R Dili ile Veri Analizi: Dr. Suat ATAN & Dr. Hakan Emekci, Seçkin Yayınevi.

Makalenin tam metni için aşağıyı tıklayınız

SVM Algoritması Örneği


Aşağıda SVM (Support Vector Machine) adlı makine öğrenmesi modeli ile yapay zeka adlı arkadaşa, mütevazı bir tahmin işlemi yaptıracağız. Bunun için Python ve SkLearn kütüphanesi ile aşağıda gördüğünüz şekildeki bir veri seti kullanıyoruz.

yasegitim_seviyesikredi_odememezlikrenk
5060green
6050green
7060green
5550green
5340green
5060green
5250green
5050green
4960green
5340green
5750green
2511red
3031red
4521red
2231red
3021red
3331red
2641red
2421red
Kredi ödememezlik tablosu

Yaş ve eğitim düzeyi bilgisi elimizdedir. Bu bilgilere göre bir de kredi geri ödeme durumunu biliyoruz.In [102]:

import pandas as pd
df = pd.read_excel('svm_ornek_data_1.xlsx')

In [115]:

import numpy as np
from sklearn import datasets
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC

In [111]:

df.sample(3)

Out[111]:

yasegitim_seviyesikredi_odememezlikrenk
134521red
16050green
65250green

Aşağıdaki grafikte dikkat ettiyseniz kredi geri ödememe durumu 0 olan (yani geri ödeyenler) eğitim düzeyi ve yaş yüksek kişiler. Diğerleri ise tam tersi düşük eğitimli ve genç kişiler.In [112]:

%matplotlib inline
import matplotlib.pyplot as plt
df.plot.scatter(x='yas',y='egitim_seviyesi',c=df['renk'])

Out[112]:

<matplotlib.axes._subplots.AxesSubplot at 0x27a0b7bc0b8>

Şimdi Support Vector Machine ile bu veri setini algoritmaya öğretip, bu veri setindeki bir durumda ortaya çıkacak durumu tahmin ettirelim.In [103]:

X = df.iloc[:,0:2].values.astype(float) #ilk iki kolonu al 0, 1
y = df.iloc[:,2:3].values.astype(float)# sadece 3. kolon 

StandardScaler kullanma nedeni: SVM veri setlerinin tüm kolonlar için benzer aralıkta olduğu durumlarda daha rahat çalışır. LinearSVC kullanma nedenimiz ise bu veri setinin lineer olarak ayrılabilimesi. Elbette bu mümkün olmayabilirdi de.In [131]:

scaler = StandardScaler()
X_std = scaler.fit_transform(X)

In [143]:

# Create support vector classifier
svc = LinearSVC(C=1.0, loss="hinge")

# Train model
model = svc.fit(X_std, y)
model

Out[143]:

LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,
     intercept_scaling=1, loss='hinge', max_iter=1000, multi_class='ovr',
     penalty='l2', random_state=None, tol=0.0001, verbose=0)

Şimdi tahmin yapalım: 51 yaşıda ve eğitim seviyesi 3 olan biri kredisini geri öder mi (0:öder, 1:Ödemez)In [144]:

model.predict([[51., 3.]])

Out[144]:

array([0.])

Hyperplane (Ayırıcı Sınır) Çizdirelim

In [146]:

# Plot data points and color using their class
color = ['black' if c == 0 else 'lightgrey' for c in y]
plt.scatter(X_std[:,0], X_std[:,1], c=color)

# Create the hyperplane
w = model.coef_[0]
a = -w[0] / w[1]
xx = np.linspace(-2.5, 2.5)
yy = a * xx - (svc.intercept_[0]) / w[1]

# Plot the hyperplane
plt.plot(xx, yy)
plt.axis("off"), plt.show();

Mavi çizgi hyperplane’mizi tanımlıyor

Modeli tanımlama Pipeline Kullanarak da olurdu, ancak grafik çizdirirken sorun yarattığından pipeline kullanmadık.In [ ]:

svm_clf = Pipeline((
("scaler", StandardScaler()),
("linear_svc", LinearSVC(C=1, loss="hinge")),
))
model = svm_clf.fit(X, y.ravel()) 
#ravel dikey array'ı yatay hale getirir. Mecburen böyle Pipeline kabul etmiyor yoksa

Metin Madenciliğinde Kullanılan TF.IDF skoru nasıl hesaplanır


Elinizde diyelim ki Suriye hakkında yazılmış bir milyon habervar. Tek tek okumayı düşünmüyorsunuz:) Bu dokümanların içinden söz gelimi İdlib hakkında geçen haberleri arayacaksınız. Hemen Ctrl+F’ye davranıyorsunuz 120806 adet kavram geliyor. Eh bunları da okuyazsınız. Peki bunların içinden en ilgili olanı okumak isterseniz ne yaparsınız. Bir nevi kendi küçük Google’nizi yaratmanız gerekecek. İşte tam burada böyle bir durumda TF.IDF skoru hesaplatmak yardımınıza koşar. Nasıl yapılacağını basit bir simülasyonla şurada anlattım.

Hazırladığım yeni bir yazılımdan “makale” çıkar mı?


Bu sorunun eski cevabı “hayır” idi. Nitekim, akademi bir yazılımı arkasında kuramsal bir geçmiş olan, hipotez sorusu mevcut ve bir soruya çözüm bulan bir konu olarak görmüyordu, kısmen haklıydı da.

Bu durum bir yazılımın ağzıyla kuş tutsa akademik değerinin olmaması anlamına geliyordu. Ancak geçenlerde Elsevier’in sitesinden tesadüfen karşılaştığım yeni bir “kampanya” artık yazılımların da akademik bir değere dönüşmesine olanak veriyor.

Ve şöyle diyor:

Yazılım geliştiriciler, genellikle normal makaleler, kılavuzlar veya kitaplar gibi proxy’lere akademik olarak tanınmakta güçlük çekerler. Yazılımın şu anda sistematik olarak tam ve eşit bir akademik öğe olarak değerlendirilmediğini düşünüyoruz. Yazılımın, bilimsel iletişim ekosisteminin ayrılmaz bir parçası olması gerektiğine inanıyoruz.

https://www.elsevier.com/authors/author-resources/research-elements/software-articles/original-software-publications

Bu “Orginal Software Publications” kampanyası, bu şekilde çalışmaları olan ben de dahil bir çok kişiye umut kapısı oldu. Bu sayede hazırlanan çalışmalar yeniden ele alınabilir, değerlendirilebilir ve iyi şeylere dönüşebilir.

13 Adımda Uluslararası Dergilere Makale Yollama Rehberi


academic journals ile ilgili görsel sonucu"

Uluslararası dergilere akademik çalışmanızı yollamak özen ve sabır isteyen bir iştir. Bu konuda akademik mentörlük sitesi olan AuthorAID üzerinden karşılaştığım ve faydalandığım kişi ve kaynaklar ve özellikle şu podcast ile daha önce farklı kaynaklardan derlediğim tecrübelere göre tüm değerli araştırmacılarımız için şöyle bir rehber hazırladım. Umarım faydalı olur:

1- Makale taslağını yaz, özeti hazırla

2- Makaleyi göndereceğin dergiyi seçmek için şu aracı kullanabilirsin. https://mjl.clarivate.com/mjl-beta/home Bu aracın özelliği, yazdığın taslak makalenin başlığı ve özetine göre en uygun dergiyi bulmaktır. Buna benzer iki araç daha var: Springer Journal Finder: https://journalsuggester.springer.com/ ve Edanz Journal Finder: https://en-author-services.edanzgroup.com/journal-selector

3- Dergi aramayı bir de manuel olarak gerçekleştir, Google Scholar’da anatar terimini (örneğin: text mining) ara ve çıkan makalelerin dergilerini not et. Bu dergilerle bir önceki adımdaki dergileri mukayese et.

4- Göndereceğin dergiyi seç, ancak ret ihtimaline karşı “etki faktörü” (impact factor) daha düşük bir dergi de seç. Mümkünde 4 veya 5 ilgili dergi adlarını al.

5- İlgili dergi sitesine git ve bu dergide ilgilendiğin anahtar terimle ilgili tüm makaleleri listele: örnek

6- Bu listedeki makalelerden en güncel bir kaçını oku, mümkünse diğerlerine de göz at. Ayrıca çalışmanı göndermeden önce istersen bu makaleleri “export” fonksiyonu ile indir ve çalışmanı daha da zenginleştir.

7- Göndermeye karar verdiğin dergi Elsevier’de ise bu derginin değerlendirme ve yayınlama süreleri de vardır.

Bunun için “View More on Journal Insights” linkini tıkla.

8- Süre konusunda problemin varsa daha hızlı değerlendirme yapan dergilere bakabilirsin.

9- Son dergi listeni yap.

10- Göndereceğin ilk dergide “Guidelines for Authors” ya da benzeri bölümlerdeki materyalleri dikkatle oku, derginin yayın politikasını vs. kontrol et, şartları incele, özellikle ücret istenip istenmediğine bak.

11-Makaleni gönderime hazırla

12- 5. adımdaki dergi sitesinde bulduğun makaleri de dikkate alarak, editöre özenle hazırlanmış bir “cover letter” hazırla, çalışmanın neden o dergide yayınlanması konusunda argümanlarını ortaya koy. O dergide alanındaki eski makalelerden de bahset.

13- Makaleni yükle ve cover letter’ini de ekle veya editöre epostala.

Bu kılavuz dışında şunlarada da bakabilirsiniz.

  • Erciyes Üniversitesinde bir çalıştay sunumu
  • Emerald Insihts Türkiye sunumu

Sizin de tecrübeleriniz varsa, paylaşmanızdan ötürü minnetdar olurum.