lostyazilim
tr.link

Php'de Güvenlik-1 (Sürekli Güncellenecektir)

6 Mesajlar 1.519 Okunma
lstbozum
tr.link

Flawless Flawless Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 25.10.2013
  • Yaş/Cinsiyet 41 / E
  • Meslek Php Coder
  • Konum Antalya
  • Ad Soyad K** I**
  • Mesajlar 476
  • Beğeniler 22 / 87
  • Ticaret 7, (%100)
Merhaba arkadaşlar
Bugün sizlere php kodlamalarımızda dikkat etmemiz gerek güvenlik unsurlarından bahsedeceğim.
Konunun takip edilmesi beğenilmesi söz konusunu olursa konu hakkında devam dersleri yazmayı düşünüyorum.
Dersimize başlayalım
Öncelikle tüm kod yazan insanların -insan olmasından kaynaklanan bir durum olduğu için- hata yapabileceği inancındayım.Ne kadar uzman olursa olsun ne kadar uzun tecrübelere sahip olursa olsun hata kaçınılmazdır.Bu hata bazen kritik seviyede bir açık barındırır,bazen de basit bir notice dir.
Php scriptlerimizi kodlarken hatalarımızı görmek için error_reporting() fonksiyonunu kullanılırız.
ini_set('error_reporting', E_ALL | E_STRICT);
ini_set('display_errors', 'Off');
ini_set('log_errors', 'On');
ini_set('error_log', '/usr/local/apache/logs/error_log');

bu şekilde kullandığınızda hatadan haberdar olursunuz ama hatayı ekrana basmayacaktır.
Kötü niyetli kişilerin "Hacker,Attacker" vs kullandığı ilk yöntem siteyi hata vermeye zorlamaktır.Hata alırsa aldığı hata neticesinde kullanabileceği açıkları aramaktadır.Sql İnj. Xss vs gibi...
Güvenlik bir bütündür ve hataların ekrana basılmaması hatanın olmadıgı anlamına gelmez.Bu hataların ivedilikle önem derecesine göre düzeltilmesi gerekir.
Php sizlere başka bir fonkisyon daha sunmaktadır.
function my_error_handler($number, $string, $file, $line, $context)
{
$error = "= == == == ==\nPHP Hatası\n= == == == ==\n";
$error .= "Number: [$number]\n";
$error .= "String: [$string]\n";
$error .= "File: [$file]\n";
$error .= "Line: [$line]\n";
$error .= "Context:\n" . print_r($context, TRUE) . "\n\n";
error_log($error, 3, '/usr/local/apache/logs/error_log');

Bu şekilde hata kayıtlarını hangi dosyanın kaçıncı satırında ne hatası verdiğini kolaylıkla bulabilirsiniz.
Bir diğer husus post verilerimizdir.Hemen hemen her projemizde kullandığımız post bizim için bulunmaz bir nimetken bizim en büyük düşmanımız haline gelebilir.
$filename = $_POST['filename'];
while (strpos($_POST['filename'], '..') != = FALSE)
{
$filename = str_replace('..', '.', $filename);
}
?>

Burada posttan gelen filename'i doğrudan filename değişkenine atayıp o şekilde kullanırsak ve filename bize posttan .../.../etc/passwd şeklinde gelirse ne olur?
Sunucumuzda bulunan tüm hesapların pass hashlerinin tutulduğu dosyaya erişim sağlamaz mı?
peki basit bir while döngüsü ve strpos ve str_replace fonksiyonlarımızı kullanarak ne yapıyoruz. gelen veriyi filtreliyoruz.Dolayısıyla başlangıç seviyesinde de olsa bir güvenlik tedbiri alıyoruz.
En kısa sürede yeni doküman ile karşınızda olacağım.
Sorusu olanlara bu başlığın altından seviyeli bir şekilde sorabilir.
huseyintemizyurek emredokmetas58 Roots

kişi bu mesajı beğendi.

wmaraci
reklam

Forcerecon Forcerecon WM Aracı Kullanıcı
  • Üyelik 15.05.2014
  • Yaş/Cinsiyet 28 / E
  • Meslek Programlama
  • Konum İstanbul Avrupa
  • Ad Soyad E** Ş**
  • Mesajlar 306
  • Beğeniler 45 / 58
  • Ticaret 5, (%100)
Başlangıç için güzel döküman, Teşekkürler :)
Flawless

