{"id":35660,"date":"2025-12-02T11:01:25","date_gmt":"2025-12-02T08:01:25","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/"},"modified":"2025-12-02T11:01:25","modified_gmt":"2025-12-02T08:01:25","slug":"github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/","title":{"rendered":"GitHub Copilot ile G\u00fcvenli Kod De\u011fi\u015fiklikleri Nas\u0131l Yap\u0131l\u0131r?"},"content":{"rendered":"<p><body><\/p>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7leri hi\u00e7 olmad\u0131\u011f\u0131 kadar h\u0131zl\u0131. Bu h\u0131z, beraberinde yeni g\u00fcvenlik a\u00e7\u0131klar\u0131 ve kalitesiz kod risklerini de getiriyor. GitHub Copilot gibi yapay zeka destekli ara\u00e7lar, geli\u015ftiricilere m\u00fcthi\u015f bir h\u0131z kazand\u0131rsa da, \u00fcretilen kodun g\u00fcvenli\u011fini ve kalitesini sa\u011flamak kritik bir zorunluluk haline gelmi\u015ftir. Peki, Copilot&#8217;\u0131 kullanarak daha g\u00fcvenli ve sa\u011flam kod de\u011fi\u015fiklikleri yapman\u0131n tek ve etkili bir yolu var m\u0131? \u0130\u015fte bu makale, tek bir ak\u0131ll\u0131 prompt (istek) ile Copilot&#8217;tan bu y\u00f6nde nas\u0131l faydalanabilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.<\/p>\n<p>Yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131, her ge\u00e7en g\u00fcn daha karma\u015f\u0131k hale geliyor. S\u00fcrekli artan \u00f6zellik talepleri, h\u0131zl\u0131 teslimat beklentileri ve de\u011fi\u015fen teknoloji standartlar\u0131, geli\u015ftiriciler \u00fczerinde ciddi bir bask\u0131 olu\u015fturuyor. Bu bask\u0131 alt\u0131nda, kod kalitesi ve g\u00fcvenlik genellikle g\u00f6z ard\u0131 edilebiliyor, bu da uzun vadede bak\u0131m\u0131 zor, hatalara a\u00e7\u0131k ve potansiyel g\u00fcvenlik riskleri bar\u0131nd\u0131ran uygulamalara yol a\u00e7\u0131yor. Yapay zeka destekli kodlama asistanlar\u0131, \u00f6zellikle GitHub Copilot, bu s\u00fcreci h\u0131zland\u0131rarak geli\u015ftiricilerin daha az eforla daha fazla kod \u00fcretmelerine olanak tan\u0131yor. Ancak bu ara\u00e7lar\u0131n &#8220;g\u00fcvenli&#8221; kod \u00fcretti\u011fini varsaymak b\u00fcy\u00fck bir yan\u0131lg\u0131 olabilir.<\/p>\n<p>GitHub Copilot, geni\u015f bir kod havuzu \u00fczerinde e\u011fitildi\u011fi i\u00e7in, genellikle &#8220;\u00e7al\u0131\u015fan&#8221; ancak her zaman &#8220;en iyi&#8221; veya &#8220;en g\u00fcvenli&#8221; \u00e7\u00f6z\u00fcmleri sunmayabilir. Bir fonksiyonun h\u0131zl\u0131ca tamamlanmas\u0131 harika bir zaman kazanc\u0131 olsa da, bu fonksiyonun olas\u0131 t\u00fcm senaryolar\u0131 ele al\u0131p almad\u0131\u011f\u0131, g\u00fcvenlik a\u00e7\u0131klar\u0131na kar\u015f\u0131 dayan\u0131kl\u0131 olup olmad\u0131\u011f\u0131 ya da performans a\u00e7\u0131s\u0131ndan optimize edilip edilmedi\u011fi gibi sorular cevaps\u0131z kalabilir. \u0130\u015fte bu noktada, geli\u015ftiricilerin devreye girmesi ve yapay zekay\u0131 do\u011fru y\u00f6nlendirmesi hayati \u00f6nem ta\u015f\u0131yor. Yapay zeka asistan\u0131n\u0131 kullanarak, sadece kod \u00fcretmekle kalmay\u0131p ayn\u0131 zamanda proaktif bir yakla\u015f\u0131mla g\u00fcvenlik, performans ve s\u00fcrd\u00fcr\u00fclebilirlik odakl\u0131 de\u011fi\u015fiklikler yapmak m\u00fcmk\u00fcnd\u00fcr. Do\u011fru prompt m\u00fchendisli\u011fi ile Copilot, sadece bir kod yazar\u0131 olmaktan \u00e7\u0131k\u0131p, adeta bir &#8220;g\u00fcvenlik ve kalite kontrol&#8221; orta\u011f\u0131na d\u00f6n\u00fc\u015febilir. Bu durum, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k projelerde, manuel kod incelemelerinin y\u00fck\u00fcn\u00fc azaltarak geli\u015ftirme d\u00f6ng\u00fcs\u00fcn\u00fc h\u0131zland\u0131rabilir ve genel yaz\u0131l\u0131m kalitesini art\u0131rabilir. Yaz\u0131l\u0131m geli\u015ftirme s\u00fcrecinin her a\u015famas\u0131nda g\u00fcvenlik ve kaliteyi bir \u00f6ncelik haline getirmek, uzun vadede maliyetleri d\u00fc\u015f\u00fcr\u00fcr, m\u00fc\u015fteri memnuniyetini art\u0131r\u0131r ve markan\u0131n itibar\u0131n\u0131 korur. Dolay\u0131s\u0131yla, yapay zeka destekli geli\u015ftirme \u00e7a\u011f\u0131nda, g\u00fcvenli de\u011fi\u015fiklikler yapmak bir l\u00fcks de\u011fil, bir zorunluluktur.<\/p>\n<p>Peki, bu zorunlulu\u011fu nas\u0131l bir avantaja \u00e7evirebiliriz? Tek bir ak\u0131ll\u0131 prompt ile Copilot&#8217;\u0131, sadece fonksiyonel de\u011fil, ayn\u0131 zamanda g\u00fcvenli, performansl\u0131 ve s\u00fcrd\u00fcr\u00fclebilir kod \u00fcretmeye nas\u0131l te\u015fvik edebiliriz? Bu sorunun cevab\u0131, do\u011fru ba\u011flam\u0131 sa\u011flamaktan, beklentileri net bir \u015fekilde ifade etmekten ve olas\u0131 riskleri \u00f6nceden belirtmekten ge\u00e7iyor. \u0130lerleyen b\u00f6l\u00fcmlerde, bu t\u00fcr bir prompt&#8217;u nas\u0131l yap\u0131land\u0131raca\u011f\u0131m\u0131z\u0131 ve ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l uygulayaca\u011f\u0131m\u0131z\u0131 detayl\u0131ca inceleyece\u011fiz. Bu sayede, Copilot&#8217;\u0131n sundu\u011fu h\u0131z\u0131, projenizin kalitesinden \u00f6d\u00fcn vermeden g\u00fcvenle kullanabilirsiniz.<\/p>\n<h2>Yapay Zeka Destekli Kodlama ve G\u00fcvenlik: Neden \u00d6nemli?<\/h2>\n<p>GitHub Copilot gibi yapay zeka destekli kodlama ara\u00e7lar\u0131, geli\u015ftiricilerin \u00fcretkenli\u011fini art\u0131rma potansiyeliyle sekt\u00f6rde devrim yarat\u0131yor. Temel olarak, bu ara\u00e7lar, milyarlarca sat\u0131r a\u00e7\u0131k kaynak kod \u00fczerinde e\u011fitilmi\u015f b\u00fcy\u00fck dil modellerini (LLM) kullanarak, sizin yazd\u0131\u011f\u0131n\u0131z kodu analiz eder ve ba\u011flama uygun kod \u00f6nerileri sunar. Bir fonksiyon imzas\u0131 yazd\u0131\u011f\u0131n\u0131zda, Copilot otomatik tamamlama ile fonksiyonun g\u00f6vdesini olu\u015fturabilir; bir yorum yazd\u0131\u011f\u0131n\u0131zda, yorumun a\u00e7\u0131klamas\u0131na uygun kod par\u00e7ac\u0131klar\u0131 \u00f6nerebilir. Bu, \u00f6zellikle tekrarlayan g\u00f6revlerde veya yeni bir dil\/API \u00f6\u011frenirken inan\u0131lmaz bir h\u0131z sa\u011flar. Ancak bu h\u0131z\u0131n bir bedeli olabilir: \u00fcretilen kodun kalitesi ve g\u00fcvenli\u011fi her zaman garanti alt\u0131nda de\u011fildir.<\/p>\n<p>Bu ba\u011flamda &#8220;agent prompt&#8221; terimi, yapay zekay\u0131 belirli bir g\u00f6revi yerine getirirken nas\u0131l y\u00f6nlendirece\u011finizi ifade eder. Geli\u015ftirici olarak siz, bir &#8220;agent&#8221; gibi Copilot&#8217;\u0131 belirli kurallar, k\u0131s\u0131tlamalar ve hedefler do\u011frultusunda y\u00f6nlendiren talimatlar (prompt&#8217;lar) sa\u011flars\u0131n\u0131z. Bu, Copilot&#8217;\u0131n sadece en olas\u0131 kodu de\u011fil, ayn\u0131 zamanda sizin belirtti\u011finiz g\u00fcvenlik, performans veya mimari standartlara uygun kodu \u00fcretmesini sa\u011flar. E\u011fer Copilot&#8217;a sadece &#8220;\u015fu i\u015fi yapan bir fonksiyon yaz&#8221; derseniz, muhtemelen i\u015fi yapan bir fonksiyon al\u0131rs\u0131n\u0131z. Ancak &#8220;bu fonksiyonu yazarken, SQL enjeksiyonlar\u0131na kar\u015f\u0131 koruma sa\u011fla, girdi validasyonunu dahil et, hata y\u00f6netimini loglama ile yap ve birim testleri i\u00e7in uygun bir yap\u0131 olu\u015ftur&#8221; derseniz, Copilot&#8217;tan \u00e7ok daha kapsaml\u0131 ve g\u00fcvenli bir sonu\u00e7 bekleyebilirsiniz. Bu durum, yapay zekan\u0131n potansiyelini maksimize etmenin ve ayn\u0131 zamanda olas\u0131 riskleri minimize etmenin anahtar\u0131d\u0131r.<\/p>\n<p>G\u00fcvenli de\u011fi\u015fiklikler yapman\u0131n \u00f6nemi ise birden fazla boyutta ele al\u0131nabilir. \u0130lk olarak, yaz\u0131l\u0131m g\u00fcvenli\u011fi, m\u00fc\u015fteri verilerinin korunmas\u0131 ve \u015firket itibar\u0131n\u0131n s\u00fcrd\u00fcr\u00fclmesi a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. Bir g\u00fcvenlik a\u00e7\u0131\u011f\u0131, b\u00fcy\u00fck veri ihlallerine, yasal sorunlara ve ciddi finansal kay\u0131plara yol a\u00e7abilir. \u0130kinci olarak, kalitesiz kod, uygulaman\u0131n bak\u0131m\u0131 zorla\u015fmas\u0131na, yeni \u00f6zelliklerin eklenmesinin yava\u015flamas\u0131na ve hata ay\u0131klama s\u00fcre\u00e7lerinin uzamas\u0131na neden olur. Bu da geli\u015ftirme maliyetlerini art\u0131r\u0131r ve \u00fcr\u00fcn\u00fcn pazara \u00e7\u0131k\u0131\u015f s\u00fcresini uzat\u0131r. \u00dc\u00e7\u00fcnc\u00fc olarak, performans sorunlar\u0131, kullan\u0131c\u0131 deneyimini olumsuz etkileyerek m\u00fc\u015fteri kayb\u0131na yol a\u00e7abilir. Yapay zeka destekli kodlama ara\u00e7lar\u0131, do\u011fru kullan\u0131lmad\u0131\u011f\u0131nda bu riskleri art\u0131rma potansiyeline sahiptir. \u00c7\u00fcnk\u00fc h\u0131zl\u0131 kod \u00fcretimi, g\u00f6zden ka\u00e7abilecek hatalar\u0131n say\u0131s\u0131n\u0131 art\u0131rabilir. Bu nedenle, proaktif bir yakla\u015f\u0131mla, yani kod \u00fcretilirken g\u00fcvenlik ve kalite fakt\u00f6rlerini g\u00f6z \u00f6n\u00fcnde bulundurarak, bu riskleri ba\u015ftan ele almak \u00e7ok daha verimlidir. Bu yakla\u015f\u0131m, sadece mevcut sorunlar\u0131 \u00e7\u00f6zmekle kalmaz, ayn\u0131 zamanda gelecekteki potansiyel sorunlar\u0131 da \u00f6nler. Dolay\u0131s\u0131yla, yapay zeka destekli geli\u015ftirmenin etkinli\u011fi, sadece h\u0131z\u0131nda de\u011fil, ayn\u0131 zamanda sa\u011flad\u0131\u011f\u0131 kodun g\u00fcvenli\u011fi ve kalitesinde yatmaktad\u0131r. Bu sayede, geli\u015ftiriciler, hem daha h\u0131zl\u0131 hem de daha g\u00fcvenilir \u00e7\u00f6z\u00fcmler \u00fcretebilirler.<\/p>\n<h2>G\u00fcvenli De\u011fi\u015fiklikler \u0130\u00e7in Tek Bir Copilot Prompt&#8217;u Nas\u0131l Olu\u015fturulur?<\/h2>\n<p>GitHub Copilot&#8217;tan en g\u00fcvenli ve kaliteli sonu\u00e7lar\u0131 almak i\u00e7in, ona ne istedi\u011finizi \u00e7ok net ve kapsaml\u0131 bir \u015fekilde anlatman\u0131z gerekir. Bu, sadece &#8220;\u015funu yap&#8221; demekten \u00f6teye ge\u00e7erek, &#8220;\u015funu yap, ama bu k\u0131s\u0131tlamalarla, bu g\u00fcvenlik \u00f6nlemleriyle ve bu kalite standartlar\u0131na uygun olarak&#8221; demektir. Bu b\u00f6l\u00fcmde, tek bir g\u00fc\u00e7l\u00fc prompt&#8217;u nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz.<\/p>\n<h3>Prompt&#8217;un Bile\u015fenleri: Yap\u0131 Ta\u015flar\u0131n\u0131 Anlamak<\/h3>\n<p>Etkili bir g\u00fcvenlik odakl\u0131 prompt, \u00e7e\u015fitli bile\u015fenlerin dikkatli bir birle\u015fimidir. \u0130\u015fte temel unsurlar:<\/p>\n<ul>\n<li><strong>Ba\u011flam Belirleme (Context Setting):<\/strong> Copilot&#8217;a, \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z mevcut kod taban\u0131, projenin genel mimarisi, kulland\u0131\u011f\u0131n\u0131z diller ve k\u00fct\u00fcphaneler hakk\u0131nda bilgi verin. \u00d6rne\u011fin, &#8220;\u015eu anki projem bir Node.js REST API&#8217;si ve MongoDB kullan\u0131yor.&#8221; veya &#8220;Bir React bile\u015fenine yeni bir \u00f6zellik ekliyorum.&#8221; Bu, Copilot&#8217;\u0131n daha alakal\u0131 \u00f6neriler sunmas\u0131na yard\u0131mc\u0131 olur.<\/li>\n<li><strong>Hedef Tan\u0131mlama (Goal Definition):<\/strong> Yapmak istedi\u011finiz de\u011fi\u015fikli\u011fi a\u00e7\u0131k\u00e7a belirtin. &#8220;Yeni bir kullan\u0131c\u0131 do\u011frulama endpoint&#8217;i olu\u015fturmak istiyorum.&#8221; ya da &#8220;Mevcut bir \u00f6deme i\u015flevindeki hatay\u0131 d\u00fczeltmek istiyorum.&#8221; gibi ifadeler kullan\u0131n.<\/li>\n<li><strong>G\u00fcvenlik Gereksinimleri (Security Requirements):<\/strong> Bu k\u0131s\u0131m en kritik olan\u0131d\u0131r. Copilot&#8217;tan bekledi\u011finiz t\u00fcm g\u00fcvenlik kontrollerini listeleyin. \u00d6rnekler:\n<ul>\n<li>&#8220;T\u00fcm kullan\u0131c\u0131 girdilerini sanitize et ve valide et (XSS, SQL enjeksiyonu \u00f6nlemleri).&#8221;<\/li>\n<li>&#8220;Hassas verileri (\u015fifreler, API anahtarlar\u0131) hi\u00e7bir zaman do\u011frudan loglama.&#8221;<\/li>\n<li>&#8220;Kimlik do\u011frulama ve yetkilendirme kontrollerini do\u011fru bir \u015fekilde uygula (JWT do\u011frulama).&#8221;<\/li>\n<li>&#8220;T\u00fcm API yan\u0131tlar\u0131nda hata mesajlar\u0131n\u0131 genel tut, detayl\u0131 hata izlerini if\u015fa etme.&#8221;<\/li>\n<li>&#8220;Ba\u011f\u0131ml\u0131l\u0131k g\u00fcncellemelerini kontrol et ve bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 \u00f6nle.&#8221;<\/li>\n<li>&#8220;Parola karma i\u015flemleri i\u00e7in g\u00fcvenli algoritmalar kullan (\u00f6rne\u011fin bcrypt).&#8221;<\/li>\n<\/ul>\n<\/li>\n<li><strong>Kalite ve Performans Kriterleri (Quality &#038; Performance Criteria):<\/strong> Kodun sadece \u00e7al\u0131\u015fmas\u0131 de\u011fil, ayn\u0131 zamanda iyi yaz\u0131lm\u0131\u015f olmas\u0131 i\u00e7in beklentilerinizi belirtin.\n<ul>\n<li>&#8220;Kod okunabilirli\u011fini ve bak\u0131m\u0131n\u0131 kolayla\u015ft\u0131r.&#8221;<\/li>\n<li>&#8220;Performans a\u00e7\u0131s\u0131ndan optimize edilmi\u015f \u00e7\u00f6z\u00fcmler sun (\u00f6rne\u011fin d\u00f6ng\u00fc optimizasyonlar\u0131, veritaban\u0131 sorgu optimizasyonlar\u0131).&#8221;<\/li>\n<li>&#8220;Birim testleri veya entegrasyon testleri i\u00e7in uygun bir yap\u0131 \u00f6nceliklendir.&#8221;<\/li>\n<li>&#8220;Hata y\u00f6netimi mekanizmalar\u0131n\u0131 (try-catch, error handling middleware) dahil et.&#8221;<\/li>\n<li>&#8220;Kodu mod\u00fcler tut, single responsibility prensibine uy.&#8221;<\/li>\n<\/ul>\n<\/li>\n<li><strong>\u00c7\u0131kt\u0131 Format\u0131 ve Ek Bilgiler (Output Format &#038; Additional Info):<\/strong> Copilot&#8217;tan istedi\u011finiz \u00e7\u0131kt\u0131n\u0131n \u015feklini belirtin. \u00d6rne\u011fin, &#8220;Sadece JavaScript kodu sun, ayr\u0131 bir a\u00e7\u0131klama blo\u011fu ekleme.&#8221; veya &#8220;\u00d6nce kod, sonra k\u0131sa bir a\u00e7\u0131klama ve olas\u0131 riskler listesi.&#8221;<\/li>\n<\/ul>\n<h3>\u00d6rnek Bir Tekil G\u00fcvenlik Odakl\u0131 Copilot Prompt&#8217;u<\/h3>\n<p>\u015eimdi yukar\u0131daki bile\u015fenleri bir araya getirerek g\u00fc\u00e7l\u00fc bir prompt olu\u015ftural\u0131m. Bu prompt&#8217;u, yeni bir \u00f6zellik geli\u015ftirirken veya mevcut bir kodu refakt\u00f6r ederken kullanabilirsiniz.<\/p>\n<pre><code class=\"language-plaintext\">\n\"Mevcut Node.js\/Express API projemizde yeni bir kullan\u0131c\u0131 kay\u0131t endpoint'i (<code>\/api\/register<\/code>) olu\u015fturmam gerekiyor. Kullan\u0131c\u0131dan <code>username<\/code>, <code>email<\/code> ve <code>password<\/code> alacak.\nBu endpoint'i tasarlarken \u015fu g\u00fcvenlik, kalite ve performans gereksinimlerini kesinlikle g\u00f6zet:\n\n1.  <strong>Girdi Validasyonu ve Temizli\u011fi:<\/strong> T\u00fcm kullan\u0131c\u0131 girdileri (\u00f6zellikle <code>email<\/code> ve <code>password<\/code>) sunucu taraf\u0131nda kapsaml\u0131 bir \u015fekilde valide edilmeli ve XSS\/SQL enjeksiyonu gibi yayg\u0131n sald\u0131r\u0131lara kar\u015f\u0131 temizlenmelidir. Email format\u0131 kontrol\u00fc, parola karma\u015f\u0131kl\u0131\u011f\u0131 (min. uzunluk, \u00f6zel karakter vb.) zorunlulu\u011fu olmal\u0131d\u0131r.\n2.  <strong>Parola Saklama:<\/strong> Parolalar asla d\u00fcz metin olarak kaydedilmemeli, bcrypt gibi g\u00fc\u00e7l\u00fc bir \u015fifreleme algoritmas\u0131 ile hash'lenmelidir. Hashlenmi\u015f parolalar\u0131n g\u00fcvenli bir \u015fekilde depolanmas\u0131n\u0131 sa\u011fla.\n3.  <strong>Hata Y\u00f6netimi ve Loglama:<\/strong> Herhangi bir hata durumunda (ge\u00e7ersiz girdi, veritaban\u0131 hatas\u0131 vb.) kullan\u0131c\u0131ya sadece genel hata mesajlar\u0131 d\u00f6nmeli (\u00f6rne\u011fin, \"Kay\u0131t i\u015flemi ba\u015far\u0131s\u0131z oldu\"), sunucu i\u00e7 detaylar\u0131 (stack trace) if\u015fa edilmemelidir. Hatalar g\u00fcvenli bir \u015fekilde sunucu taraf\u0131nda loglanmal\u0131d\u0131r.\n4.  <strong>Veritaban\u0131 \u0130\u015flemleri:<\/strong> MongoDB'ye yeni kullan\u0131c\u0131 kaydederken, mevcut bir kullan\u0131c\u0131yla (email veya username) \u00e7ak\u0131\u015fma kontrol\u00fc yap\u0131lmal\u0131d\u0131r. \u0130\u015flem atomik olmal\u0131 veya tutarl\u0131l\u0131\u011f\u0131 garanti alt\u0131na alacak \u015fekilde tasarlanmal\u0131d\u0131r.\n5.  <strong>Performans:<\/strong> Kay\u0131t i\u015flemi s\u0131ras\u0131nda gereksiz pahal\u0131 i\u015flemlerden ka\u00e7\u0131n\u0131lmal\u0131, yan\u0131t s\u00fcresi optimize edilmelidir.\n6.  <strong>Kod Kalitesi:<\/strong> Kod okunabilir, mod\u00fcler ve test edilebilir olmal\u0131d\u0131r. Express middleware'lar\u0131 kullan\u0131larak mant\u0131k ayr\u0131m\u0131 sa\u011flanabilir.\n7.  <strong>Yan\u0131t G\u00fcvenli\u011fi:<\/strong> Ba\u015far\u0131l\u0131 kay\u0131t sonras\u0131 d\u00f6n\u00fclen yan\u0131t nesnesi, hassas bilgileri (\u00f6rne\u011fin kullan\u0131c\u0131n\u0131n \u015fifrelenmi\u015f parolas\u0131) i\u00e7ermemelidir.\n\nBu gereksinimleri kar\u015f\u0131layan, ilgili Express rotas\u0131n\u0131, veritaban\u0131 etkile\u015fim mant\u0131\u011f\u0131n\u0131 (MongoDB i\u00e7in Mongoose varsayabiliriz) ve gerekli yard\u0131mc\u0131 fonksiyonlar\u0131 i\u00e7eren bir JavaScript kodu \u00f6rne\u011fi sun. Her bir g\u00fcvenlik maddesine uygunluk i\u00e7in kod i\u00e7inde k\u0131sa yorumlar ekle.\"\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu prompt, Copilot'a sadece ne yapaca\u011f\u0131n\u0131 de\u011fil, ayn\u0131 zamanda nas\u0131l yapaca\u011f\u0131n\u0131, hangi g\u00fcvenlik standartlar\u0131na uymas\u0131 gerekti\u011fini ve hangi kalite beklentilerini kar\u015f\u0131lamas\u0131 gerekti\u011fini de a\u00e7\u0131k\u00e7a belirtir. Bu sayede, Copilot'\u0131n \u00fcretti\u011fi ilk taslak bile \u00e7ok daha g\u00fcvenli ve sa\u011flam olacakt\u0131r.<\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: Prompt'unuzu daha dinamik hale getirmek i\u00e7in, projenizin ESLint kurallar\u0131n\u0131 veya g\u00fcvenlik taray\u0131c\u0131lar\u0131n\u0131n bulgular\u0131n\u0131 \u00f6zetleyen bir b\u00f6l\u00fcm ekleyebilirsiniz. Bu, Copilot'\u0131n projenizin mevcut kod standartlar\u0131na daha iyi uyum sa\u011flamas\u0131na yard\u0131mc\u0131 olur.\n    <\/div>\n<p>Unutmay\u0131n, Copilot bir ara\u00e7t\u0131r ve en iyi sonu\u00e7lar\u0131, onu en iyi \u015fekilde kulland\u0131\u011f\u0131n\u0131zda al\u0131rs\u0131n\u0131z. Bu t\u00fcr detayl\u0131 ve y\u00f6nlendirici prompt'lar, yapay zekay\u0131 sadece bir otomatik tamamlama motorundan, tam te\u015fekk\u00fcll\u00fc bir yard\u0131mc\u0131 mimar ve g\u00fcvenlik dan\u0131\u015fman\u0131na d\u00f6n\u00fc\u015ft\u00fcrebilir.<\/p>\n<h2>Vaka Analizi: Mevcut Bir Koda G\u00fcvenli Bir \u00d6zellik Ekleme<\/h2>\n<p>Bir web uygulamas\u0131na yeni bir kullan\u0131c\u0131 profili resim y\u00fckleme \u00f6zelli\u011fi ekledi\u011fimizi d\u00fc\u015f\u00fcnelim. Bu t\u00fcr bir i\u015flem, dosya y\u00fckleme, depolama ve sunum g\u00fcvenli\u011fi a\u00e7\u0131s\u0131ndan bir\u00e7ok risk ta\u015f\u0131r. G\u00fcvenli de\u011fi\u015fiklikler i\u00e7in tekil prompt'umuzun bu senaryoda nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6relim.<\/p>\n<h3>Senaryo: Kullan\u0131c\u0131 Profili Resmi Y\u00fckleme \u00d6zelli\u011fi<\/h3>\n<p>Mevcut bir Node.js\/Express uygulamas\u0131na kullan\u0131c\u0131lar\u0131n profil resimlerini y\u00fckleyebilece\u011fi bir API endpoint'i eklemek istiyoruz. Ba\u015flang\u0131\u00e7ta, bu t\u00fcr bir \u00f6zellik genellikle h\u0131zl\u0131ca koda d\u00f6k\u00fcl\u00fcr ve temel i\u015flevselli\u011fe odaklan\u0131l\u0131r. Ancak, dosya y\u00fcklemeleri, k\u00f6t\u00fc niyetli y\u00fcklemeler (zararl\u0131 dosyalar, \u00e7ok b\u00fcy\u00fck dosyalar), dizin ge\u00e7i\u015fi sald\u0131r\u0131lar\u0131 ve kimlik do\u011frulama eksiklikleri gibi ciddi g\u00fcvenlik riskleri bar\u0131nd\u0131r\u0131r.<\/p>\n<h4>Ba\u015flang\u0131\u00e7 Yakla\u015f\u0131m\u0131 (G\u00fcvenlik \u00d6nlemleri Eksik):<\/h4>\n<p>\u00d6ncelikle, g\u00fcvenlik \u00f6nlemleri dikkate al\u0131nmadan, sadece i\u015flevselli\u011fi odak alan bir geli\u015ftiricinin nas\u0131l bir kod yazabilece\u011fine bakal\u0131m:<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ app.js veya users.js\nconst express = require('express');\nconst router = express.Router();\nconst multer = require('multer'); \/\/ Dosya y\u00fckleme i\u00e7in basit bir k\u00fct\u00fcphane\nconst path = require('path');\n\n\/\/ Y\u00fcklemeleri direkt \"uploads\" klas\u00f6r\u00fcne kaydet\nconst storage = multer.diskStorage({\n    destination: function (req, file, cb) {\n        cb(null, 'uploads\/'); \/\/ !!! G\u00fcvenlik riski: Dosya t\u00fcr\u00fc veya boyutu kontrol\u00fc yok\n    },\n    filename: function (req, file, cb) {\n        cb(null, Date.now() + path.extname(file.originalname));\n    }\n});\n\nconst upload = multer({ storage: storage });\n\nrouter.post('\/profile-upload', upload.single('profileImage'), (req, res) => {\n    if (!req.file) {\n        return res.status(400).send('Resim dosyas\u0131 bulunamad\u0131.');\n    }\n    \/\/ Burada kullan\u0131c\u0131 ID'si al\u0131n\u0131p veritaban\u0131na kaydedilir vs.\n    \/\/ \u00d6rne\u011fin: User.findByIdAndUpdate(req.user.id, { profileImage: req.file.path });\n    res.status(200).send('Resim ba\u015far\u0131yla y\u00fcklendi: ' + req.file.path);\n});\n\nmodule.exports = router;\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu kod par\u00e7ac\u0131\u011f\u0131, bir resim y\u00fckleme i\u015flevselli\u011fini temel d\u00fczeyde yerine getirir. Ancak a\u015fa\u011f\u0131daki g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 bar\u0131nd\u0131r\u0131r:<\/p>\n<ul>\n<li><strong>Dosya T\u00fcr\u00fc Kontrol\u00fc Yok:<\/strong> Kullan\u0131c\u0131lar y\u00fcr\u00fct\u00fclebilir dosyalar (.exe, .php vb.) y\u00fckleyebilir, bu da sunucu g\u00fcvenli\u011fini tehlikeye atar.<\/li>\n<li><strong>Dosya Boyutu Kontrol\u00fc Yok:<\/strong> \u00c7ok b\u00fcy\u00fck dosyalar y\u00fcklenerek sunucunun disk alan\u0131 doldurulabilir (DoS sald\u0131r\u0131s\u0131).<\/li>\n<li><strong>Yetkilendirme Eksikli\u011fi:<\/strong> Kimli\u011fi do\u011frulanmam\u0131\u015f kullan\u0131c\u0131lar veya ba\u015fka bir kullan\u0131c\u0131n\u0131n profiline resim y\u00fcklemeye \u00e7al\u0131\u015fan k\u00f6t\u00fc niyetli kullan\u0131c\u0131lar i\u00e7in kontrol yok.<\/li>\n<li><strong>Dizin Ge\u00e7i\u015fi\/Dosya Kapsam\u0131 A\u00e7\u0131\u011f\u0131:<\/strong> <code>path.extname<\/code> kullan\u0131m\u0131 bir miktar koruma sa\u011flasa da, daha sofistike sald\u0131r\u0131larla dosya ad\u0131n\u0131 manip\u00fcle ederek farkl\u0131 dizinlere yazma riski mevcut olabilir.<\/li>\n<li><strong>Depolama G\u00fcvenli\u011fi:<\/strong> Y\u00fcklenen dosyalar\u0131n sunuldu\u011fu dizinin g\u00fcvenli\u011fi ve eri\u015fim izinleri g\u00f6z ard\u0131 edilmi\u015ftir.<\/li>\n<\/ul>\n<h3>G\u00fcvenli De\u011fi\u015fiklikler Prompt'unu Uygulama<\/h3>\n<p>\u015eimdi, Copilot'a daha \u00f6nce olu\u015fturdu\u011fumuz g\u00fcvenlik odakl\u0131 prompt'umuza benzer bir prompt'u vererek bu \u00f6zelli\u011fi daha g\u00fcvenli hale getirmesini isteyelim:<\/p>\n<pre><code class=\"language-plaintext\">\n\"Mevcut Node.js\/Express API projemizde, kimli\u011fi do\u011frulanm\u0131\u015f kullan\u0131c\u0131lar\u0131n profil resimlerini g\u00fcvenli bir \u015fekilde y\u00fckleyebilece\u011fi bir endpoint olu\u015fturmam gerekiyor. Kullan\u0131c\u0131 <code>profileImage<\/code> ad\u0131nda bir resim dosyas\u0131 y\u00fckleyecek.\n\nBu endpoint'i tasarlarken \u015fu g\u00fcvenlik, kalite ve performans gereksinimlerini kesinlikle g\u00f6zet:\n\n1.  <strong>Kimlik Do\u011frulama ve Yetkilendirme:<\/strong> Sadece kimli\u011fi do\u011frulanm\u0131\u015f ve kendi profiline resim y\u00fcklemeye yetkili kullan\u0131c\u0131lar bu endpoint'i kullanabilmelidir. JWT tabanl\u0131 kimlik do\u011frulama kullan\u0131ld\u0131\u011f\u0131n\u0131 varsay.\n2.  <strong>Dosya Tipi Validasyonu:<\/strong> Yaln\u0131zca belirli resim formatlar\u0131na (JPEG, PNG, GIF) izin verilmelidir. Di\u011fer dosya t\u00fcrlerinin y\u00fcklenmesi kesinlikle engellenmelidir.\n3.  <strong>Dosya Boyutu K\u0131s\u0131tlamas\u0131:<\/strong> Y\u00fcklenen resim dosyas\u0131 boyutu maksimum 2MB ile s\u0131n\u0131rland\u0131r\u0131lmal\u0131d\u0131r.\n4.  <strong>Dosya Ad\u0131 G\u00fcvenli\u011fi:<\/strong> Y\u00fcklenen dosyalar\u0131n adlar\u0131 benzersiz olmal\u0131, kullan\u0131c\u0131 taraf\u0131ndan sa\u011flanan dosya adlar\u0131 temizlenmeli (sanitize) ve dizin ge\u00e7i\u015fi gibi sald\u0131r\u0131lar\u0131 \u00f6nleyecek \u015fekilde yeniden adland\u0131r\u0131lmal\u0131d\u0131r. Kullan\u0131c\u0131 ID'si dosya ad\u0131nda kullan\u0131labilir.\n5.  <strong>Depolama Yeri:<\/strong> Y\u00fcklenen dosyalar, herkese a\u00e7\u0131k eri\u015fimi olmayan g\u00fcvenli bir konumda depolanmal\u0131 (\u00f6rn. <code>storage\/profile_images<\/code>). Direkt statik sunumdan ka\u00e7\u0131n\u0131lmal\u0131 veya g\u00fcvenli bir resim sunma mekanizmas\u0131 tasarlanmal\u0131d\u0131r.\n6.  <strong>Hata Y\u00f6netimi ve Loglama:<\/strong> Y\u00fckleme i\u015flemi s\u0131ras\u0131nda olu\u015fabilecek her t\u00fcrl\u00fc hata (boyut a\u015f\u0131m\u0131, t\u00fcr hatas\u0131, disk hatas\u0131 vb.) uygun HTTP durum kodlar\u0131 ile geri bildirilmeli ve sunucu taraf\u0131nda detayl\u0131ca loglanmal\u0131d\u0131r. Kullan\u0131c\u0131ya genel hata mesajlar\u0131 d\u00f6nmelidir.\n7.  <strong>Veritaban\u0131 Entegrasyonu:<\/strong> Y\u00fcklenen resmin yolu veya kimli\u011fi, ilgili kullan\u0131c\u0131n\u0131n veritaban\u0131 kayd\u0131nda g\u00fcncellenmelidir. Bu i\u015flem atomik olmal\u0131 veya hata durumunda geri al\u0131nabilmelidir.\n8.  <strong>Resim Optimizasyonu (\u0130ste\u011fe Ba\u011fl\u0131):<\/strong> M\u00fcmk\u00fcnse, y\u00fcklenen resimler sunum i\u00e7in optimize edilebilir (boyutland\u0131rma, s\u0131k\u0131\u015ft\u0131rma).\n\nBu gereksinimleri kar\u015f\u0131layan, ilgili Express rotas\u0131n\u0131, multer konfig\u00fcrasyonunu ve \u00f6rnek veritaban\u0131 g\u00fcncelleme mant\u0131\u011f\u0131n\u0131 i\u00e7eren bir JavaScript kodu \u00f6rne\u011fi sun. Her bir g\u00fcvenlik maddesine uygunluk i\u00e7in kod i\u00e7inde k\u0131sa yorumlar ekle.\"\n    <\/pre>\n<p><\/code><\/p>\n<h3>Copilot'\u0131n Geli\u015ftirilmi\u015f \u00d6nerileri (Prompt Sonras\u0131)<\/h3>\n<p>Bu detayl\u0131 prompt ile Copilot, \u00e7ok daha g\u00fcvenli ve sa\u011flam bir \u00e7\u00f6z\u00fcm \u00f6nerecektir. \u0130\u015fte beklenen \u00e7\u0131kt\u0131ya yak\u0131n bir \u00f6rnek:<\/p>\n<pre><code class=\"language-javascript\">\nconst express = require('express');\nconst router = express.Router();\nconst multer = require('multer');\nconst path = require('path');\nconst fs = require('fs'); \/\/ Dosya i\u015flemleri i\u00e7in\nconst User = require('..\/models\/User'); \/\/ Kullan\u0131c\u0131 modeliniz oldu\u011funu varsayal\u0131m\nconst authenticateToken = require('..\/middleware\/auth'); \/\/ JWT auth middleware\n\n\/\/ Depolama alan\u0131 ayarlar\u0131\nconst storageDir = path.join(__dirname, '..\/storage\/profile_images');\n\/\/ Depolama dizini yoksa olu\u015ftur\nif (!fs.existsSync(storageDir)) {\n    fs.mkdirSync(storageDir, { recursive: true });\n}\n\nconst storage = multer.diskStorage({\n    destination: function (req, file, cb) {\n        cb(null, storageDir); \/\/ G\u00fcvenli, herkese a\u00e7\u0131k olmayan depolama dizini\n    },\n    filename: function (req, file, cb) {\n        \/\/ Dosya ad\u0131n\u0131 benzersiz ve g\u00fcvenli hale getir\n        const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);\n        const fileExtension = path.extname(file.originalname).toLowerCase();\n        \/\/ Kullan\u0131c\u0131 ID'si ile dosya ad\u0131n\u0131 ba\u011fla\n        cb(null, <code>user-${req.user.id}-${uniqueSuffix}${fileExtension}<\/code>);\n    }\n});\n\n\/\/ Dosya filtresi: Yaln\u0131zca resim dosyalar\u0131na izin ver\nconst fileFilter = (req, file, cb) => {\n    const allowedTypes = \/jpeg|jpg|png|gif\/;\n    const mimetype = allowedTypes.test(file.mimetype);\n    const extname = allowedTypes.test(path.extname(file.originalname).toLowerCase());\n\n    if (mimetype && extname) {\n        cb(null, true);\n    } else {\n        cb(new Error('Yaln\u0131zca JPEG, PNG veya GIF format\u0131nda resim dosyalar\u0131na izin verilmektedir.'), false);\n    }\n};\n\n\/\/ Multer konfig\u00fcrasyonu\nconst upload = multer({\n    storage: storage,\n    limits: { fileSize: 2 * 1024 * 1024 }, \/\/ 2MB dosya boyutu limiti\n    fileFilter: fileFilter\n}).single('profileImage');\n\n\/\/ Profil resmi y\u00fckleme endpoint'i\nrouter.post('\/profile-upload', authenticateToken, (req, res) => {\n    upload(req, res, async (err) => {\n        \/\/ Hata y\u00f6netimi\n        if (err instanceof multer.MulterError) {\n            \/\/ Multer hatalar\u0131 (\u00f6rn. dosya boyutu a\u015f\u0131m\u0131)\n            console.error('Multer hatas\u0131:', err.message); \/\/ Sunucu taraf\u0131nda loglama\n            return res.status(400).send({ message: <code>Y\u00fckleme hatas\u0131: ${err.message}<\/code> });\n        } else if (err) {\n            \/\/ Di\u011fer hatalar (\u00f6rn. dosya tipi hatas\u0131)\n            console.error('Y\u00fckleme s\u0131ras\u0131nda bilinmeyen bir hata olu\u015ftu:', err.message); \/\/ Sunucu taraf\u0131nda loglama\n            return res.status(400).send({ message: 'Y\u00fckleme s\u0131ras\u0131nda bir hata olu\u015ftu. L\u00fctfen tekrar deneyin.' });\n        }\n\n        if (!req.file) {\n            return res.status(400).send({ message: 'Resim dosyas\u0131 bulunamad\u0131.' });\n        }\n\n        try {\n            \/\/ Veritaban\u0131 g\u00fcncelleme: Kullan\u0131c\u0131ya ait profileImage alan\u0131n\u0131 g\u00fcncelle\n            \/\/ req.user.id, authenticateToken middleware'\u0131ndan geldi\u011fini varsay\u0131yoruz\n            const user = await User.findById(req.user.id);\n            if (!user) {\n                \/\/ G\u00fcvenlik: Kullan\u0131c\u0131 bulunamazsa hata\n                \/\/ Daha \u00f6nce y\u00fcklenmi\u015f eski resmi silmek gerekebilir\n                fs.unlink(req.file.path, (unlinkErr) => {\n                    if (unlinkErr) console.error('Eski resim silinirken hata:', unlinkErr);\n                });\n                return res.status(404).send({ message: 'Kullan\u0131c\u0131 bulunamad\u0131.' });\n            }\n\n            \/\/ Eski profil resmi varsa sil\n            if (user.profileImage && fs.existsSync(user.profileImage)) {\n                fs.unlink(user.profileImage, (unlinkErr) => {\n                    if (unlinkErr) console.error('Eski profil resmi silinirken hata:', unlinkErr);\n                });\n            }\n\n            user.profileImage = req.file.path; \/\/ Yeni resmin yolunu kaydet\n            await user.save();\n\n            res.status(200).send({\n                message: 'Profil resmi ba\u015far\u0131yla y\u00fcklendi.',\n                filePath: <code>\/api\/users\/${req.user.id}\/profile-image<\/code> \/\/ G\u00fcvenli sunum endpoint'i\n            });\n        } catch (dbError) {\n            console.error('Veritaban\u0131 g\u00fcncelleme hatas\u0131:', dbError); \/\/ Sunucu taraf\u0131nda loglama\n            \/\/ Hata durumunda y\u00fcklenen resmi sil\n            fs.unlink(req.file.path, (unlinkErr) => {\n                if (unlinkErr) console.error('Y\u00fcklenen resim silinirken hata:', unlinkErr);\n            });\n            res.status(500).send({ message: 'Profil resmi g\u00fcncellenirken bir sorun olu\u015ftu.' });\n        }\n    });\n});\n\n\/\/ G\u00fcvenli profil resmi sunum endpoint'i (\u00f6rnek)\nrouter.get('\/users\/:userId\/profile-image', async (req, res) => {\n    try {\n        const user = await User.findById(req.params.userId);\n        if (!user || !user.profileImage) {\n            return res.status(404).send({ message: 'Profil resmi bulunamad\u0131.' });\n        }\n\n        \/\/ G\u00fcvenlik: Dosyan\u0131n depolama dizininde oldu\u011fundan emin ol\n        if (!user.profileImage.startsWith(storageDir)) {\n             console.error(<code>G\u00fcvenlik Uyar\u0131s\u0131: Kullan\u0131c\u0131 ${req.params.userId} i\u00e7in ge\u00e7ersiz resim yolu: ${user.profileImage}<\/code>);\n             return res.status(400).send({ message: 'Ge\u00e7ersiz resim yolu.' });\n        }\n\n        res.sendFile(user.profileImage);\n    } catch (error) {\n        console.error('Profil resmi sunulurken hata:', error);\n        res.status(500).send({ message: 'Profil resmi sunulurken bir sorun olu\u015ftu.' });\n    }\n});\n\nmodule.exports = router;\n    <\/pre>\n<p><\/code><\/p>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc gibi, Copilot, verilen prompt do\u011frultusunda \u00e7ok daha katmanl\u0131 bir \u00e7\u00f6z\u00fcm sunmu\u015ftur:<\/p>\n<ul>\n<li><code>authenticateToken<\/code> middleware'\u0131 ile kimlik do\u011frulama zorunlu hale gelmi\u015ftir.<\/li>\n<li><code>fileFilter<\/code> fonksiyonu ile dosya tipi k\u0131s\u0131tlamalar\u0131 (JPEG, PNG, GIF) getirilmi\u015ftir.<\/li>\n<li><code>limits: { fileSize: 2 * 1024 * 1024 }<\/code> ile dosya boyutu s\u0131n\u0131r\u0131 konulmu\u015ftur.<\/li>\n<li>Dosya adlar\u0131 <code>user-${req.user.id}-${uniqueSuffix}${fileExtension}<\/code> \u015feklinde g\u00fcvenli ve benzersiz hale getirilmi\u015ftir.<\/li>\n<li>Hata y\u00f6netimi Multer hatalar\u0131n\u0131, dosya bulunamamas\u0131 durumlar\u0131n\u0131 ve veritaban\u0131 hatalar\u0131n\u0131 kapsayacak \u015fekilde geni\u015fletilmi\u015ftir.<\/li>\n<li>Y\u00fcklenen dosyalar\u0131n herkese a\u00e7\u0131k olmayan <code>storage\/profile_images<\/code> dizinine kaydedilmesi sa\u011flanm\u0131\u015f ve bu dizin yoksa olu\u015fturulmu\u015ftur.<\/li>\n<li>Veritaban\u0131 g\u00fcncelleme i\u015flemi s\u0131ras\u0131nda \u00f6nceki profil resminin silinmesi gibi bak\u0131m ad\u0131mlar\u0131 da eklenmi\u015ftir.<\/li>\n<li>Resim sunumu i\u00e7in ayr\u0131 bir endpoint olu\u015fturularak do\u011frudan dosya eri\u015fiminden ka\u00e7\u0131n\u0131lm\u0131\u015f, bu da bir g\u00fcvenlik katman\u0131 daha eklemi\u015ftir.<\/li>\n<\/ul>\n<p>Bu vaka analizi, tek bir kapsaml\u0131 prompt'un, yapay zekadan al\u0131nan \u00e7\u0131kt\u0131n\u0131n kalitesini ve g\u00fcvenli\u011fini nas\u0131l radikal bir \u015fekilde art\u0131rabilece\u011fini a\u00e7\u0131k\u00e7a g\u00f6stermektedir. Geli\u015ftiriciler, bu sayede hem zaman kazan\u0131r hem de potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 manuel olarak bulmaya \u00e7al\u0131\u015fmak yerine, yapay zekay\u0131 bir \u00f6nleyici ara\u00e7 olarak kullan\u0131r.<\/p>\n<h2>Vaka Analizi: Bir Hata D\u00fczeltmesini G\u00fcvenli Hale Getirme<\/h2>\n<p>Mevcut bir sistemde, m\u00fc\u015fteri sipari\u015flerini i\u015fleyen bir fonksiyonda kritik bir hata oldu\u011funu varsayal\u0131m. Bu hata, bazen sipari\u015f miktar\u0131n\u0131n negatif olmas\u0131na veya stokta olmayan \u00fcr\u00fcnlerin sipari\u015f edilmesine neden oluyor. Bu t\u00fcr bir hatan\u0131n d\u00fczeltilmesi, sadece i\u015flevselli\u011fi d\u00fczeltmekle kalmamal\u0131, ayn\u0131 zamanda gelecekte benzer hatalar\u0131 \u00f6nleyecek g\u00fcvenlik ve tutarl\u0131l\u0131k kontrollerini de i\u00e7ermelidir.<\/p>\n<h3>Senaryo: Sipari\u015f Miktar\u0131 Do\u011frulama Hatas\u0131<\/h3>\n<p>Bir e-ticaret uygulamas\u0131nda, kullan\u0131c\u0131lar\u0131n sepetlerindeki \u00fcr\u00fcnleri sipari\u015fe d\u00f6n\u00fc\u015ft\u00fcren bir <code>processOrder<\/code> fonksiyonu bulunmaktad\u0131r. Fonksiyon, bazen hatal\u0131 girdi veya e\u015fzamanl\u0131 istekler nedeniyle negatif miktarlar\u0131n ge\u00e7mesine ya da stokta olmayan \u00fcr\u00fcnlerin sipari\u015f edilmesine izin veriyor. Bu, finansal kay\u0131plara ve veri tutars\u0131zl\u0131klar\u0131na yol a\u00e7maktad\u0131r.<\/p>\n<h4>Ba\u015flang\u0131\u00e7taki Hatal\u0131 Fonksiyon (G\u00fcvenlik \u00d6nlemleri Eksik):<\/h4>\n<p>A\u015fa\u011f\u0131daki kod, hatan\u0131n var oldu\u011fu ve g\u00fcvenlik\/tutarl\u0131l\u0131k kontrollerinin yetersiz oldu\u011fu varsay\u0131lan bir senaryoyu temsil etmektedir:<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ orderProcessor.js\nasync function processOrder(userId, cartItems) {\n    try {\n        const order = {\n            userId: userId,\n            items: [],\n            totalAmount: 0,\n            status: 'pending'\n        };\n\n        for (const item of cartItems) {\n            const product = await Product.findById(item.productId); \/\/ Product modelini varsayal\u0131m\n            if (!product) {\n                console.error(<code>\u00dcr\u00fcn bulunamad\u0131: ${item.productId}<\/code>);\n                continue; \/\/ \u00dcr\u00fcn bulunamazsa atla, hata f\u0131rlatma\n            }\n\n            \/\/ Basit miktar kontrol\u00fc, negatif kontrol\u00fc eksik\n            if (item.quantity > product.stock) {\n                \/\/ Stok yetersizse uyar\u0131 ver ama sipari\u015fi yine de i\u015fleyebilir\n                console.warn(<code>\u00dcr\u00fcn ${product.name} i\u00e7in stok yetersiz!<\/code>);\n                item.quantity = product.stock; \/\/ Miktar\u0131 stoka indirge\n            }\n\n            order.items.push({\n                productId: product._id,\n                name: product.name,\n                quantity: item.quantity,\n                price: product.price\n            });\n            order.totalAmount += item.quantity * product.price;\n\n            \/\/ Stoktan d\u00fc\u015fme i\u015flemi - hata olu\u015fursa geri al\u0131nm\u0131yor\n            product.stock -= item.quantity;\n            await product.save();\n        }\n\n        const newOrder = new Order(order); \/\/ Order modelini varsayal\u0131m\n        await newOrder.save();\n        return { success: true, orderId: newOrder._id };\n\n    } catch (error) {\n        console.error('Sipari\u015f i\u015fleme hatas\u0131:', error);\n        return { success: false, error: 'Sipari\u015f i\u015flenirken bir hata olu\u015ftu.' };\n    }\n}\n\n\/\/ \u00d6rnek kullan\u0131m (bir Express rotas\u0131ndan \u00e7a\u011fr\u0131ld\u0131\u011f\u0131n\u0131 varsayal\u0131m)\n\/\/ router.post('\/checkout', async (req, res) => {\n\/\/     const { userId, cartItems } = req.body;\n\/\/     const result = await processOrder(userId, cartItems);\n\/\/     if (result.success) {\n\/\/         res.status(200).send(result);\n\/\/     } else {\n\/\/         res.status(500).send(result);\n\/\/     }\n\/\/ });\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu kod par\u00e7ac\u0131\u011f\u0131nda temel hatalar ve g\u00fcvenlik zafiyetleri \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Negatif Miktar Kontrol\u00fc Yok:<\/strong> <code>item.quantity<\/code> de\u011feri negatif olabilir, bu da stokta art\u0131\u015fa neden olarak envanter tutars\u0131zl\u0131\u011f\u0131na yol a\u00e7ar.<\/li>\n<li><strong>Stok Kontrol\u00fc Yetersiz:<\/strong> <code>item.quantity > product.stock<\/code> kontrol\u00fc, stok yetersizli\u011finde sipari\u015fi k\u0131smen i\u015flese de, kullan\u0131c\u0131n\u0131n beklentisini kar\u015f\u0131lamaz ve tutars\u0131zl\u0131k yarat\u0131r. Kritik bir e-ticaret sisteminde bu, sipari\u015fin tamamen iptal edilmesi veya kullan\u0131c\u0131n\u0131n bilgilendirilmesi gereken bir durumdur.<\/li>\n<li><strong>\u0130\u015flemsel Tutarl\u0131l\u0131k Eksikli\u011fi:<\/strong> \u00dcr\u00fcn stokundan d\u00fc\u015fme ve sipari\u015f kaydetme i\u015flemleri ayr\u0131 ayr\u0131 y\u00fcr\u00fct\u00fcl\u00fcyor. E\u011fer sipari\u015f kaydedilemezse, \u00fcr\u00fcn stokundan d\u00fc\u015fme i\u015flemi geri al\u0131nmaz, bu da veri tutars\u0131zl\u0131\u011f\u0131na neden olur (i\u015flem atomik de\u011fil).<\/li>\n<li><strong>Hata Mesaj\u0131 Y\u00f6netimi:<\/strong> Hata durumunda sadece genel bir mesaj d\u00f6n\u00fcl\u00fcyor, ancak bu hatan\u0131n neden kaynakland\u0131\u011f\u0131 (stok, ge\u00e7ersiz miktar) kullan\u0131c\u0131ya daha spesifik olarak bildirilebilir.<\/li>\n<li><strong>E\u015fzamanl\u0131l\u0131k Sorunlar\u0131:<\/strong> Birden fazla kullan\u0131c\u0131 ayn\u0131 anda ayn\u0131 \u00fcr\u00fcn\u00fc sipari\u015f etmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131nda race condition'lar olu\u015fabilir ve stok kontrol\u00fc yetersiz kalabilir.<\/li>\n<\/ul>\n<h3>G\u00fcvenli Hata D\u00fczeltmesi \u0130\u00e7in Prompt Uygulamas\u0131<\/h3>\n<p>\u015eimdi, bu <code>processOrder<\/code> fonksiyonundaki hatalar\u0131 d\u00fczeltmek ve onu daha sa\u011flam hale getirmek i\u00e7in Copilot'a bir prompt verelim:<\/p>\n<pre><code class=\"language-plaintext\">\n\"Mevcut Node.js e-ticaret projemizde, sipari\u015fleri i\u015fleyen <code>processOrder(userId, cartItems)<\/code> fonksiyonundaki kritik hatalar\u0131 d\u00fczeltmem gerekiyor. Fonksiyon, <code>Product<\/code> ve <code>Order<\/code> modellerini MongoDB ile kullan\u0131yor.\n\nFonksiyonu yeniden d\u00fczenlerken \u015fu g\u00fcvenlik, kalite ve tutarl\u0131l\u0131k gereksinimlerini kesinlikle g\u00f6zet:\n\n1.  <strong>Girdi Validasyonu:<\/strong> Her bir <code>item.quantity<\/code> pozitif bir tam say\u0131 olmal\u0131 ve 0'dan b\u00fcy\u00fck olmal\u0131d\u0131r. Ge\u00e7ersiz miktarlar i\u00e7in hata f\u0131rlat\u0131lmal\u0131d\u0131r.\n2.  <strong>Kapsaml\u0131 Stok Kontrol\u00fc:<\/strong> Sipari\u015f verilmeden \u00f6nce her bir \u00fcr\u00fcn i\u00e7in yeterli stok olup olmad\u0131\u011f\u0131 g\u00fcvenli bir \u015fekilde kontrol edilmelidir. E\u011fer herhangi bir \u00fcr\u00fcn\u00fcn sto\u011fu yetersizse, t\u00fcm sipari\u015f i\u015flemi iptal edilmeli ve kullan\u0131c\u0131ya hangi \u00fcr\u00fcn\u00fcn stokta olmad\u0131\u011f\u0131 bilgisi d\u00f6n\u00fclmelidir.\n3.  <strong>\u0130\u015flemsel Atomiklik (Transaction):<\/strong> \u00dcr\u00fcn sto\u011funun d\u00fc\u015f\u00fcr\u00fclmesi ve sipari\u015fin veritaban\u0131na kaydedilmesi i\u015flemleri tek bir veritaban\u0131 i\u015flemi (transaction) i\u00e7inde yap\u0131lmal\u0131d\u0131r. Bu sayede, herhangi bir ad\u0131mda hata olu\u015fursa t\u00fcm i\u015flemler geri al\u0131narak veri tutarl\u0131l\u0131\u011f\u0131 sa\u011flanmal\u0131d\u0131r. MongoDB transaction'lar\u0131 kullanabiliriz.\n4.  <strong>E\u015fzamanl\u0131l\u0131k Kontrol\u00fc:<\/strong> Birden fazla sipari\u015f iste\u011finin ayn\u0131 anda ayn\u0131 \u00fcr\u00fcn\u00fcn sto\u011funu manip\u00fcle etmesini \u00f6nlemek i\u00e7in uygun e\u015fzamanl\u0131l\u0131k kontrol mekanizmalar\u0131 (\u00f6rn. pessimistic locking veya optimistic locking) d\u00fc\u015f\u00fcn\u00fclmelidir. En az\u0131ndan, stok g\u00fcncellenirken <code>Product<\/code> dok\u00fcman\u0131 kilitlenmelidir (\u00f6rne\u011fin <code>findOneAndUpdate<\/code> ile <code>$inc<\/code> operat\u00f6r\u00fcn\u00fcn atomik kullan\u0131m\u0131).\n5.  <strong>Hata Y\u00f6netimi ve Kullan\u0131c\u0131 Bildirimi:<\/strong> T\u00fcm hata durumlar\u0131 (ge\u00e7ersiz miktar, stok yetersizli\u011fi, veritaban\u0131 hatalar\u0131 vb.) i\u00e7in a\u00e7\u0131k ve kullan\u0131c\u0131 dostu hata mesajlar\u0131 d\u00f6nd\u00fcr\u00fclmeli ve sunucu taraf\u0131nda detayl\u0131ca loglanmal\u0131d\u0131r.\n6.  <strong>Kod Kalitesi:<\/strong> Kod okunabilir, mod\u00fcler ve performans\u0131 optimize edilmi\u015f olmal\u0131d\u0131r. Gereksiz veritaban\u0131 \u00e7a\u011fr\u0131lar\u0131ndan ka\u00e7\u0131n\u0131lmal\u0131d\u0131r.\n\nBu gereksinimleri kar\u015f\u0131layan, <code>processOrder<\/code> fonksiyonunun g\u00fcncellenmi\u015f bir JavaScript kodunu sun. MongoDB transaction'lar\u0131 i\u00e7in Mongoose'un <code>session<\/code> kullan\u0131m\u0131n\u0131 i\u00e7erebilir. Her bir tutarl\u0131l\u0131k\/g\u00fcvenlik maddesine uygunluk i\u00e7in kod i\u00e7inde k\u0131sa yorumlar ekle.\"\n    <\/pre>\n<p><\/code><\/p>\n<h3>Copilot'\u0131n Geli\u015ftirilmi\u015f \u00c7\u00f6z\u00fcm\u00fc (Prompt Sonras\u0131)<\/h3>\n<p>Bu kapsaml\u0131 prompt ile Copilot, \u00e7ok daha sa\u011flam ve tutarl\u0131 bir <code>processOrder<\/code> fonksiyonu \u00f6nerecektir:<\/p>\n<pre><code class=\"language-javascript\">\nconst mongoose = require('mongoose');\nconst Product = require('..\/models\/Product'); \/\/ Product modeliniz\nconst Order = require('..\/models\/Order');     \/\/ Order modeliniz\n\nasync function processOrder(userId, cartItems) {\n    \/\/ Session (i\u015flem) ba\u015flatma\n    const session = await mongoose.startSession();\n    session.startTransaction();\n\n    try {\n        const order = {\n            userId: userId,\n            items: [],\n            totalAmount: 0,\n            status: 'pending'\n        };\n\n        const productUpdates = []; \/\/ Stok g\u00fcncellemelerini tutmak i\u00e7in\n        const productsInCart = new Map(); \/\/ \u00dcr\u00fcnleri \u00f6nbelle\u011fe almak i\u00e7in\n\n        \/\/ 1. \u00dcr\u00fcnleri al ve ilk kontrolleri yap\n        for (const item of cartItems) {\n            \/\/ Girdi Validasyonu: Miktar pozitif bir tam say\u0131 olmal\u0131\n            if (!Number.isInteger(item.quantity) || item.quantity <= 0) {\n                throw new Error(<code>Ge\u00e7ersiz \u00fcr\u00fcn miktar\u0131: ${item.productId} i\u00e7in ${item.quantity}. Miktar pozitif bir tam say\u0131 olmal\u0131d\u0131r.<\/code>);\n            }\n\n            const product = await Product.findById(item.productId).session(session);\n            if (!product) {\n                throw new Error(<code>\u00dcr\u00fcn bulunamad\u0131: ${item.productId}<\/code>);\n            }\n\n            \/\/ Kapsaml\u0131 Stok Kontrol\u00fc: Yetersiz stok durumunda t\u00fcm i\u015flemi iptal et\n            if (item.quantity > product.stock) {\n                throw new Error(<code>\u00dcr\u00fcn \"${product.name}\" i\u00e7in stok yetersiz. Mevcut stok: ${product.stock}, istenen: ${item.quantity}.<\/code>);\n            }\n            productsInCart.set(product._id.toString(), product);\n\n            order.items.push({\n                productId: product._id,\n                name: product.name,\n                quantity: item.quantity,\n                price: product.price\n            });\n            order.totalAmount += item.quantity * product.price;\n            \n            \/\/ Stok g\u00fcncellemesi i\u00e7in productUpdates dizisine ekle\n            productUpdates.push({\n                productId: product._id,\n                quantity: item.quantity\n            });\n        }\n\n        \/\/ 2. Stoklar\u0131 g\u00fcvenli bir \u015fekilde d\u00fc\u015f\u00fcr ve e\u015fzamanl\u0131l\u0131k kontrol\u00fc yap\n        for (const update of productUpdates) {\n            const result = await Product.findOneAndUpdate(\n                { _id: update.productId, stock: { $gte: update.quantity } }, \/\/ Optimistic Locking \/ E\u015fzamanl\u0131l\u0131k kontrol\u00fc\n                { $inc: { stock: -update.quantity } },\n                { new: true, session: session }\n            );\n\n            if (!result) {\n                \/\/ E\u011fer burada result null d\u00f6nerse, ba\u015fka bir i\u015flem sto\u011fu d\u00fc\u015f\u00fcrm\u00fc\u015f demektir.\n                throw new Error(<code>Stok g\u00fcncelleme hatas\u0131: \u00dcr\u00fcn ${update.productId} i\u00e7in yetersiz stok veya e\u015fzamanl\u0131l\u0131k \u00e7ak\u0131\u015fmas\u0131.<\/code>);\n            }\n        }\n\n        \/\/ 3. Sipari\u015fi kaydet\n        const newOrder = new Order(order);\n        await newOrder.save({ session: session });\n\n        \/\/ \u0130\u015flemi onayla\n        await session.commitTransaction();\n        session.endSession();\n\n        return { success: true, orderId: newOrder._id };\n\n    } catch (error) {\n        \/\/ Hata durumunda t\u00fcm i\u015flemleri geri al\n        await session.abortTransaction();\n        session.endSession();\n        console.error('Sipari\u015f i\u015fleme hatas\u0131:', error.message); \/\/ Sunucu taraf\u0131nda detayl\u0131 loglama\n        return { success: false, error: error.message }; \/\/ Kullan\u0131c\u0131ya detayl\u0131 ama g\u00fcvenli hata mesaj\u0131\n    }\n}\n\nmodule.exports = processOrder;\n\n\/\/ \u00d6rnek kullan\u0131m (bir Express rotas\u0131ndan \u00e7a\u011fr\u0131ld\u0131\u011f\u0131n\u0131 varsayal\u0131m)\n\/*\nconst processOrder = require('.\/orderProcessor');\n\nrouter.post('\/checkout', authenticateToken, async (req, res) => { \/\/ authenticateToken middleware'\u0131 varsayal\u0131m\n    const { cartItems } = req.body;\n    try {\n        const result = await processOrder(req.user.id, cartItems);\n        if (result.success) {\n            res.status(200).send({ message: 'Sipari\u015finiz ba\u015far\u0131yla i\u015flendi.', orderId: result.orderId });\n        } else {\n            \/\/ Hata mesaj\u0131n\u0131 do\u011frudan kullan\u0131c\u0131ya d\u00f6nebiliriz \u00e7\u00fcnk\u00fc prompt'ta g\u00fcvenli hata mesajlar\u0131 talep ettik\n            res.status(400).send({ message: result.error });\n        }\n    } catch (unexpectedError) {\n        console.error('Beklenmeyen hata:', unexpectedError);\n        res.status(500).send({ message: 'Sipari\u015f i\u015flenirken beklenmeyen bir hata olu\u015ftu.' });\n    }\n});\n*\/\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu revize edilmi\u015f <code>processOrder<\/code> fonksiyonu, Copilot'\u0131n prompt'umuza yan\u0131t olarak getirdi\u011fi \u00f6nemli iyile\u015ftirmeleri g\u00f6steriyor:<\/p>\n<ul>\n<li><strong>Girdi Validasyonu:<\/strong> Miktar kontrol\u00fc ilk ad\u0131mda yap\u0131l\u0131yor ve negatif veya s\u0131f\u0131r miktarlar i\u00e7in hata f\u0131rlat\u0131l\u0131yor.<\/li>\n<li><strong>Kapsaml\u0131 Stok Kontrol\u00fc:<\/strong> T\u00fcm \u00fcr\u00fcnlerin stok durumlar\u0131 sipari\u015f i\u015flemi ba\u015flamadan \u00f6nce kontrol ediliyor ve yetersiz stok durumunda t\u00fcm i\u015flem iptal ediliyor.<\/li>\n<li><strong>MongoDB Transaction'lar\u0131:<\/strong> <code>session.startTransaction()<\/code>, <code>session.commitTransaction()<\/code> ve <code>session.abortTransaction()<\/code> kullanarak \u00fcr\u00fcn sto\u011fu g\u00fcncelleme ve sipari\u015f kaydetme i\u015flemleri atomik hale getirildi. Bu, herhangi bir ad\u0131mda bir hata olmas\u0131 durumunda t\u00fcm de\u011fi\u015fikliklerin geri al\u0131nmas\u0131n\u0131 sa\u011flar, veri tutarl\u0131l\u0131\u011f\u0131n\u0131 garanti eder.<\/li>\n<li><strong>E\u015fzamanl\u0131l\u0131k Kontrol\u00fc:<\/strong> <code>Product.findOneAndUpdate<\/code> i\u00e7indeki <code>$gte<\/code> operat\u00f6r\u00fc, sto\u011fun g\u00fcncel oldu\u011fundan ve yeterli oldu\u011fundan emin olmak i\u00e7in ek bir e\u015fzamanl\u0131l\u0131k kontrol\u00fc sa\u011flar. E\u011fer ba\u015fka bir i\u015flem sto\u011fu d\u00fc\u015f\u00fcrm\u00fc\u015fse, bu i\u015flem ba\u015far\u0131s\u0131z olur ve transaction geri al\u0131n\u0131r.<\/li>\n<li><strong>Hata Y\u00f6netimi:<\/strong> Hata mesajlar\u0131 daha spesifik ve kullan\u0131c\u0131 dostu hale getirildi. Sunucu taraf\u0131nda detayl\u0131 loglama yap\u0131l\u0131rken, kullan\u0131c\u0131ya d\u00f6n\u00fclen mesajlar bilgilendirici ancak i\u00e7 detaylar\u0131 if\u015fa etmeyen bir yap\u0131ya sahip.<\/li>\n<\/ul>\n<p>Bu vaka analizi, Copilot'\u0131n do\u011fru y\u00f6nlendirmeyle sadece yeni kod \u00fcretmekle kalmay\u0131p, ayn\u0131 zamanda mevcut hatalar\u0131 d\u00fczelterek sistemin genel g\u00fcvenli\u011fini, tutarl\u0131l\u0131\u011f\u0131n\u0131 ve hata tolerans\u0131n\u0131 nas\u0131l \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilece\u011fini ortaya koymaktad\u0131r. Bu, geli\u015ftiricilerin sadece i\u015flevselli\u011fe de\u011fil, ayn\u0131 zamanda sistemin sa\u011flaml\u0131\u011f\u0131na odaklanmalar\u0131na olanak tan\u0131r.<\/p>\n<h2>Prompt'unuzu \u0130leri D\u00fczeyde \u00d6zelle\u015ftirme \u0130pu\u00e7lar\u0131<\/h2>\n<p>GitHub Copilot ile sadece temel prompt'larla yetinmek, asl\u0131nda potansiyelinin b\u00fcy\u00fck bir k\u0131sm\u0131n\u0131 kullanmamak anlam\u0131na gelir. Deneyimli kullan\u0131c\u0131lar ve geli\u015ftirme ekipleri, prompt'lar\u0131n\u0131 daha sofistike hale getirerek, AI'dan daha hassas, ba\u011flamsal ve projenin \u00f6zel ihtiya\u00e7lar\u0131na uygun \u00e7\u0131kt\u0131lar alabilirler. \u0130\u015fte prompt'unuzu bir sonraki seviyeye ta\u015f\u0131yacak baz\u0131 ileri d\u00fczey ipu\u00e7lar\u0131:<\/p>\n<h3>1. Dinamik Prompt \u00dcretimi ve Entegrasyonu<\/h3>\n<p>Her proje farkl\u0131 kodlama standartlar\u0131na, linter kurallar\u0131na ve g\u00fcvenlik politikalar\u0131na sahiptir. Prompt'unuzu her seferinde manuel olarak yazmak yerine, bu kurallar\u0131 dinamik olarak prompt'a dahil edebilirsiniz. \u00d6rne\u011fin:<\/p>\n<ul>\n<li><strong>Linting Kurallar\u0131:<\/strong> Bir kod taban\u0131ndaki ESLint veya Prettier yap\u0131land\u0131rmalar\u0131n\u0131 \u00f6zetleyen bir JSON veya metin dosyas\u0131n\u0131 prompt'a ekleyebilirsiniz. \"\u015eu anki projemiz ESLint kurallar\u0131n\u0131 (airbnb config) takip ediyor, buna g\u00f6re kodu formatla ve best practice'leri uygula.\"<\/li>\n<li><strong>G\u00fcvenlik Politikalar\u0131:<\/strong> \u015eirketinizin genel g\u00fcvenlik politikalar\u0131n\u0131 (\u00f6rn. \"t\u00fcm API girdileri OAuth2 kapsam do\u011frulamas\u0131ndan ge\u00e7meli\" veya \"t\u00fcm veritaban\u0131 sorgular\u0131 parametrele\u015ftirilmi\u015f olmal\u0131\") prompt'a ekleyebilirsiniz.<\/li>\n<li><strong>CI\/CD Boru Hatt\u0131 ile Entegrasyon:<\/strong> Belirli bir kod de\u011fi\u015fikli\u011fi CI\/CD (S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m) boru hatt\u0131nda bir ad\u0131m\u0131 tetikledi\u011finde, Copilot'\u0131n otomatik olarak bir g\u00fcvenlik analizi veya test senaryosu \u00f6nerisi olu\u015fturmas\u0131n\u0131 sa\u011flayacak bir \"meta-prompt\" mekanizmas\u0131 d\u00fc\u015f\u00fcnebilirsiniz. \u00d6rne\u011fin, bir pull request a\u00e7\u0131ld\u0131\u011f\u0131nda, Copilot, ilgili de\u011fi\u015fiklikler i\u00e7in otomatik olarak ek test senaryolar\u0131 veya g\u00fcvenlik inceleme maddeleri \u00f6nerebilir.<\/li>\n<\/ul>\n<h3>2. \u00d6zel Copilot Ajanlar\u0131 veya Geni\u015fletilmi\u015f Ba\u011flam Kullan\u0131m\u0131<\/h3>\n<p>GitHub Copilot'\u0131n gelecekteki s\u00fcr\u00fcmleri veya mevcut geni\u015fletme mekanizmalar\u0131, projenize \u00f6zel \"ajanlar\" tan\u0131mlaman\u0131za izin verebilir. Ancak \u015fimdilik, Copilot'a sa\u011flad\u0131\u011f\u0131n\u0131z ba\u011flam\u0131 geni\u015fleterek benzer bir etki yaratabilirsiniz:<\/p>\n<ul>\n<li><strong>\u00d6rnek Kod Snippet'lar\u0131:<\/strong> Copilot'\u0131n daha \u00f6nce projenizde yaz\u0131lm\u0131\u015f, y\u00fcksek kaliteli ve g\u00fcvenli kod \u00f6rneklerinden \u00f6\u011frenmesini sa\u011flay\u0131n. Prompt'unuza \"Projemizde bu t\u00fcr g\u00fcvenlik mekanizmalar\u0131 kullan\u0131yoruz. A\u015fa\u011f\u0131daki \u00f6rnek koda benzer bir yakla\u015f\u0131m sergile:\" diyerek ilgili kod bloklar\u0131n\u0131 ekleyebilirsiniz.<\/li>\n<li><strong>Mimari Belgelerden Al\u0131nt\u0131lar:<\/strong> Projenizin mimari tasar\u0131m dok\u00fcmanlar\u0131ndan ilgili b\u00f6l\u00fcmleri prompt'a ekleyerek, Copilot'\u0131n daha b\u00fcy\u00fck resme uygun \u00e7\u00f6z\u00fcmler \u00f6nermesini sa\u011flayabilirsiniz. \u00d6rne\u011fin, \"Mikroservis mimarimizin X ilkesine g\u00f6re, bu yeni \u00f6zellik ba\u011f\u0131ms\u0131z ve kendi veritaban\u0131 ile \u00e7al\u0131\u015fmal\u0131d\u0131r.\"<\/li>\n<\/ul>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: Karma\u015f\u0131k g\u00fcvenlik gereksinimleri i\u00e7in, prompt'unuzu birden fazla ad\u0131ma b\u00f6lerek (iterative prompting) Copilot'tan a\u015famal\u0131 olarak bilgi alabilirsiniz. \u00d6nce temel i\u015flevselli\u011fi isteyin, sonra \"\u015fimdi bu kodu XSS ve CSRF sald\u0131r\u0131lar\u0131na kar\u015f\u0131 g\u00fcvenli hale getir\" gibi ek prompt'lar sunun. Bu, AI'n\u0131n her ad\u0131m\u0131 daha iyi anlamas\u0131na yard\u0131mc\u0131 olabilir.\n    <\/div>\n<h3>3. \u0130teratif Prompting ve \u00c7\u0131kt\u0131 Rafine Etme<\/h3>\n<p>Copilot'\u0131n ilk \u00e7\u0131kt\u0131s\u0131 her zaman m\u00fckemmel olmayabilir. Bu normaldir. \u00d6nemli olan, \u00e7\u0131kt\u0131y\u0131 de\u011ferlendirip, eksik veya hatal\u0131 buldu\u011funuz yerleri belirleyerek Copilot'a geri bildirim sa\u011flaman\u0131zd\u0131r:<\/p>\n<ul>\n<li><strong>Eksiklikleri Belirtin:<\/strong> \"Bu kod X g\u00fcvenlik kontrol\u00fcn\u00fc atlam\u0131\u015f, l\u00fctfen onu ekle.\"<\/li>\n<li><strong>Alternatif \u0130steyin:<\/strong> \"Bu yakla\u015f\u0131m yerine, daha performansl\u0131 veya daha az kaynak t\u00fcketen bir alternatif \u00f6nerebilir misin?\"<\/li>\n<li><strong>Belirli Bir K\u00fct\u00fcphane Kullan\u0131m\u0131:<\/strong> \"<code>jsonwebtoken<\/code> yerine <code>jose<\/code> k\u00fct\u00fcphanesini kullanarak JWT do\u011frulamas\u0131n\u0131 yeniden yaz.\"<\/li>\n<\/ul>\n<h3>4. Performans ve Kaynak Y\u00f6netimi Odakl\u0131 Prompt'lar<\/h3>\n<p>G\u00fcvenlik kadar performans da kritik bir fakt\u00f6rd\u00fcr. Prompt'lar\u0131n\u0131za performans odakl\u0131 y\u00f6nergeler ekleyebilirsiniz:<\/p>\n<ul>\n<li>\"Bu fonksiyonun bellek kullan\u0131m\u0131n\u0131 minimize et.\"<\/li>\n<li>\"Veritaban\u0131 sorgular\u0131n\u0131 optimize et, N+1 probleminden ka\u00e7\u0131n.\"<\/li>\n<li>\"Asenkron i\u015flemleri verimli kullan, blocking I\/O'dan ka\u00e7\u0131n.\"<\/li>\n<li>\"\u00d6nbellekleme stratejileri (Redis Cache gibi) entegrasyonu i\u00e7in \u00f6neriler sun.\"<\/li>\n<\/ul>\n<h3>5. Mobil Uyumlu HTML ve CSS \u0130\u00e7in Copilot'\u0131 Kullanma<\/h3>\n<p>Madem ki bu makale mobil uyumlu HTML \u00e7\u0131kt\u0131s\u0131 talep ediyor, bu konuyu da Copilot ile nas\u0131l ele alabilece\u011fimize de\u011finelim. G\u00fcvenli de\u011fi\u015fiklikler sadece backend veya uygulama kodunda de\u011fil, kullan\u0131c\u0131 aray\u00fcz\u00fcnde de \u00f6nemlidir. \u00d6zellikle responsive tasar\u0131m, farkl\u0131 ekran boyutlar\u0131nda do\u011fru g\u00f6r\u00fcnt\u00fcleme ve etkile\u015fim sa\u011flayarak kullan\u0131c\u0131 deneyimini g\u00fcvenli hale getirir.<\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: Frontend geli\u015ftirme yaparken Copilot'a \"Mobil uyumlu, responsive bir navigasyon men\u00fcs\u00fc olu\u015ftur. \u0130lk olarak mobil i\u00e7in, sonra tablet ve masa\u00fcst\u00fc i\u00e7in CSS media query'leri kullanarak stilize et.\" gibi prompt'lar verebilirsiniz. Bu sayede, Copilot size temel bir iskelet sunar.\n    <\/div>\n<p>A\u015fa\u011f\u0131da, bir web sayfas\u0131n\u0131n mobil cihazlarda iyi g\u00f6r\u00fcnmesini sa\u011flayan temel bir CSS media query \u00f6rne\u011fi bulunmaktad\u0131r. Copilot'tan bu t\u00fcr kod bloklar\u0131n\u0131 veya mevcut HTML\/CSS kodunuzu responsive hale getirmesini isteyebilirsiniz:<\/p>\n<pre><code class=\"language-css\">\n\/* Temel stiller (mobil \u00f6ncelikli) *\/\nbody {\n    font-family: Arial, sans-serif;\n    margin: 0;\n    padding: 0;\n    box-sizing: border-box;\n}\n\n.container {\n    width: 100%;\n    padding: 15px;\n}\n\n\/* Tablet ve daha b\u00fcy\u00fck ekranlar i\u00e7in stiller *\/\n@media screen and (min-width: 768px) {\n    .container {\n        width: 90%;\n        max-width: 960px;\n        margin: 0 auto;\n        padding: 20px;\n    }\n\n    nav ul {\n        display: flex;\n        justify-content: flex-end;\n    }\n\n    nav li {\n        margin-left: 20px;\n    }\n}\n\n\/* Masa\u00fcst\u00fc ve daha b\u00fcy\u00fck ekranlar i\u00e7in stiller *\/\n@media screen and (min-width: 1024px) {\n    .container {\n        max-width: 1200px;\n        padding: 30px;\n    }\n\n    .sidebar {\n        float: left;\n        width: 25%;\n    }\n\n    .main-content {\n        float: right;\n        width: 70%;\n    }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu ipu\u00e7lar\u0131, Copilot'\u0131 sadece bir kod tamamlama arac\u0131 olarak de\u011fil, ayn\u0131 zamanda ak\u0131ll\u0131 bir kod orta\u011f\u0131, g\u00fcvenlik denet\u00e7isi ve performans optimizasyon dan\u0131\u015fman\u0131 olarak kullanman\u0131za olanak tan\u0131r. Kendi prompt stratejilerinizi geli\u015ftirerek, yapay zekadan en y\u00fcksek de\u011feri elde edebilir ve yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinizin kalitesini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilirsiniz.<\/p>\n<h2>Yapay Zeka Destekli Geli\u015ftirmede G\u00fcvenli\u011fin Gelece\u011fi<\/h2>\n<p>Yaz\u0131l\u0131m d\u00fcnyas\u0131n\u0131n evrimi, yapay zeka destekli ara\u00e7lar\u0131n y\u00fckseli\u015fiyle birlikte h\u0131z kesmeden devam ediyor. GitHub Copilot gibi ara\u00e7lar, geli\u015ftirme s\u00fcre\u00e7lerimizi d\u00f6n\u00fc\u015ft\u00fcr\u00fcrken, \"g\u00fcvenli de\u011fi\u015fiklikler\" kavram\u0131 da bu d\u00f6n\u00fc\u015f\u00fcm\u00fcn merkezine oturuyor. Bu makalede ele ald\u0131\u011f\u0131m\u0131z tek ve kapsaml\u0131 prompt stratejisi, geli\u015ftiricilere sadece daha h\u0131zl\u0131 kod yazma imkan\u0131 sunmakla kalm\u0131yor, ayn\u0131 zamanda \u00fcretilen kodun kalitesini, g\u00fcvenli\u011fini ve s\u00fcrd\u00fcr\u00fclebilirli\u011fini proaktif bir \u015fekilde art\u0131rma g\u00fcc\u00fc veriyor. Unutulmamal\u0131d\u0131r ki, yapay zeka bir ara\u00e7t\u0131r; onun etkinli\u011fi, onu kullanan ki\u015finin yetkinli\u011fi ve onu y\u00f6nlendirme bi\u00e7imiyle do\u011frudan orant\u0131l\u0131d\u0131r.<\/p>\n<p>Do\u011fru ba\u011flam, net hedefler, ayr\u0131nt\u0131l\u0131 g\u00fcvenlik gereksinimleri ve kalite kriterleri i\u00e7eren bir prompt, Copilot'\u0131 pasif bir kod \u00f6nericisinden aktif bir g\u00fcvenlik orta\u011f\u0131na d\u00f6n\u00fc\u015ft\u00fcrebilir. Vaka analizlerimizle g\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi, bu yakla\u015f\u0131m hem yeni \u00f6zellik eklerken hem de kritik hatalar\u0131 d\u00fczeltirken potansiyel riskleri ba\u015ftan ele alarak, daha sa\u011flam ve g\u00fcvenilir yaz\u0131l\u0131mlar ortaya \u00e7\u0131karmaktad\u0131r. Gelecekte, yapay zeka ajanlar\u0131 daha da ak\u0131llanacak, belki de projenin kod taban\u0131n\u0131 ve g\u00fcvenlik politikalar\u0131n\u0131 otomatik olarak analiz edip, size \u00f6zel dinamik prompt'lar \u00f6nerebileceklerdir. Ancak o zamana kadar, geli\u015ftiricilerin prompt m\u00fchendisli\u011fi becerilerini geli\u015ftirmeleri, bu ara\u00e7lardan en iyi \u015fekilde faydalanman\u0131n anahtar\u0131 olacakt\u0131r.<\/p>\n<p>Sonu\u00e7 olarak, yapay zeka destekli geli\u015ftirme, geli\u015ftiricilerin omuzlar\u0131ndaki y\u00fck\u00fc hafifletirken, onlara daha karma\u015f\u0131k sorunlara odaklanma ve daha stratejik kararlar alma f\u0131rsat\u0131 sunuyor. G\u00fcvenli\u011fin, kod yazma s\u00fcrecinin ayr\u0131lmaz bir par\u00e7as\u0131 olarak g\u00f6r\u00fclmesi ve yapay zeka ara\u00e7lar\u0131n\u0131n bu amaca y\u00f6nelik olarak kullan\u0131lmas\u0131, hem bireysel projeler hem de t\u00fcm yaz\u0131l\u0131m ekosistemi i\u00e7in daha ayd\u0131nl\u0131k bir gelecek vaat ediyor. \u0130nsan ve yapay zeka aras\u0131ndaki bu i\u015f birli\u011fi, sadece \u00fcretkenli\u011fi art\u0131rmakla kalmayacak, ayn\u0131 zamanda yaz\u0131l\u0131m\u0131n genel kalitesini ve g\u00fcvenilirli\u011fini de yeni zirvelere ta\u015f\u0131yacakt\u0131r. Her zaman hat\u0131rlay\u0131n: en iyi kod, sadece \u00e7al\u0131\u015fan kod de\u011fil, ayn\u0131 zamanda g\u00fcvenli, s\u00fcrd\u00fcr\u00fclebilir ve iyi tasarlanm\u0131\u015f koddur.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<div class=\"faq-section\">\n<div class=\"question\"><strong>S1: GitHub Copilot, bu prompt ile %100 hatas\u0131z ve g\u00fcvenli kod garanti eder mi?<\/strong><\/div>\n<div class=\"answer\"><strong>C1:<\/strong> Hay\u0131r, hi\u00e7bir yapay zeka arac\u0131 %100 hatas\u0131z veya g\u00fcvenlik a\u00e7\u0131\u011f\u0131 olmayan kod garantisi veremez. Bu prompt, Copilot'\u0131 en iyi uygulamalara ve belirtti\u011finiz g\u00fcvenlik kriterlerine uygun kod \u00fcretmeye y\u00f6nlendirir, ancak insan incelemesi, testler ve g\u00fcvenlik denetimleri hala kritik \u00f6neme sahiptir. Copilot bir yard\u0131mc\u0131d\u0131r, nihai karar verici veya denetleyici de\u011fildir.<\/div>\n<div class=\"question\"><strong>S2: Bu g\u00fcvenlik prompt'unu ne s\u0131kl\u0131kla g\u00fcncellemem gerekiyor?<\/strong><\/div>\n<div class=\"answer\"><strong>C2:<\/strong> Projenizin g\u00fcvenlik gereksinimleri, kullan\u0131lan teknolojiler veya sekt\u00f6r standartlar\u0131 de\u011fi\u015ftik\u00e7e prompt'unuzu g\u00fcncellemeniz \u00f6nemlidir. Yeni bulunan g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 veya projenize \u00f6zel yeni riskleri yans\u0131tacak \u015fekilde periyodik olarak (\u00f6rne\u011fin her b\u00fcy\u00fck s\u00fcr\u00fcmde veya ayl\u0131k olarak) g\u00f6zden ge\u00e7irmek faydal\u0131 olacakt\u0131r.<\/div>\n<div class=\"question\"><strong>S3: Bu tek prompt yakla\u015f\u0131m\u0131 t\u00fcm programlama dilleri ve \u00e7er\u00e7eveleri i\u00e7in ge\u00e7erli mi?<\/strong><\/div>\n<div class=\"answer\"><strong>C3:<\/strong> Evet, prompt'un temel mant\u0131\u011f\u0131 (ba\u011flam, hedef, g\u00fcvenlik\/kalite gereksinimleri) geneldir ve \u00e7o\u011fu programlama dili ve \u00e7er\u00e7evesi i\u00e7in uygulanabilir. Ancak, prompt'un i\u00e7indeki spesifik g\u00fcvenlik \u00f6nlemleri ve kod \u00f6rnekleri (\u00f6rn. SQL enjeksiyonu, XSS, bcrypt, JWT) kulland\u0131\u011f\u0131n\u0131z teknolojiye (Python\/Django, Java\/Spring, PHP\/Laravel vb.) g\u00f6re \u00f6zelle\u015ftirilmelidir.<\/div>\n<div class=\"question\"><strong>S4: Yapay zeka kullan\u0131rken insan kodu incelemesi hala gerekli mi?<\/strong><\/div>\n<div class=\"answer\"><strong>C4:<\/strong> Kesinlikle evet. Yapay zeka taraf\u0131ndan \u00fcretilen kod, bir ba\u015flang\u0131\u00e7 noktas\u0131 veya h\u0131zl\u0131 bir taslak g\u00f6revi g\u00f6r\u00fcr. G\u00fcvenlik, performans ve mimari uygunluk a\u00e7\u0131s\u0131ndan insan incelemesi, deneyimli geli\u015ftiricilerin uzmanl\u0131\u011f\u0131 ve ele\u015ftirel d\u00fc\u015f\u00fcnme yetene\u011fi vazge\u00e7ilmezdir. Code review s\u00fcre\u00e7leri, Copilot taraf\u0131ndan \u00fcretilen kod i\u00e7in de titizlikle uygulanmal\u0131d\u0131r.<\/div>\n<div class=\"question\"><strong>S5: Copilot verdi\u011fim g\u00fcvenlik direktiflerini g\u00f6z ard\u0131 ederse ne yapmal\u0131y\u0131m?<\/strong><\/div>\n<div class=\"answer\"><strong>C5:<\/strong> Bazen Copilot, prompt'unuzdaki baz\u0131 direktifleri g\u00f6z ard\u0131 edebilir veya yanl\u0131\u015f anlayabilir. Bu durumda:<\/p>\n<ol>\n<li>Prompt'unuzu daha a\u00e7\u0131k, daha spesifik ve daha basit ad\u0131mlara b\u00f6lerek yeniden form\u00fcle edin.<\/li>\n<li>Gerekirse, istenen g\u00fcvenlik \u00f6zelli\u011fine dair bir \u00f6rnek kod par\u00e7ac\u0131\u011f\u0131 sunarak Copilot'a rehberlik edin.<\/li>\n<li>\u0130teratif bir yakla\u015f\u0131m benimseyerek, k\u00fc\u00e7\u00fck ad\u0131mlarla istedi\u011finiz g\u00fcvenlik seviyesine ula\u015fmaya \u00e7al\u0131\u015f\u0131n.<\/li>\n<li>Copilot'\u0131n \u00e7\u0131kt\u0131s\u0131n\u0131 manuel olarak d\u00fczenleyin ve do\u011fru y\u00f6nde ilerlemesini sa\u011flamak i\u00e7in ek yorumlar veya kodlar ekleyin.<\/li>\n<\/ol><\/div>\n<\/p><\/div>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7leri hi\u00e7 olmad\u0131\u011f\u0131 kadar h\u0131zl\u0131. Bu h\u0131z, beraberinde yeni g\u00fcvenlik a\u00e7\u0131klar\u0131 ve kalitesiz kod risklerini&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1401],"tags":[],"class_list":{"0":"post-35660","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-git","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>GitHub Copilot ile G\u00fcvenli Kod De\u011fi\u015fiklikleri Nas\u0131l Yap\u0131l\u0131r?<\/title>\n<meta name=\"description\" content=\"Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7leri hi\u00e7 olmad\u0131\u011f\u0131 kadar h\u0131zl\u0131. Bu h\u0131z, beraberinde yeni g\u00fcvenlik a\u00e7\u0131klar\u0131 ve kalitesiz kod risklerini de getiriyor. GitHub Copilot gibi yapay zeka destekli ara\u00e7lar, geli\u015ftiricilere m\u00fcthi\u015f bir h\u0131z kazand\u0131rsa da, \u00fcretilen kodun g\u00fcvenli\u011fini ve kalitesini sa\u011flamak kritik bir zorunluluk haline gelmi\u015ftir. Peki, Copilot&#039;\u0131 kullanarak daha g\u00fcvenli ve sa\u011flam kod de\u011fi\u015fiklikleri yapman\u0131n tek ve etkili bir yolu var m\u0131? \u0130\u015fte bu makale, tek bir ak\u0131ll\u0131 prompt (istek) ile Copilot&#039;tan bu y\u00f6nde nas\u0131l faydalanabilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GitHub Copilot ile G\u00fcvenli Kod De\u011fi\u015fiklikleri Nas\u0131l Yap\u0131l\u0131r?\" \/>\n<meta property=\"og:description\" content=\"Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7leri hi\u00e7 olmad\u0131\u011f\u0131 kadar h\u0131zl\u0131. Bu h\u0131z, beraberinde yeni g\u00fcvenlik a\u00e7\u0131klar\u0131 ve kalitesiz kod risklerini de getiriyor. GitHub Copilot gibi yapay zeka destekli ara\u00e7lar, geli\u015ftiricilere m\u00fcthi\u015f bir h\u0131z kazand\u0131rsa da, \u00fcretilen kodun g\u00fcvenli\u011fini ve kalitesini sa\u011flamak kritik bir zorunluluk haline gelmi\u015ftir. Peki, Copilot&#039;\u0131 kullanarak daha g\u00fcvenli ve sa\u011flam kod de\u011fi\u015fiklikleri yapman\u0131n tek ve etkili bir yolu var m\u0131? \u0130\u015fte bu makale, tek bir ak\u0131ll\u0131 prompt (istek) ile Copilot&#039;tan bu y\u00f6nde nas\u0131l faydalanabilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-02T08:01:25+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"36 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"GitHub Copilot ile G\u00fcvenli Kod De\u011fi\u015fiklikleri Nas\u0131l Yap\u0131l\u0131r?\",\"datePublished\":\"2025-12-02T08:01:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/\"},\"wordCount\":4790,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Git\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/\",\"name\":\"GitHub Copilot ile G\u00fcvenli Kod De\u011fi\u015fiklikleri Nas\u0131l Yap\u0131l\u0131r?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-02T08:01:25+00:00\",\"description\":\"Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7leri hi\u00e7 olmad\u0131\u011f\u0131 kadar h\u0131zl\u0131. Bu h\u0131z, beraberinde yeni g\u00fcvenlik a\u00e7\u0131klar\u0131 ve kalitesiz kod risklerini de getiriyor. GitHub Copilot gibi yapay zeka destekli ara\u00e7lar, geli\u015ftiricilere m\u00fcthi\u015f bir h\u0131z kazand\u0131rsa da, \u00fcretilen kodun g\u00fcvenli\u011fini ve kalitesini sa\u011flamak kritik bir zorunluluk haline gelmi\u015ftir. Peki, Copilot'\u0131 kullanarak daha g\u00fcvenli ve sa\u011flam kod de\u011fi\u015fiklikleri yapman\u0131n tek ve etkili bir yolu var m\u0131? \u0130\u015fte bu makale, tek bir ak\u0131ll\u0131 prompt (istek) ile Copilot'tan bu y\u00f6nde nas\u0131l faydalanabilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GitHub Copilot ile G\u00fcvenli Kod De\u011fi\u015fiklikleri Nas\u0131l Yap\u0131l\u0131r?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"GitHub Copilot ile G\u00fcvenli Kod De\u011fi\u015fiklikleri Nas\u0131l Yap\u0131l\u0131r?","description":"Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7leri hi\u00e7 olmad\u0131\u011f\u0131 kadar h\u0131zl\u0131. Bu h\u0131z, beraberinde yeni g\u00fcvenlik a\u00e7\u0131klar\u0131 ve kalitesiz kod risklerini de getiriyor. GitHub Copilot gibi yapay zeka destekli ara\u00e7lar, geli\u015ftiricilere m\u00fcthi\u015f bir h\u0131z kazand\u0131rsa da, \u00fcretilen kodun g\u00fcvenli\u011fini ve kalitesini sa\u011flamak kritik bir zorunluluk haline gelmi\u015ftir. Peki, Copilot'\u0131 kullanarak daha g\u00fcvenli ve sa\u011flam kod de\u011fi\u015fiklikleri yapman\u0131n tek ve etkili bir yolu var m\u0131? \u0130\u015fte bu makale, tek bir ak\u0131ll\u0131 prompt (istek) ile Copilot'tan bu y\u00f6nde nas\u0131l faydalanabilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/","og_locale":"tr_TR","og_type":"article","og_title":"GitHub Copilot ile G\u00fcvenli Kod De\u011fi\u015fiklikleri Nas\u0131l Yap\u0131l\u0131r?","og_description":"Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7leri hi\u00e7 olmad\u0131\u011f\u0131 kadar h\u0131zl\u0131. Bu h\u0131z, beraberinde yeni g\u00fcvenlik a\u00e7\u0131klar\u0131 ve kalitesiz kod risklerini de getiriyor. GitHub Copilot gibi yapay zeka destekli ara\u00e7lar, geli\u015ftiricilere m\u00fcthi\u015f bir h\u0131z kazand\u0131rsa da, \u00fcretilen kodun g\u00fcvenli\u011fini ve kalitesini sa\u011flamak kritik bir zorunluluk haline gelmi\u015ftir. Peki, Copilot'\u0131 kullanarak daha g\u00fcvenli ve sa\u011flam kod de\u011fi\u015fiklikleri yapman\u0131n tek ve etkili bir yolu var m\u0131? \u0130\u015fte bu makale, tek bir ak\u0131ll\u0131 prompt (istek) ile Copilot'tan bu y\u00f6nde nas\u0131l faydalanabilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","og_url":"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-02T08:01:25+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"36 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"GitHub Copilot ile G\u00fcvenli Kod De\u011fi\u015fiklikleri Nas\u0131l Yap\u0131l\u0131r?","datePublished":"2025-12-02T08:01:25+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/"},"wordCount":4790,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Git"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/","url":"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/","name":"GitHub Copilot ile G\u00fcvenli Kod De\u011fi\u015fiklikleri Nas\u0131l Yap\u0131l\u0131r?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-02T08:01:25+00:00","description":"Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7leri hi\u00e7 olmad\u0131\u011f\u0131 kadar h\u0131zl\u0131. Bu h\u0131z, beraberinde yeni g\u00fcvenlik a\u00e7\u0131klar\u0131 ve kalitesiz kod risklerini de getiriyor. GitHub Copilot gibi yapay zeka destekli ara\u00e7lar, geli\u015ftiricilere m\u00fcthi\u015f bir h\u0131z kazand\u0131rsa da, \u00fcretilen kodun g\u00fcvenli\u011fini ve kalitesini sa\u011flamak kritik bir zorunluluk haline gelmi\u015ftir. Peki, Copilot'\u0131 kullanarak daha g\u00fcvenli ve sa\u011flam kod de\u011fi\u015fiklikleri yapman\u0131n tek ve etkili bir yolu var m\u0131? \u0130\u015fte bu makale, tek bir ak\u0131ll\u0131 prompt (istek) ile Copilot'tan bu y\u00f6nde nas\u0131l faydalanabilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131kl\u0131yor.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/github-copilot-ile-guvenli-kod-degisiklikleri-nasil-yapilir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"GitHub Copilot ile G\u00fcvenli Kod De\u011fi\u015fiklikleri Nas\u0131l Yap\u0131l\u0131r?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35660","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=35660"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35660\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35660"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35660"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35660"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}