-
Üyelik
25.03.2021
-
Yaş/Cinsiyet
45 / 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?
-
Ü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)
-
Üyelik
25.03.2021
-
Yaş/Cinsiyet
45 / 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.
-
Ü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']);
-
Üyelik
25.03.2021
-
Yaş/Cinsiyet
45 / 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
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
-
Ü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
-
Ü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.
-
Üyelik
13.06.2019
-
Yaş/Cinsiyet
42 / 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.
-
Ü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)