18 Mayıs 2014 Pazar

Proje Esnasında Karşılaştığımız Zorluklar ve Çözümlerimiz

TÜRKÇE KARAKTER KODU SORUNU
Hemen Her Yazılımcı Bu Sorunla Karşılaşır Hemde Bir Çok Defa Ne Kadar Çözümlese Bile ;)
 Bu Sorunum Veritabanından  Biçimsizce gelen(Soruişareti ,Çeşitli Şekiller vs.)  Bazi karakterleri Düzeltmemizi gerektirdir yaklaşık 4.5 yıldır PHP ile Çalışıtorum ve halen  yabancı kaldığım bircok kod var olduğunu  keşfettim bunlardan biride iconv adlı bir fonksiyon Bu Fonsiyon  Sayesinde Karakter Kodlarını Dilediginizce Oynamalar yapa bilirsiniz  UTF-8 den ISO... Formatına veya Windows-1254 Formatına Dönüşüm Sağlaya bilirsiniz Basit Bir Örnek
ÇÖZÜM:
Fonksiyonun Kullanım Şekli:
 <?php echo  iconv("ISO-8859-9", "UTF-8",$metin_veya_degisken); ?>
WYSIWYG HTML EDİTÖR ENTEGRASYONU
 önce bir HTML metin Editörü Araştırdık Ve Bu redactor.js Keşfettik Sade ve Kullanışlı bir Yazılım olması birde Basit Bir Şekilde Entegre Olanagi İşimizi Kolaylaştırdı Fakat Bir Şeyi Atladık Php Mysql Sorguları Bu Editor Sayesinde Html Formatında sorgu olarak Çalışıtordu ve Bilinir ki Html bol tırnak işareti içeren bir Dildir
 Örnegin:
<a href='http://site.com'>Örnek..</a>
Burdaki Kırmızı İşarelti Tırnaklar Arka plandaki Sorgularımızı Surekli Bölüyordu 
Şöyleki:
<?php
// Yukarıdaki örnek   Html Kodumuz Bir Değişkene Atalım 
$metin="<a href='http://site.com'>Örnek..</a>";
//bir MySQL Sorgusu çaliştıralım( MySql e Bağlandığımizi Varsayarak)
mysql_query('INSERT INTO tablo values("$metin")');
?>
Yukardaki Kod parcası Çalıştıgında PHPMyAdmin'de Şöyle bir hata Dönüşü olacaktır
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'http://site.com'&gt;Örnek..&lt;/a&gt;', 'sdasd', 'adasd')' at line 1

Gibi Bir Hata ile Karşılaşırız
ÇÖZÜM:

Bu Sorunu Çozmek için İse
mysql_real_escape_string() Fonksiyonu keşfetim bu fonksiyon sayesinde Tırnak işaretlerinin önüne slash (/)  karakterı atıyor ve sorgu bütünlüğünü koruyor
 Örneğin:

<?php
$metin="<a href='http://site.com'>Örnek..</a>";
iconv("UTF-8", "ISO-8859-9//TRANSLIT",mysql_real_escape_string("$metin"));
?>
Şeklinde Kullanıyoruz.

SON OLARAK SQL ACIKLARI(SQL INJECTİON)
yazılımcı her nekadar kodbilgisine güvensede böcekler sürekli Bu açıklar peşindedir GoogleBotlarbile İstemedende Olsa Açıklara sızıp Zararlar Verebiliyor

Bu tür Açıkların Genel  Sebebi $_GET Değişkeninden Kaynaklanıyor Mesela

site.com?sayda_id=1
dendiğinde burda Arka planda
$_GET['sayfa_id'] dizesine Bir Değer Gönderiliyor Bizde Bu değeri Php Kodlarımızda Okuttuğumuzdan Büyük Bir Açık veriyoruz
Orneğin :

<?php
 $id=$_GET[sayfa_id];  //Değer  1 olsun
mysql_query("Select *from tablo where id='$id');  //Yani Select *from tablo where id='1'
?>
Birde Zararli Bir Vatandaş Veya Bot Yazılım tarafından Kullanıldıgında
site.com?sayda_id=/1/' AND Delete from  tablo
(site.com/?sayda_id=%271/%27%20AND%20Delete%20from%20tablo)
diye çalıştırdıgında  kodumuz  bu şekli alacaktır

<?php
 $id=$_GET[sayfa_id];  //Değer  /1/' AND Delete from  tablo
mysql_query("Select *from tablo where id='$id');
  //Yani Select *from tablo where id='/1/' AND Delete from  tablo'
?>
Şeklinde Değişiklik olacaktır
Buda Bu tablomuz için Sorunlara Neden Olacaktır

ÇÖZÜM

Çözüm Çok Basıttir Eger Gelen Değişken Bir tamsayı ise örenk deki gibi Tamsayı kısmını okuturuz Bunu intval() Fonksiyonuyla Yapabiliriz
Örnegin
1ada23s değerli bir değişkenimiz olsun bu fonsiyona sokalım
intval("1ayda23n")
Çıktı:
123
şeklinde olur
Busayede Gereksiz  Karakterler Ayıklanır ve Sağlıklı sorgu gercekleştırılır.




PROJEMİZİN SONHALİNE ULAŞABİLİRSİNİZ
http://kanserlemucadele.tk/ 












Hiç yorum yok:

Yorum Gönder