lostyazilim
tr.link

Olusturulan uygulamada güvenlik önlemleri

10 Mesajlar 1.486 Okunma
acebozum
tr.link

tarkan3261 tarkan3261 WM Aracı Kullanıcı
  • Üyelik 25.03.2021
  • Yaş/Cinsiyet 46 / E
  • Meslek programcı
  • Konum Elazığ
  • Ad Soyad T** A**
  • Mesajlar 58
  • Beğeniler 3 / 7
  • Ticaret 0, (%0)
Arkadaslar basit bi anlik mesajlasma ve dosya gonderme uygulaması yaptim sizlerin yardımıyla, bunu çalıştığım kurumun serverina atacağız, neyse işte... simdi ben bunu mysqli tekniğiyle oluşturdum, simdilik pdo ya çok hakim değilim bu yüzden. Ogrenmek istedigim mysqli de en az pdo kadar guvenli bir yazım sekli midir, ikincisi, bu uygulamada güvenlik açığı ne olabilir? Mesajlasma ve dosya gonderim uygulaması. Bunu bileyim ki önlemlerini alayim, bir de; performans olayi, ayni anda kaç kişi mesajlaşıp dosya gonderme işlemi yapabilir, dosya yukleme olayına gb siniri getirmedim, getirmeli miyim? Dosya turu olayına da sinirlama getirmedim.aslinda en çok öğrenmek istedigim; bu uygulamada nasil bir güvenlik açığı olabilir, sonuçta basit bi uygulama, ne olabilir ki?
 

 

elektronikssl
reklam

OmerGunay OmerGunay https://omergunay.net Kullanıcı
  • Üyelik 15.05.2015
  • Yaş/Cinsiyet 33 / E
  • Meslek PHP Developer
  • Konum İstanbul Avrupa
  • Ad Soyad Ö** G**
  • Mesajlar 1207
  • Beğeniler 382 / 381
  • Ticaret 16, (%100)
tarkan3261 mysqli de pdo kadar güvenli diyenler var ama o konuyu çok bilmediğim için bişey diyemeyeceğim.

İlk olarak mutlaka dosya türü sınırlaması getirmelisin. Yoksa sisteme js dosyaları atıp sistemi ele geçirebilirler. Veya verilerini silebilirler falan. Aklıma ilk bu geldi.
 

 

Herkes yediğinden ikram eder..(Yavuz Sultan Selim)

tarkan3261 tarkan3261 WM Aracı Kullanıcı
  • Üyelik 25.03.2021
  • Yaş/Cinsiyet 46 / E
  • Meslek programcı
  • Konum Elazığ
  • Ad Soyad T** A**
  • Mesajlar 58
  • Beğeniler 3 / 7
  • Ticaret 0, (%0)
Tamam Ömer hocam o sinirlama isini halledeyim teşekkür ederim, zaten kurum içi olduğu için güvenlik sorunu olmaz diye düşündüm, iyi çalışmalar.
 

 

capscroll capscroll WM Aracı Kullanıcı
  • Üyelik 02.08.2019
  • Yaş/Cinsiyet 23 / E
  • Meslek Öğrenci
  • Konum Kahramanmaraş
  • Ad Soyad A** K**
  • Mesajlar 164
  • Beğeniler 41 / 54
  • Ticaret 0, (%0)
Post verilerini mutlaka sanitize(Sterilize) edin, önceki konunuza da örnek vermiştim.

Öncelikle her yerde çağırdınız functions.php/x.php dosyanıza ilgili fonksiyonu ekleyin.

function clean_data($data) {
$data = trim($data);
$data = htmlspecialchars($data);
return $data;
}


Ardından POST verisini kullanacağınız zaman oluşturduğunuz fonksiyonu kullanarak bunu sanitize edin.

$message = clean_data($_POST['message']);
$email = clean_data($_POST['email']);
$username = clean_data($_POST['username']);
 

 

wmaraci
wmaraci

tarkan3261 tarkan3261 WM Aracı Kullanıcı
  • Üyelik 25.03.2021
  • Yaş/Cinsiyet 46 / E
  • Meslek programcı
  • Konum Elazığ
  • Ad Soyad T** A**
  • Mesajlar 58
  • Beğeniler 3 / 7
  • Ticaret 0, (%0)
Çok teşekkürler, bu konulara yabancıyım bi araştırma yapayım ogreneyim
 

 

