PHP’de Ziyaretçiye bir takım yetkiler verirseniz kötü niyetli bir ziyaretçi web sitenizi ele geçirebilir. Düşünün ki iletişim adresinde “Ad-Soyad:” bölümüne herhangi bir ad değil de bir kod girerek web sitenizden bazı bilgileri silebilir veya bazı önemli dosyaları ele geçirebilir. Hack bu şekilde de işleyebilir. Bunun için PHP’de güvenlik için ziyaretçilere HTML etiketleri çalışmayan sadeec text formlar oluşturmalısınız. Ayrıca Ziyaretçi ile iletişim kurarken asla ve asla güvenliğinizden taviz vermeyin.
Güvenlik için bir kaç ipucu;
Web sitenize saldırın
Web sitenize saldırın. İnternetten araştırdığınız kullandığınız web sisteminin açıklarını öğrenerek kendi web adresinizde öğrenin. Bir nevi kendi sisteminizi test edin. Ne kadar dayanıklı. Örnek vermek gerekirse WordPress’in güncellemelerini kontrol etmezseniz siteniz çok kolay bir şekilde hacklenebilir. Nasıl mı güncellemeler bazen sistem içi bazen de yeni bir “Exploit” yani bir sistem açığı bulunduktan sonra yapılır. Güvenlik açığı bulunan güncellemeleri kontrol etmediğiniz anda Hacker’lar bu Exploit dediğimiz açıkları internetten bulup web sitenizi ele geçirebilirler.
Veritabanınıza çocuğunuz gibi bakın
Veritabanınıza çocuğunuz gibi bakın. Öyle her bilgiyi veritabanınıza yazmayın. Bir takım önlemler koyun. İletişim formunu direk @gmail.com veya benzer e-mail servislerine gönderecek şekilde kurun. Eğer sisteminiz ile aynı panele kurulmuş bir iletişim formuna sahipseniz bu veritabanınızın risk altında olduğunu işaret eder.
Uploadlara dikkat etmeniz gerekli
Uploadlara dikkat etmeniz gerekli. Daha doğrusu uploadlarınızın uzantılarına dikkat etmeniz gerekli. Eğer siz örnek veriyorum ali.php dosyasını Browse yani Resim Seç buttonuna tıkladıktan sonra upload ettirebiliyorsanız yandınız demektir. ali.php.jpg şeklinde görünecek ve resim tarayıcıda göründüğü anda php dosyasıda çalıştırılacak. PHP dosyasının içerisinde kodlarla web site hacker’ın eline geçebilir.
SQL İnjection önemli. Nedir bu SQL İnjection?
SQL İnjection önemli. Nedir bu SQL İnjection? SQL İnjection SQL komutlarının .php uzantılı dosyalar içerisinde çalışmamasıdır. Yani diyorum ki hemen yukarıda bahsettiğim ali.php.jpg üzerinden hacker sitemizin veritabanına zarar veremiyor. Çünkü veritabanı komutları php dosyasının içerisinde çalışmıyor. Bugüne dek yapılan saldırılan büyük bir bölümü SQL İnjection saldırılardır. Bu yüzden önemli dedim, dikkat edilmeli.
Cookie’leri ziyaretçiye şifreleyerek gönderin
Cookie’leri ziyaretçiye şifreleyerek gönderin. Cookie’leri şifrelemek için daha önce açtığım konuya tıklayın. Nedenini bir güzel açıklamışım. Link: Cookie’leri şifrelemek
Daha güvenli bir veritabanı için Stored Procedure kullanın
Daha güvenli bir veritabanı için Stored Procedure kullanın. Stored Procedure Veritabanı tarafından çalıştırılan Veritabanınızdaki kayıtlı bilgilerden bağımsız bir nevi sanal veritabanıdır. Bilgisayarlardaki Ram’in bulunma nedenine benzer. Hem performans hem de güvenlik için kullanılmalıdır.
Gelen bilgi rakam mı yoksa yazı mı?
Gelen bilgi rakam mı yoksa yazı mı? Bunu öğrenmeniz için gelen verinin rakam olduğunu kontrol eden bir kontrol yapısına sahip olmalısınız. Bunun için gelen verinin “Göster” butonuna tıklandığında sayfanın içerisine bu kodu geçirmeniz gerekiyor.
<?php
if (is_int($_GET["makalenumarasi"]))
{//Girilen veri sadece rakamdan oluşuyorsa veritabanına gönder kodları burada oluşturlacak}
else
{echo “Hata. Girdiğiniz değer(ler) rakamdan oluşmuyor.”;}
$baglanti=mysql_connect(“localhost”, “root”); mysql_query(“SET NAMES ‘latin5′”); $veritabani= mysql_select_db(“veritabaniadi”,$baglanti); $sql= “insert into tabloadi (tabloalani) values (‘Girilecekdeger’)”; if (mysql_query($sql,$baglanti)) { echo “Yazar Eklendi “; } else {echo “Hata! Kayıt eklenemedi.”;} mysql_close($baglanti); ?>
PHP ile Resmin üzerine yazı yazma
<?php
header(“content-type: image/png”);
$yukseklik=100;
$genislik=300;
$resim=ImageCreate($genislik,$yukseklik);
$zemin=ImageColorAllocate($resim,200,1,0);
// Zemin rengini “1″rakımını yükselterek değiştirebilirsiniz.
$yazirenk=ImageColorAllocate($resim,0,0,1);
ImageFill($resim,0,0,$zemin);
$yazi=”Bilgius.com”;
Imagestring($resim,10,5,5,$yazi,$yazirenk);
Imagepng($resim);
?>
Önizleme:
PHP ile bir alan oluşturup daha sonra karenin tasarımını gerçekleştireceğiz. Bunun için öncelikle grafik oluşturacağımızı sunucumuza belirtelim. Daha sonra yükseklik, genişlik ve son olarak ise rengini belirleyeceğiz.
<?php
header(“content-type: image/jpg”);
$yukseklik=100;
$genislik=100;
$resim=ImageCreate($genislik,$yukseklik);
$zemin=ImageColorAllocate($resim,0,0,1);
// Zemin rengini “1″rakımını yükselterek değiştirebilirsiniz.
Imagefill($resim,0,0,$zemin);
Imagejpeg($resim);
?>
Önizleme:
PHP ile İç içe Kare Grafik oluşturma
<?php
header(“content-type: image/png”);
$yukseklik=100;
$genislik=100;
$resim=ImageCreate($genislik,$yukseklik);
$zemin=ImageColorAllocate($resim,200,255,3);
// Zemin rengini “1″rakımını yükselterek değiştirebilirsiniz.
$altzemin=ImageColorAllocate($resim,100,5,100);
ImageFill($resim,0,0,$zemin);
ImageFilledRectangle($resim,10,10,$genislik-10,$yukseklik-10,$altzemin);
Imagepng($resim);
?>
Önizleme:
Bugün Twitter, Facebook ve buna benzer bir çok web sitesi kendi API’lerini açmış durumdadır. Bunun anlamı bu tür web sitelerin geliştiriciler (developer) tarafından geliştirilmesi anlamına gelir. PHP çıktığı 1995 yılından bu yana ücretsiz ve açık kaynak kodlu (herkes tarafından görüntülenip geliştirilebilir) olması nedenli 1995 yılından beri şimdiye kadar bir çok seviye atlamıştır. Öyle ki PHP ile Grafik bile çizilebilmektedir. PHP İle Grafik derslerine aşağıdan ulaşabilirsiniz.
PHP ile İç içe Kare Grafik oluşturma
PHP ile Resmin üzerine yazı yazma
Veritabanındaki verileri yönetim panelinden dizin şeklinde yansıtmak özellikli makale ve alışveriş siteleri için gereklidir. Örnek vermek gerekirse oluşturduğunuz veritabanı içerisinde makalelerin başlıklarını almak için (Tümünü göster) dersiniz bunun için Veritabanında istediğiniz alanı listelenmesi gerekir. Yine alışveriş sitelerinde tüm ürünleri göster buttununa tıklanıldığında gösterilmesi gereken aynı şeydir. Bunun için tıklanıldığında yapılması gereken aşağıdaki kodu kendi web sitenize göre düzenlemenizdir.
$baglan = mysql_connect(“localhost”,”root”);
//veritabanını açıyoruz
mysql_query(“SET NAMES ‘latin5′”);
//mysql_query Türkçe karakter sorunu olmaması içindir.
$veritabani=mysql_select_db(“veritabaniadi”, $conn);
//veritabanına giriş yapıyoruz
$sql=”select KATEGORİ from BİLGİUS order by PHP asc”;
// BİLGİUS tablosundan KATEGORİ alanından PHP adlı sql sorgusunu atıyoruz. sqlsonuc=mysql_query($sql,$baglan);
// Sorguyu MySQL’e gönderiyoruz. while ($Kategoriadi= mysql_fetch_array($sqlsonuc))
// Sql sonuc değişkenini mysql_fetch_array ile okutup $Kategoriadli değişkenine aktarıyoruz. {echo “\n”;}
mysql_close($conn);
// açtığımız veritabanını kapatmak lazım elbette.
?>
| ” . $yazaradi["Yazar"] . “ |
Birden fazla tablodan veri çekimi – Right Join
Birden fazla veri çekmek için Joinler kullanılır. Aynı sayfa içerisinde birden fazla tablo çekmek için çeşitli joinler kullanırız. Bunlar İnner Join, Left Join ve son olarak Right Join olmak üzere üç çeşittir.
Left Join de birinci tablodaki verilerin tümü çekilir ve ilk tablo ile ikinci tablo arasındaki eşleşen veriler bize döndürülür demiştik. Right Join de ise ikinci tablodaki verilerin tümü çekilir ve ilk tablo ile ikinci tablo arasındaki eşleşen veriler bize döndürülür.
Birden fazla tablodan veri çekimi – Left Join
Birden fazla veri çekmek için Joinler kullanılır. Aynı sayfa içerisinde birden fazla tablo çekmek için çeşitli joinler kullanırız. Bunlar İnner Join, Left Join ve son oalrak Right Join olmak üzere üç çeşittir.
Yazdığımız tablo içerisindeki tüm veriler alınır. Bu verilerin ardından ikinci tablo ile birinci tablo arasındaki eşleşen veriler sorgulanır.