Php'de Güvenlik Önlemleri
|
#3944 |
|
|
Kaan
User is:
Posts: 2772
Meslek: Serbest Meslek
Age: 43
|
Php&de G?venlik
SQL injection: SQL injection denen method ile veritaban?n?za yetkisiz i?lem yapt?r?labilir.Bunlar? engellemek i?in kullan?l?r. Htmlspecialchars: Bu komut html deki ?zel karakterleri html i?in normal karakterlere d?n??t?r?r. Htmlspecialchars_decode: ?zel html imlerini karaktere d?n??t?r?r.Bir nevi htmlspecialchars in tam tersi g?revinde i?lev g?r?r. htmlentities : Girdilerde oldu?u gibi d??ar?ya sunulan t?m verilerin de filtrelenmesi gerekmektedir. strip_tags() : Formlardan gelen html kodlar?n? temizlemek i?in stript_tags() fonksiyonunu kullan?l?r. Mysql_escape_string : mysql_escape_string & mysql de kullanmak i?in stringleri uygun bi?ime d?n??t?r?r. SQL injection: Php ile u?ra??yorsan?z ??renmeniz gereken konular?n ba??nda gelir. Bu fonksiyon mysql & e daha g?venli bilgiler yerle?tirmek i?in kullan?l?r. SQL injection denen method ile veritaban?n?za yetkisiz i?lem yapt?r?labilir. Bu yetkisiz i?lemler ile veritaban?n?zdaki bir tablo tamamen bo?alt?labilir, veriler silinebilir veya veri eklenebilir, daha da k?t?s? yazd???n?z script bir y?netim paneline sahipse buraya izinsiz giri?ler olabilir. Basit bir SQL sorgumuz olsun, url ile gelen id ye sahip makaleyi veritaban?ndan se?elim. Kod: $query = mysql_query("SELECT * FROM makaleler WHERE id=$_GET['id']", $baglanti); Bu ?ekilde g?vende de?iliz. Bu kodlar? nas?l g?venli hale getiririz. Kod: $id = $_GET['id']; $id = get_magic_quotes_gpc() ? stripslashes($id) : $id; $id= function_exists("mysql_real_escape_string") ? mysql_real_escape_string($id) : mysql_escape_string($id); $query = mysql_query(sprintf("SELECT * FROM makaleler WHERE id='%s'", $id), $baglanti); Kodlar?m?z? d?zg?n ve g?venli hale getirdik. Sorgumuzu bu hale getirerek kimsenin SQL&imize dokunmamas?n? sa?lam?? oluyoruz. K?sacas?, URL veya POST ile gelen b?t?n verileri bir filtreden ge?irerek, bu gelen verinin i?inde bulunabilecek & i?aretlerini \& haline getiriyoruz. B?ylece bu gelen verilerdeki zararl? i?aretler, sorgumuzun i?ine kar??m?yor ve SQL injection ile sitemize zarar vermek isteyen ki?iler avu?lar?n? yal?yorlar. htmlspecialchars ve htmlspecialchars_decode : Bu kodlar?n g?revlerini k?saca anlatay?m sonra ?rneklere ge?elim. Htmlspecialchars: Bu komut html deki ?zel karakterleri html i?in normal karakterlere d?n??t?r?r. Parametreler : ENT-QUOTES >> bu parametre ayarland???nda ?ift t?rnak ve tek t?rnaklar d?n??t?r?l?r. ENT-NOQUOTES >> bu parametre ayarland???nda ?ift t?rnak ve tek t?rnaklar d?n??t?r?lmesi ihmal edilir. ENT-COMPAT >> bu ?n tan?ml? parametre ise sadece ?ift t?rnak d?n???m?n? yapar tek t?rnaklar d?n??t?r?lmez. Kod: ?rnek : $deneme = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES); echo $deneme; // <a href='test'>Test</a> (sag t?k kaynag?) g?r?nt?le yap?n?z. Htmlspecialchars_decode: ?zel html imlerini karaktere d?n??t?r?r.Bir nevi htmlspecialchars in tam tersi g?revinde i?lev g?r?r. Parametreler: htmlspecialchars fonksiyonunun paremetreleriyle tamamen ayn?d?r. Kod: ?rnek : $str = '<p>this -> "</p>'; echo htmlspecialchars_decode($str); //?ift t?rnak d?n??t?r?lmez burda echo htmlspecialchars_decode($str, ENT_NOQUOTES); Bu sayede arkada?lar ?nemi sald?r?lardan ar?nm?? oluruz. htmlentities : Girdilerde oldu?u gibi d??ar?ya sunulan t?m verilerin de (g?venli olarak filtreleyip veritaban?na i?ledi?iniz verilerin dahi) filtrelenmesi gerekmektedir.Filtrelenmesi gereken en ?nemli ?ey probleme yol a?abilecek olan HTML tag lar?d?r. Bunu yapman?n en kolay yolu b?t?n HTML&i escape i?lemine sokan htmlentities() fonksiyon&udur. Kod: ?rnek: <?php echo htmlentities($_GET['kelime']); ?> htmlentities ile muhtemel XSS (cross site scripting) sald?r?lar?n? kald?r?rs?n?z E?er t?m html taglar?n? silmek istemiyorsan?z strip_tags() kullanarak baz? html taglar?na izin verebilirsiniz. strip_tags() : Genellikle formdan gelen bilgilerdeki html kodlar?n? temizlemek i?in stript_tags() fonksiyonunu kullan?r?z.?rnek vermek gerekirse bir ziyaret?i formunda,?yelik kay?t formunda,tart??ma forumunda vb. gibi yerlerde kullan?labilir. Kullan?m ?ekli: Kod: strip_tags($de?i?ken) ?rnek: <?php $mesaj = "<a href=\"index.php\"><b>Ana Sayfam?z</b></a><br><br>"; // strip_tags kullanmadan bakal?m echo $mesaj; // ?imdi strip_tags kullanal?m echo strip_tags($mesaj); ?> ?stedigimiz taglar?n ?al??mas?na izin vermek istiyorsak yapmam?z gereken; Kod: <?php $mesaj = "<a href=\"index.php\"><b>Ana Sayfam?z</b></a><br><br>"; echo strip_tags($mesaj, "<a><b>"); ?> Burada a ve b taglar?n?n ?al??mas?na izin verdik isteseydik a ya izin vermeyip link ?zelligini yitirmesini saglard?k. mysql_real_escape_string ve mysql_ escape_string : Mysql_escape_string : mysql_escape_string & mysql de kullanmak i?in stringleri uygun bi?ime d?n??t?r?r. Kullanim string mysql_escape_string (string d?n??t?r?lecek _string) Bu fonksiyon mysql & e daha g?venli bilgiler yerle?tirmek i?in kullan?l?r. Bu fonksiyonun kullan?m? mysql_real_escape_string() ile ayn?d?r bir tek farkla. mysql_real_escape_string() fonksiyonu belirtilen karakter setini d?n???m yaparken dikkate al?r. Kod: <? $ifade = "Ahmet'in Bilgisayar?"; $escaped_ifade = mysql_escape_string($ifade); printf("D?n??t?r?lm?? string: %s\n", $escaped_ifade); ?> ?rne?in ??kt?s?: D?n??t?r?lm?? string:Ahmet\&in Bilgisayar? Mysql_real_escape_string : Kod: <? /*MySQL'e g?nderilen SQL c?mlesindeki ?zel karakterlerden mevcut ba?lant? dilini kullanarak ka?ar.*/ $query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", mysql_real_escape_string($user), mysql_real_escape_string($password)); ?> Php Cache: Neden bu ?nlemi almal?y?z diye bir soru soral?m ve cevab?n? verelim: Sitemize 4&5 ki?i geldi?inde mysql tavan yapabilir. Database e ba?lanamama sorunu oldu?unda. Mysql overload oldu?unda.Ve daha fazla bir?ok sorun y?z?nden olabilir tabi? ki. Biz hemen sorunu nas?l hallede biliriz ona ge?elim. Yapaca??m?z betik(i?lem) 2 k?s?mdan olu?acak birisi sayfam?z?n en ?st k?sm?nda di?eri ise sayfam?z?n en alt k?sm?nda olmas? gerekiyor. A?a??daki k?sm? sayfan?n en ?st?ne yaz?lacak k?sm?. Kod: <? $filename = "%%-".md5($_SERVER['REQUEST_URI'])."-%%.html"; $cachefile = "cache/".$filename; $cachetime = 3 * 60 * 60; // Cache S?resi if (file_exists($cachefile)) { if(time() - $cachetime < filemtime($cachefile)) { readfile($cachefile); exit; } else { unlink($cachefile); } } ob_start(); ?> A?a??daki k?sm? isi sayfan?n en alt?na yaz?lacak k?sm? Kod: <? $fp = fopen($cachefile, 'w+'); fwrite($fp, ob_get_contents()); fclose($fp); ob_end_flush(); ?> Temel olarak yapm?? oldu?umuz i?lemleri anlatal?m. Herhangi bir ziyaret?i sayfam?za geldi?i zaman url al?n?yor ve md5 lenip $cachefile de?i?keninin i?ine aktar?l?yor. Daha sonra alt k?sma ekledi?imiz kodlar devreye giriyor ve yapm?? oldu?u i?lem $cachefile dosyas?n? yaz?labilir bi ?ekilde a??yor ve yeni bi ziyaretci daha sayfam?za geliyor. Ve ?st tarafta yazd???m?z kodlar tekrar devreye giriyor. Sitemize gelen 1.ki?i ile 2. ki?i aras?nda saat fark? g?z ?n?nce bulunduruluyor ve i?leme tabir tutuluyor Burada yapm?? oldu?umuz kazanc? s?yleyelim sitemize gelen 2. ziyaret?i mysql sorgular?-php sorgular? yerine daha ?nceden anlatm?? olup kaydetmi? oldu?umuz html dosyas?n? g?sterdik ve kaynaktan tasarruf ettik. Mysql rahatlam?? oluyor. cache s?resini $cachetime de?i?erek kendinize g?re ayarlayabilirsiniz Bu mesaj Kaan tarafından 2010-10-31 13:59 GMT, 5689 Gün önce düzenlendi. |
Emlak, Oto Galeri, Rent A Car, ?iir, Edebiyat Script Sipari?lerinizi Verebilirsiniz. Detaylar ??in: kaan@ntka.org Seditio 170 ?ndir Capte M?zik ?ndir Seditio Toolbar ?ndir |