SN4DY SN4DY Freelance Developer Kullanıcı
  • Üyelik 12.10.2018
  • Yaş/Cinsiyet 24 / E
  • Meslek Freelance Back-end Developer
  • Konum Balıkesir
  • Ad Soyad E** A**
  • Mesajlar 26
  • Beğeniler 10 / 3
  • Ticaret 1, (%100)
şirketin sunucularına yükleyecekseniz, en basitinden csrf önlemi almalısınız.
 

 

Skype: sn4dy

onnoajans onnoajans WM Aracı Kullanıcı
  • Üyelik 13.03.2019
  • Yaş/Cinsiyet 34 / E
  • Meslek Pc programcılığı
  • Konum Muğla
  • Ad Soyad G** E**
  • Mesajlar 61
  • Beğeniler 2 / 13
  • Ticaret 1, (%100)
Merhaba ,

Öncelikle pdo kadar güvenlidir evet ve hala mysql kullanıp pdo kadar güvenli yazılımlar vardır.

Aslında bu sizin ne kadar hack bildiğinize ve bunlara karşı nasıl savunma yaptığınıza bağlıdır.

sizin sorunuza gelecek olursak bir veriniz var $_GET yada $_POST bunları süzerek şu hale getirin

function Guvenlikx($deger){
//$deger = htmlspecialchars($deger);
$deger = htmlspecialchars($deger,ENT_QUOTES);


return $deger ;
}

her sayfanın başına ekleyin ve kodların başına şu şekilde yazın Guvenlikx($_get['deneme'])


bu sizi tırnak işaretleri dahil bir çok kodu temizleyerek koruyacaktır . Bunun yanında her sayfaya yine bir sessıon oluşturun bu sessıon bilgisini kontrol ettirin sessıon dogruysa devam ettirin .

sessıon tek taraflı istek olduğu için mutlaka sunucudan yapılması gerekir yoksa hata vereceği için dısarıya kapatmıs oluyoruz sistemi

ve son olarak file manipulation hack yöntemi ile dosya upload kısmında önlem alın yeterlidir.

Performans olarak iç içe sorgu ve döngü kullanmayın yeterli olacaktır. kodlardaki hangi kod daha hızlı hangisi performnas olarak dhaa yavas isterseniz detaylı bir makale paylaşırım

iyi çalışmalar
 

 

http://www.onnoajans.com

JamesMoriarty JamesMoriarty WM Aracı Kullanıcı
  • Üyelik 22.09.2020
  • Yaş/Cinsiyet 21 / E
  • Meslek Öğrenci
  • Konum Bursa
  • Ad Soyad Ö** D**
  • Mesajlar 73
  • Beğeniler 9 / 9
  • Ticaret 1, (%100)
mysqli pdo kadar güvenli değildir SQL injection sqli de oluyor ve mesela dosya yükledim bu dosya shell olabilir kontrol etmelisiniz veya command açığı var mı dikkat edin shelli png olarak yükleyip oradan uzantısını değiştirebilir vs. Csrf dikkat edin kişinin mesaj göndermesini sağlayabilir habersiz.
 

 

AzveNet AzveNet WM Aracı Kullanıcı
  • Üyelik 13.06.2019
  • Yaş/Cinsiyet 43 / E
  • Meslek Serbest
  • Konum İstanbul Anadolu
  • Ad Soyad C** E**
  • Mesajlar 367
  • Beğeniler 69 / 147
  • Ticaret 0, (%0)
çok merak ettim, uzantı kontrolü yapınca nasıl yükleyecek shelli resim vs olarak. zaten anladığım kadarıyla local çalışacak bu uygulama. iş yerindekiler arasında. uzantı kısıtlaması ile ilgili gönderilebilecek içerikleri bilmediğim için bişey diyemiyorum. yani bir muhasebe firmasıdır misal php ile işi olma ama yazılım firması vs dir php de göndermek gerekebilir gibi.
pdo ve mysqli aynıdır. bu sizin kodları nasıl kullandığınıza bağlı yani. elbette pdo da bazı fonksiyonlar kısaltılmış vs. yani li de 5satırda yaptığınızı pdo da 2 satırda yaparsın. ama bazı konulardada li de 2 satırda yaptığını pdo da 5 satırda yaparsın.

