{"id":8935,"date":"2016-11-21T09:19:08","date_gmt":"2016-11-21T07:19:08","guid":{"rendered":"https:\/\/ihs.com.tr\/blog\/?p=8935"},"modified":"2016-11-21T09:19:08","modified_gmt":"2016-11-21T07:19:08","slug":"php-gelistiricilerinin-yapmamasi-gereken-6-hata","status":"publish","type":"post","link":"https:\/\/www.ihs.com.tr\/blog\/php-gelistiricilerinin-yapmamasi-gereken-6-hata\/","title":{"rendered":"PHP Geli\u015ftiricilerinin Yapmamas\u0131 Gereken 6 Hata"},"content":{"rendered":"<p><span style=\"font-size: 14pt;\">PHP internette en \u00e7ok kullan\u0131lan dillerden biridir. Bu nedenle geli\u015ftirici olarak bu dili bilmeniz size b\u00fcy\u00fck avantajlar sa\u011flar. PHP baz\u0131 bak\u0131mlardan C\u2019ye ve Java\u2019ya benzer, bu y\u00fczden bu iki dili biliyorsan\u0131z PHP\u2019de kolayca kendinizi geli\u015ftirebilirsiniz. Ancak, yeni bir dil \u00f6\u011frenirken muhtemelen baz\u0131 hatalar yapacaks\u0131n\u0131z. A\u015fa\u011f\u0131da PHP geli\u015ftiricilerinin s\u0131k yapt\u0131\u011f\u0131 hatalar ve bu hatalar\u0131 \u00f6nlemek i\u00e7in yap\u0131lmas\u0131 gerekenler yer almakta.<\/span><\/p>\n<ol>\n<li><strong><span style=\"font-size: 14pt;\">SQL Kodunu Sa\u011flama Almamak<\/span><\/strong><\/li>\n<\/ol>\n<p><span style=\"font-size: 14pt;\">\u0130nternette en s\u0131k yap\u0131lan siber sald\u0131r\u0131lardan biri SQL enjeksiyonlar\u0131d\u0131r. SQL enjeksiyonu sald\u0131r\u0131lar\u0131nda hackerlar veritaban\u0131n\u0131za sizin yetki vermedi\u011finiz bir SQL kodu yerle\u015ftirir, bu kodun \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131 komutlarla verilerinizi s\u0131zd\u0131r\u0131r, de\u011fi\u015ftirir veya silerler. Fakat bu sald\u0131r\u0131 riski daha iyi PHP programc\u0131l\u0131\u011f\u0131yla en aza indirilebilir.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">PHP <a href=\"https:\/\/www.ihs.com.tr\/web-hosting\/wordpress-hosting.html\" target=\"_blank\">WordPress<\/a> gibi \u00e7\u00f6z\u00fcmlerin omurgas\u0131n\u0131 olu\u015fturur. WordPress siteler i\u00e7in yeni uzant\u0131lar ve eklentiler yazan geli\u015ftiriciler \u00e7o\u011fu zaman sat\u0131r i\u00e7i SQL ifadeleri olu\u015ftururlar. Bu ifadeler arka u\u00e7ta olu\u015fturulup SQL veritaban\u0131na geri g\u00f6nderilir. Bu ifadeler yanl\u0131\u015f olu\u015fturulursa siteniz SQL enjeksiyonlar\u0131na a\u00e7\u0131k hale gelebilir.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Bunu engellemenin iki yolu vard\u0131r. Birinci (ve en \u00e7ok tercih edilen) yol haz\u0131r ifadeler kullanmakt\u0131r. \u0130kinci yol ise parametrele\u015ftirilmi\u015f sorgular kullanmakt\u0131r.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">A\u015fa\u011f\u0131daki ifade kullan\u0131c\u0131 girdisi \u00fczerine in\u015fa edilmi\u015ftir:<\/span><\/p>\n<p><em><span style=\"font-size: 14pt;\">$stmt = (&#8220;SELECT * FROM users WHERE firstname = &#8216;&#8221;.$firstname.&#8221;&#8216;;&#8221;);<\/span><\/em><\/p>\n<p><span style=\"font-size: 14pt;\">Bu ifade sitenizi k\u0131r\u0131lgan bir hale getirir \u00e7\u00fcnk\u00fc SQL enjeksiyonuna a\u00e7\u0131kt\u0131r. Burada a\u015fa\u011f\u0131daki gibi parametrele\u015ftirilmi\u015f ve haz\u0131r ifadeler kullanmak daha g\u00fcvenli olur:<\/span><\/p>\n<p><em><span style=\"font-size: 14pt;\">$stmt = $dbConnection-&gt;prepare(&#8216;SELECT * FROM users WHERE firstname = ?&#8217;);<\/span><\/em><\/p>\n<p><em><span style=\"font-size: 14pt;\">$stmt-&gt;bind_param(&#8216;s&#8217;,<\/span><\/em><\/p>\n<p><em><span style=\"font-size: 14pt;\">$firstname); $stmt-&gt;execute();<\/span><\/em><\/p>\n<p><span style=\"font-size: 14pt;\">Bunlar daha iyi y\u00f6ntemlerdir \u00e7\u00fcnk\u00fc SQL\u2019de bir dize de\u011ferini a\u00e7\u0131p kapayan tick i\u015fareti bir a\u00e7\u0131l\u0131\u015f veya iptal karakteri de\u011fil, ger\u00e7ek bir karakter olarak alg\u0131lan\u0131r.<\/span><\/p>\n<ol start=\"2\">\n<li><strong><span style=\"font-size: 14pt;\">Hatalar\u0131 Saklamak<\/span><\/strong><\/li>\n<\/ol>\n<p><span style=\"font-size: 14pt;\">PHP\u2019de farkl\u0131 hata seviyeleri vard\u0131r ama bu hatalar\u0131 kendiniz elle kodunuzun i\u00e7ine saklayabilirsiniz. E\u011fer bunlar kritik olmayan ve ciddi bir olumsuz etki yaratmayan hatalarsa bunu yapmak faydal\u0131d\u0131r. \u00d6rne\u011fin, PHP versiyonlar\u0131 hakk\u0131ndaki uyar\u0131 mesajlar\u0131n\u0131 saklayabilirsiniz.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">\u201c@\u201d i\u015fareti hatalar\u0131 saklamak i\u00e7in kullan\u0131l\u0131r. Fakat bu \u00f6zelli\u011fi dikkatli kullan\u0131n \u00e7\u00fcnk\u00fc bazen bu \u00f6ng\u00f6r\u00fclemeyecek sorunlara neden olabilir. Diyelim ki bir uygulamay\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in gerekli olmayan bir include kodunuz var; bu kod taray\u0131c\u0131lar\u0131nda yaln\u0131zca belirli bir bile\u015fen olan kullan\u0131c\u0131lar i\u00e7in opsiyonel olabilir. Bu durumda PHP dosyan\u0131zda a\u015fa\u011f\u0131daki kodu kullanabilirsiniz:<\/span><\/p>\n<p><em><span style=\"font-size: 14pt;\">(@include(&#8220;animation.php&#8221;))<\/span><\/em><\/p>\n<p><span style=\"font-size: 14pt;\">Yukar\u0131daki kodda animation.php dosyas\u0131nda hatalar olsa bile, bu hatalar g\u00f6sterilmeyecek veya sistem g\u00fcnl\u00fc\u011f\u00fcne girmeyecektir. Bu hata saklama y\u00f6ntemi tutumlu ve temkinli bir \u015fekilde kullan\u0131lmal\u0131d\u0131r \u00e7\u00fcnk\u00fc sistem g\u00fcnl\u00fc\u011f\u00fcne girmeyen ve uygulamada kritik bir \u015fey ya\u015fanana kadar bulunamayacak baz\u0131 hatalar olabilir. Uzun vadede hatalar\u0131 saklamak yerine ele al\u0131p d\u00fczeltmeye \u00e7al\u0131\u015fmak daha iyidir.<\/span><\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-8936 size-medium\" src=\"https:\/\/www.ihs.com.tr\/blog\/wp-content\/uploads\/2016\/11\/php-geli\u015ftirici-hatalar\u0131-300x128.png\" alt=\"php geli\u015ftirici hatalar\u0131\" width=\"300\" height=\"128\" srcset=\"https:\/\/www.ihs.com.tr\/blog\/wp-content\/uploads\/2016\/11\/php-geli\u015ftirici-hatalar\u0131-300x128.png 300w, https:\/\/www.ihs.com.tr\/blog\/wp-content\/uploads\/2016\/11\/php-geli\u015ftirici-hatalar\u0131.png 940w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<ol start=\"3\">\n<li><strong><span style=\"font-size: 14pt;\">Veriyi Do\u011frudan Kullan\u0131c\u0131 Girdisinden Yazd\u0131rmak<\/span><\/strong><\/li>\n<\/ol>\n<p><span style=\"font-size: 14pt;\">Bu hata biraz da yukar\u0131daki bir numaral\u0131 hatayla ba\u011flant\u0131l\u0131d\u0131r. \u0130lk hata (SQL kodunu sa\u011flama almamak) SQL enjeksiyonu g\u00fcvenlik a\u00e7\u0131klar\u0131na yol a\u00e7abilir. Bu hata geli\u015ftiricinin veriyi do\u011frudan bir kullan\u0131c\u0131dan yazd\u0131rd\u0131\u011f\u0131 durumlarda ortaya \u00e7\u0131kan \u00e7apraz site betik \u00e7al\u0131\u015ft\u0131rma (XSS) g\u00fcvenlik a\u00e7\u0131klar\u0131yla ba\u011flant\u0131l\u0131d\u0131r.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Diyelim ki \u201cisim\u201d ad\u0131nda bir form girdisi metin kutunuz var. Beti\u011finizin kullan\u0131c\u0131ya \u201cMerhaba, $isim\u201d yazmas\u0131n\u0131 istiyorsunuz. Bunu a\u015fa\u011f\u0131daki kodu kullanarak yapabilirsiniz:<\/span><\/p>\n<p><em><span style=\"font-size: 14pt;\">Merhaba &lt;?php echo $_POST[&#8220;isim&#8221;]; ?&gt;<\/span><\/em><\/p>\n<p><span style=\"font-size: 14pt;\">Peki, e\u011fer kullan\u0131c\u0131 <em>\u201c&lt;script&gt;alert(merhaba);&lt;\/script&gt;\u201c<\/em> girerse ne olur? Bu kimsenin pek umursamayaca\u011f\u0131 ufak ve \u00f6nemsiz bir p\u00fcr\u00fcz gibi g\u00f6r\u00fcnebilir ama sorun \u015fu ki bu durumda JavaScript\u2019in taray\u0131c\u0131da rastgele \u00e7al\u0131\u015fmas\u0131na izin vermi\u015f olursunuz. JavaScript taray\u0131c\u0131da kullan\u0131c\u0131 girdisinden \u00e7al\u0131\u015ft\u0131\u011f\u0131nda, sald\u0131rgan XSS kullanarak parolalar\u0131 ve oturumlar\u0131 \u00e7almak gibi bir\u00e7ok olay ger\u00e7ekle\u015ftirebilir. Hackerlar betikler konusunda bazen \u00e7ok yarat\u0131c\u0131 olabiliyor ve oturum gasp\u0131, phishing ve gizli yeniden y\u00f6nlendirmeler gibi \u00e7ok say\u0131da sald\u0131r\u0131 d\u00fczenleyebiliyorlar.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Kullan\u0131c\u0131 girdisini yazd\u0131rmak yerine mutlaka \u00e7\u0131kt\u0131daki t\u00fcm HTML etiketlerini, \u00f6zellikle de betik etiketlerini silin. Bu k\u00f6t\u00fc ama\u00e7l\u0131 JavaScript kodunun kullan\u0131c\u0131n\u0131z\u0131n bilgisayar\u0131nda \u00e7al\u0131\u015fmas\u0131n\u0131 \u00f6nler. Bu tip sald\u0131r\u0131lara XXS sald\u0131r\u0131s\u0131 ad\u0131 verilir ve sald\u0131rgan\u0131n t\u00fcm uygulamay\u0131 riske atabilecek bir JS kodu \u00e7al\u0131\u015ft\u0131rmas\u0131n\u0131 sa\u011flar.<\/span><\/p>\n<ol start=\"4\">\n<li><strong><span style=\"font-size: 14pt;\">Geli\u015ftirme Konfig\u00fcrasyonlar\u0131n\u0131 Kald\u0131rmay\u0131 Unutmay\u0131n<\/span><\/strong><\/li>\n<\/ol>\n<p><span style=\"font-size: 14pt;\">Geli\u015ftiricilerin bir geli\u015ftirme ortam\u0131n\u0131n, yani canl\u0131 koda ev sahipli\u011fi yapan ve \u00fcretim ortam\u0131n\u0131 taklit eden bir staging ortam\u0131n\u0131n olmas\u0131 gerekir. Geli\u015ftirici kimi zaman yapt\u0131\u011f\u0131 i\u015fte zamana s\u0131k\u0131\u015fabilir ve geli\u015ftirme de\u011fi\u015fkenlerini ve konfig\u00fcrasyonlar\u0131n\u0131 kald\u0131rmay\u0131 unutabilir, sonra da bunlar\u0131 yanl\u0131\u015fl\u0131kla \u00fcretim ortam\u0131na y\u00fckleyebilir. Bu da canl\u0131 bir uygulama i\u00e7in bir felaket olabilir.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Bir\u00e7ok yeni geli\u015ftirici staging ortam\u0131n\u0131 atlay\u0131p geli\u015ftirme a\u015famas\u0131ndan do\u011fruca \u00fcretim a\u015famas\u0131na ge\u00e7erek zamandan kazanmak ister. Bu bir hatad\u0131r \u00e7\u00fcnk\u00fc staging geli\u015ftirme a\u015famas\u0131nda fark etmemi\u015f olabilece\u011finiz hatalar\u0131 tespit etmenizi sa\u011flayabilir (unutmay\u0131n, staging \u00fcretimi taklit eder). E\u011fer yanl\u0131\u015fl\u0131kla konfig\u00fcrasyonlar\u0131 kald\u0131rmay\u0131 unutsan\u0131z veya staging a\u015famas\u0131na kadar hata bulamasan\u0131z da, bunlar\u0131 \u00fcretim ortam\u0131na varmadan yakalayabilmeniz m\u00fcmk\u00fcnd\u00fcr.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Mutlaka bir staging ortam\u0131n\u0131z olsun ve bunu yaln\u0131zca k\u00fc\u00e7\u00fck de\u011fi\u015fiklikler yap\u0131yor olsan\u0131z dahi kullan\u0131n. QA testerlar\u0131n\u0131n kodu \u00fcretim a\u015famas\u0131na ge\u00e7meden, staging ortam\u0131nda test etmesinde de fayda vard\u0131r.<\/span><\/p>\n<ol start=\"5\">\n<li><strong><span style=\"font-size: 14pt;\">Bir Ko\u015ful Kar\u015f\u0131la\u015ft\u0131rmas\u0131 Yerine Yanl\u0131\u015fl\u0131kla Atama Operat\u00f6r\u00fcn\u00fc Kullanmak<\/span><\/strong><\/li>\n<\/ol>\n<p><span style=\"font-size: 14pt;\">Durum ifadelerini yazarken yanl\u0131\u015fl\u0131kla yanl\u0131\u015f operat\u00f6r\u00fc kullanmak s\u0131k rastlanan bir durumdur. Sonu\u00e7ta geli\u015ftiricilerin de\u011fi\u015fkenlere de\u011fer atama i\u015flemi i\u00e7in saatlerce ekran ba\u015f\u0131nda oturdu\u011fu olur. Ancak, ko\u015fullu kar\u015f\u0131la\u015ft\u0131rma yerine yanl\u0131\u015fl\u0131kla atama operat\u00f6r\u00fcn\u00fc kullan\u0131rsan\u0131z, hatal\u0131 kod yerle\u015ftirme riskini artt\u0131r\u0131rs\u0131n\u0131z.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">\u00d6rne\u011fin \u015fu kodu ele alal\u0131m:<\/span><\/p>\n<p><em><span style=\"font-size: 14pt;\">if ($condition = &#8216;value&#8217;)<\/span><\/em><br \/>\n<em> <span style=\"font-size: 14pt;\"> \/\/do something<\/span><\/em><\/p>\n<p><span style=\"font-size: 14pt;\">Yukar\u0131daki kodda geli\u015ftirici yanl\u0131\u015fl\u0131kla ($condition) de\u011fi\u015fkenine \u201cvalue\u201d de\u011ferini at\u0131yor. Bu durumda ko\u015fulun \u015f\u00f6yle olmas\u0131 gerekir:<\/span><\/p>\n<p><em><span style=\"font-size: 14pt;\">if ($condition == &#8216;value&#8217;)<\/span><\/em><br \/>\n<em> <span style=\"font-size: 14pt;\"> \/\/do something<\/span><\/em><\/p>\n<p><span style=\"font-size: 14pt;\">Bu tip hatalar\u0131 yapmamak i\u00e7in baz\u0131 geli\u015ftiriciler \u201cyoda sentaks\u0131n\u0131\u201d kullanmay\u0131 tercih eder. Yoda sentaks\u0131 ko\u015fulun ve de\u011ferin s\u0131ras\u0131n\u0131 de\u011fi\u015ftirir. Yoda sentaks\u0131nda yukar\u0131daki kod \u015fu \u015fekilde olacakt\u0131r:<\/span><\/p>\n<p><em><span style=\"font-size: 14pt;\">if (&#8216;value&#8217; == $condition)<\/span><\/em><br \/>\n<em> <span style=\"font-size: 14pt;\"> \/\/do something<\/span><\/em><\/p>\n<p><span style=\"font-size: 14pt;\">Bu durumda, e\u011fer yanl\u0131\u015fl\u0131kla kar\u015f\u0131la\u015ft\u0131rma yerine atama operat\u00f6r\u00fcn\u00fc kullan\u0131rsan\u0131z, derleyici size hata verir ve siz de bu hatay\u0131 d\u00fczeltebilirsiniz.<\/span><\/p>\n<ol start=\"6\">\n<li><strong><span style=\"font-size: 14pt;\">Yedekleme Yapmay\u0131 Unutmak<\/span><\/strong><\/li>\n<\/ol>\n<p><span style=\"font-size: 14pt;\">Bu basit bir a\u015fama olarak g\u00f6r\u00fclebilir ama bir\u00e7ok geli\u015ftirici yedekleme yapma konusunda ihmalkard\u0131r. Her saat ba\u015f\u0131 yedekleme yapman\u0131za gerek yoktur ama e\u011fer bir projede \u00f6nemli i\u015fler yapt\u0131ysan\u0131z her g\u00fcn\u00fcn sonunda yedekleme alman\u0131z gerekir. Yedekleme yapman\u0131n sizi olas\u0131 aksakl\u0131klar sonucunda veri kaybetti\u011finiz durumlarda saatlerce yeniden kod yazma zahmetinden kurtaraca\u011f\u0131n\u0131 unutmay\u0131n.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">E\u011fer kodunuzdaki sorunu tespit etmekte zorlan\u0131yorsan\u0131z, sistemi yedekleyin ki \u00e7\u00f6z\u00fcm\u00fc kaybetmeyesiniz ve saatlerce u\u011fra\u015ft\u0131\u011f\u0131n\u0131z bir kodu sil ba\u015ftan yazmak zorunda kalmayas\u0131n\u0131z.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Ayr\u0131ca m\u00fc\u015fterinizin kritik bir sorun ya\u015famas\u0131 ve bir yede\u011finin olmad\u0131\u011f\u0131 nadir durumlar i\u00e7in de m\u00fc\u015fterileriniz i\u00e7in yedekleme yapmal\u0131s\u0131n\u0131z. Bu hem g\u00fczel bir jesttir hem de m\u00fc\u015fterinizi olas\u0131 bir zor durumdan kurtaracakt\u0131r.<\/span><\/p>\n<p><strong><span style=\"font-size: 14pt;\">Sonu\u00e7<\/span><\/strong><\/p>\n<p><span style=\"font-size: 14pt;\">Geli\u015ftiricilerin \u00e7o\u011fu PHP \u00f6\u011frenirken bu hatalar\u0131 s\u0131k s\u0131k yapar. Bu yeni bir dil \u00f6\u011frenme s\u00fcrecinin bir par\u00e7as\u0131d\u0131r. Her \u015feyde oldu\u011fu gibi, ne kadar \u00e7ok pratik yap\u0131l\u0131rsa m\u00fckemmele o kadar yakla\u015f\u0131l\u0131r. Bir hata yapt\u0131\u011f\u0131n\u0131zda o hatadan ders almal\u0131 ve ayn\u0131 hatay\u0131 gelecekteki uygulamalar\u0131n\u0131zda tekrar etmemek i\u00e7in gerekli \u00f6nlemleri almal\u0131s\u0131n\u0131z. Bu hatalar\u0131n baz\u0131lar\u0131 \u00f6nemli baz\u0131lar\u0131 \u00f6nemsiz olacakt\u0131r ama bu liste en s\u0131k yap\u0131lan hatalar\u0131n baz\u0131lar\u0131n\u0131 yapmaman\u0131z\u0131 mutlaka sa\u011flayacakt\u0131r.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>PHP internette en \u00e7ok kullan\u0131lan dillerden biridir. Bu nedenle geli\u015ftirici olarak bu dili bilmeniz size b\u00fcy\u00fck avantajlar sa\u011flar. PHP baz\u0131 bak\u0131mlardan C\u2019ye&hellip;<\/p>\n","protected":false},"author":3,"featured_media":8949,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-8935","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-haberler"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/posts\/8935","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/comments?post=8935"}],"version-history":[{"count":3,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/posts\/8935\/revisions"}],"predecessor-version":[{"id":8947,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/posts\/8935\/revisions\/8947"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/media\/8949"}],"wp:attachment":[{"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/media?parent=8935"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/categories?post=8935"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/tags?post=8935"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}