lostyazilim
tr.link

PHP Güvenlik Rehberi

4 Mesajlar 1.250 Okunma
lstbozum
tr.link

jsdev jsdev WM Aracı Kullanıcı
  • Üyelik 21.03.2012
  • Yaş/Cinsiyet 34 / E
  • Meslek -
  • Konum İstanbul Anadolu
  • Ad Soyad F** A**
  • Mesajlar 360
  • Beğeniler 23 / 168
  • Ticaret 0, (%0)
PHP ile Güvenliği Sağlamak




Aslına bakarsanız PHP’ de güvenlik, insanda güzellik gibi göreceli bi kavramdır biz ne kadar güvenlik önlemleri alırsak alalım muhakkak ki scriptlerimizin hacklenmeyeceğinin garantisi yoktur ama bu işi zorlaştırabiliriz ya da caydırıcı bir hale neden getirmeyelim ki ?
1 – Form Güvenliğini Sağlamak – HTML – Javascript – PHP ve benzeri kodları engellemek

PHP ‘ de formdan gelen verilerde kullanıcılarınız formdan zararlı javascript ya da html kodları (yönlendirme kodu gibi) gönderebilir, bunun önüne geçmenin 2 yöntemi var ilki script_tags(); fonksiyonu bu fonksiyon formdan gelen kodları süzerek olduğu gibi yazdırır




İsim :



if($_POST){
$isim = strip_tags($_POST['isim']);
echo $isim;
?>


Yukarıdaki fonksiyonda formdan gelen html,php ya da vb dillerde kod parçası girdiğimizde otomatik olarak kodlarla beraber sayfaya yazdıracaktır yani burada kodlar etkisiz hale gelecektir.
Not : Süzülmesini istemediğiniz kodlar var ise bunu parametre olarak belirtebilirsiniz bkz : 1.1
1.1 :


"); ?>

gibi.
bunun bir benzeri olarak birde htmlentities(); fonksiyonu mevcuttur, fakat htmlentities();’te tek fark vardır < ve > karakterlerini yazdırmaz dolayısıyla kodlar etkisiz hale gelmiş olur. bkz : 1.2
1.2



$veri = "Farzedelim ki bu zararlı bir html ya da js kodudur";

echo htmlentities($veri);

?>


yukarıdaki kod bize çıktı olarak aynen şöyle dönecektir;

bir diğeri ise strip_tags(); a benzer yapıda olan htmlspecialchars fonksiyonudur, onu es geçiyorum mantığı strip_tags() ile aynıdır.


2 – sQL Injection Açıklarından Korunmak

PHP adres satırı ya da formdan ziyaretçilerimiz veritabanına sQL sorguları gönderebilir (nasıl gönderileceğini açıklamıyoruz tabii ki) bu sQL sorgularıyla ise veritabanındaki bilgilerimize (bi nevi özelimize) rahatlıkla ulaşabilir ve müdahale edebilir (silme,düzenleme) bu yüzden formdan girilen bilgilere sQL kodlarını enjekte etmeliyiz ki (yani süzmeliyiz) formdan ya da adres satırından gelebilecek olan saldırı tarzı sorgulara karşı önlem almalış olalım. Bunu ise şöyle yapabiliriz : Bkz 1.3
1.3

$formdan_gelen_veri = mysql_real_escape_string($_POST['formdan_gelen_veri']); // ya da

$adres_satırından_gelen_veri = mysql_real_escape_string($_GET['adres_satırından_gelen_veri']);

?>

Burada mysql_real_escape_string(); fonksiyonu ile formdan gelen escape karakterleri yani tek tırnak (‘) ve çift tırnak karakterlerini zararsız hale getirerek (ki burada çift tırnak ve tek tırnakları yine yazdırır) bize temiz halde yeniden çıktı olarak verir.Peki neden tırnakları aldırıyoruz ? sQL ınjection açığı işte tamda burada devreye giriyor çünkü veritabanına sorgu gönderirken sorgular içerisinde ki şartlı deyimlerde tek tırnak kullanıyoruz. adi=’xx’ or soyadi=’nn’ gibiyse gibisinden..

Bu yazı ileride güncellenecektir.


Kaynak : PHP Güvenlik Rehberi
meteturkdonmez

kişi bu mesajı beğendi.

Buraya yakında yeni proje gelecek Coming soon!
wmaraci
reklam

meteturkdonmez meteturkdonmez WM Aracı Kullanıcı
  • Üyelik 28.03.2011
  • Yaş/Cinsiyet 28 / E
  • Meslek PHP Developer
  • Konum İstanbul Anadolu
  • Ad Soyad M** D**
  • Mesajlar 439
  • Beğeniler 11 / 45
  • Ticaret 4, (%100)
Injection ile 3 saat uğraştığımı bilirim. Bu konu yeni başlayanlar için çok yararlı olacak. Teşekkürler.
 

 

wordpressyapalim.com

oerdem oerdem Oerdem Kullanıcı
  • Üyelik 11.05.2012
  • Yaş/Cinsiyet 29 / E
  • Meslek Öğrenci, Web Master
  • Konum
  • Ad Soyad ** **
  • Mesajlar 48
  • Beğeniler 4 / 11
  • Ticaret 0, (%0)
Güzel makale çok çok geniş kapsamlı bi konu post kotrolü için captcha güvenliğini anlatman iyi olur :)
 

 

İletişim: OsmanErdem@mail.com.tr (MSN+Facebook+Twitter+mail)

Cafer Cafer Üyeliği Durdurulmuş Banlı Kullanıcı
  • Üyelik 22.02.2012
  • Yaş/Cinsiyet 30 / E
  • Meslek PHP Developper
  • Konum İstanbul Avrupa
  • Ad Soyad ** **
  • Mesajlar 250
  • Beğeniler 65 / 71
  • Ticaret 2, (%100)
PHP'de herkesin bildiği sql injection ver html karakter açıkları zaten mevcut. Bunlarında senin de gösterdiğinden daha farklı korunma yolları var.
Örneğin kesinlikle benim her projemde kulladığım strip_tags benim vazgeçilmezim açıkcası.
Ama mysql_real_escape_string i önermiyorum açıkcası. Büyük projeler, sistemin
hızlı çalışması açısından tek bir sql sütunu bile fazladan çekilmezken. Bu fonksiyonda sorguyu oldukça yavaşlatır. Tabikide bunu uyguladığın bir sisteme 100 200 kişi girerse
bu anlaşılmaz fakat, 100k 200k lık sitelerde acayip belli olur.
Ayrıyetten bu gösterdiğin iki örnek haricinde daha gelişmiş saldırı girişimleri oluyor.
Onlar bunun yanında hiç sayılır :)
 

 

wmaraci
wmaraci
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