tabii her zaman teknolojiye ayak uydurmak adına tercihini ne olursa olsun pdo dan yana kullanmanızı tavsiye ederim. optimizasyonu yaparsanız li de pdo gibi performans verir. yapamamışsan pdo ne yapsın :)

çok ağır ve aşırı kullanıcılı değilse en saçma mysqli bile 100kişiyi barındırır(bunların seri şekilde mesajlaştıklarını farzediyorum). ayrıca barındıracağınız sunucununda özellikleri farkettirir.
 

 

İmkansız olduğunu düşünürsen hiç birşey başaramazsın.

YazilimMimari YazilimMimari Eski adi: Turgay Can Kullanıcı
  • Üyelik 25.06.2012
  • Yaş/Cinsiyet 38 / E
  • Meslek Engineering Director
  • Konum İstanbul Avrupa
  • Ad Soyad T** C**
  • Mesajlar 771
  • Beğeniler 2 / 260
  • Ticaret 0, (%0)
istemediğin kadar açık vardır muhtemel :) aklıma gelenleri yazayım

web uygulama ise;

content security için aşağıdaki başlıklar önemlidir.

- Strict-Transport-Security
- X-Frame-Options
- X-XSS-Protection
- X-Content-Type-Options

XSS
XSRF-TOKEN
Cookie'lerin sunucu tarafında secure işaretli olmalı
Clickjacking

Host header kısıtlaması

Http metodlarının hepsi desteklenmemeli

username/password gibi önemli bilgi alanlarının tarayıcıda saklanmaması

jQuery kullanıldıysa, istemediğinde kadar açığı var.

Sırf bu yüzden artık jQuery kullanmıyoruz. Angular8+, Vue.js 2+ versiyonlarını tercih ediyoruz. Client side tarafında çoğu açığı framework seviyesinde handle ediyorlar.

URL'lerin yetkilendirmelerinin yapılması(authentication, authorization)

Admin'in eriştiği bir API'ye, yetkisiz bir kullanıcı istek atamamalı gibi :)

Ya da admin'in eriştiği bir ekran html'ini, yetkisiz bir kullanıcı bir şey yapamasa dahi html sayfa render edilmemeli

giriş sayfalarına recaptcha uygulanması + username/password denemelerinde 3,5 deneme hakkı sonrasındai ip bazlı süreli bloklama işlemi

Şifremi unuttum sayfasına captcha koyulması ve limitasyonlar eklenmeli

User/pass denemelerinde kullanıcıya verilen mesajlar çok yönlendirici olmamalı

Örnek : Şifresini hatalı giren birine : Kullanıcı ad veya şifreniz hatalı diye genel mesaj dön

Şifremi unuttum işlemi yapan birisine, email bulunamadı gibi bir hata dönme, belirtilen email adresine şifre sıfırlama linki gönderildi şeklinde genel bilgi dön.


Network tarafında client - server arasındaki bağlantı önem arzediyor. https olması aşırı önemlidir. Ksinlikel client - server arasında karşılıklı two side sertifika olmalıdır.

DB tarafında ise sql injection en büyük bela.. bunun için ORM gibi araçlar kullanılması önemlidir.

Dİnamik elle oluşturulmuş, query'ler rahatça client - server arasındaki data akışında manuğile edilip, db tarafına efso sorgular atılabilir.

mesela;

ekrandan bir kullanıcıyı seçip, mesaj kutusuna bir şey yazdınız.

backend'e giden istekte ;

fromUserId, toUserId,message,createDate gibi değerler olacaktır.

karşı tarafta ise mesaj kutusunu açtığında yada sayfada refresh işlemi yaptığında ;

DB'ye select message from messages where userId = 1 order by createDate asc; benzer yada farklı bir sorgu atıyordur.

userId = 1 <- 1 olan parametre yi tarayıcıda debug'da durdurup, "1 or 1=1" şeklinde gönderirseniz muhtemel messages tablosundaki tüm değerleri görecektir.

uygulama - db arasında sağlam bir network i/o + memory consumption, db tarafında file i/o ve memory consumption oluşturacaktır.

aklıma gelenleri hızlıca yazdım kolay gelsin:)

yazılım güvenliği çok ayrı bir uzmanlık alanıdır ve çok geniştir. Uzmanından destek almakta fayda var.
 

 

https://www.linkedin.com/in/turgaycan/
Kaliteli kod yazılır.. (Günlük/Saatlik ücreti ile)
wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al