kişi bu mesajı beğendi.

www.oyuncumedya.com - Oyun, Haber ve Teknoloji Portalı!

Ertug Ertug WM Aracı Kullanıcı
  • Üyelik 21.09.2013
  • Yaş/Cinsiyet 34 / E
  • Meslek Yazılım geliştiricisi
  • Konum Ankara
  • Ad Soyad E** K**
  • Mesajlar 361
  • Beğeniler 51 / 43
  • Ticaret 0, (%0)
Spagetti kod yazmayıp frameworkler ile iş yapmak en rahatı. Yok illa spagetti takılacaksanız da PDO kullanın. htmlentities gibi fonksiyonları da kullanarak veritabanı ile ilgili açıkları kapatmış olursunuz. Gerisi de projenizde olan olaylara bağlı. Güzel paylaşım olmuş. Benim hiç aklıma gelmemişti bunlar. Teşekkürler.
Flawless

kişi bu mesajı beğendi.

[freenodeIRC]
PHP = #laravelTurkiye
C++ = #qtTurkiye
Python = #pythonium

Flawless Flawless Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 25.10.2013
  • Yaş/Cinsiyet 41 / E
  • Meslek Php Coder
  • Konum Antalya
  • Ad Soyad K** I**
  • Mesajlar 476
  • Beğeniler 22 / 87
  • Ticaret 7, (%100)
frameworklerde açıklar oluşabiliyor,konuyu yazmamım temel sebebi konu ile ilgili mantığı kavratmaktı.Mantık anlaşıldıktan sonra ister f/w kullanılsın isterseniz normal kodlama yapılsın sorunlar en aza inecektir.İlgi ve alakanıza güzel düşüncelerinize teşekkür ediyorum
 

 

wmaraci
wmaraci

Ertug Ertug WM Aracı Kullanıcı
  • Üyelik 21.09.2013
  • Yaş/Cinsiyet 34 / E
  • Meslek Yazılım geliştiricisi
  • Konum Ankara
  • Ad Soyad E** K**
  • Mesajlar 361
  • Beğeniler 51 / 43
  • Ticaret 0, (%0)

Flawless adlı üyeden alıntı

frameworklerde açıklar oluşabiliyor,konuyu yazmamım temel sebebi konu ile ilgili mantığı kavratmaktı.Mantık anlaşıldıktan sonra ister f/w kullanılsın isterseniz normal kodlama yapılsın sorunlar en aza inecektir.İlgi ve alakanıza güzel düşüncelerinize teşekkür ediyorum


Framework olarak Laravel kullanıyorum. Laravel' in CSRF, blade template ve PDO kullanmasından kaynaklı sanırım, henüz bir açığa denk gelmedim. Diğerlerini bilemiyorum.
 

 

[freenodeIRC]
PHP = #laravelTurkiye
C++ = #qtTurkiye
Python = #pythonium

Flawless Flawless Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 25.10.2013
  • Yaş/Cinsiyet 41 / E
  • Meslek Php Coder
  • Konum Antalya
  • Ad Soyad K** I**
  • Mesajlar 476
  • Beğeniler 22 / 87
  • Ticaret 7, (%100)
@ertug hocam basit bir google sorgusu sonucu bile lavarel'in remote code execution açığı olduğunu buldum.
Burada detaylı bir şekilde anlatımı mevcuttur.Yanlış anlamayın polemik olması açısından yada laraveli kötülemek gibi bir niyetim yok.Gayem güvenlik kavramının mantığını oturtmak.İlk kural elinizdeki projenize hiçbir zaman güvenmemenizdir.
 

 

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