﻿
{"id":360,"date":"2012-04-01T08:48:44","date_gmt":"2012-04-01T08:48:44","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=360"},"modified":"2012-04-19T21:18:50","modified_gmt":"2012-04-19T21:18:50","slug":"asp-nette-guvenlik-kodu-olusturma-2","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-nette-guvenlik-kodu-olusturma-2\/","title":{"rendered":"Asp.NET&#8217;te G\u00fcvenlik Kodu Olu\u015fturma"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>G\u00fcn\u00fcm\u00fcz sitelerinde, genellikle kay\u0131t esnas\u0131nda kullan\u0131c\u0131dan gerekli bilgileri almaktan ziyade, son olarak bir resim \u00fczerindeki az \u00e7ok okunur bi\u00e7imde olan karakterleri, sistem bizden istemektedir.E\u011fer do\u011fru bi\u00e7imde karakterleri girersek kay\u0131t i\u015flemi ba\u015far\u0131l\u0131 olacakt\u0131r.Yanl\u0131\u015f girersekte bize uyar\u0131 verecektir.Bu g\u00fcvenlik \u00f6nlemi, siyah \u015fapkal\u0131 hackerlar\u0131n kurban\u0131 olmaman\u0131z i\u00e7in al\u0131nm\u0131\u015f bir tak\u0131m y\u00f6ntemlerdir.\u00c7\u00fcnk\u00fc, kay\u0131t esnas\u0131nda bir ka\u00e7 dakikada veritaban\u0131n\u0131za 1.000.000.000 tane kay\u0131t yapabilir ve veritaban\u0131n\u0131z\u0131n boyutunu bir anda \u015fi\u015firebilirler.Ancak g\u00fcvenlik kodunu okutmak hackerlar\u0131n i\u015fini zorla\u015ft\u0131racakt\u0131r.<br \/>\n<!--more--> \u00d6ncelikle g\u00fcvenlik kodu nas\u0131l olu\u015fturulur buna de\u011finmeden \u00f6nce, ben a\u015fa\u011f\u0131daki tasar\u0131m\u0131 haz\u0131rl\u0131yorum.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/guvenlik1.jpg\"><img loading=\"lazy\" decoding=\"async\" title=\"guvenlik1\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/guvenlik1.jpg\" alt=\"\" width=\"366\" height=\"113\" \/><\/a>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi bir tasar\u0131m haz\u0131rlad\u0131m.\u015eunu izah etmek istiyorum.Olu\u015fturdu\u011fumuz resim, Image nesnesinin ImageUrl \u00f6zelli\u011fine verilecektir.Ancak ben iki kullan\u0131c\u0131 i\u00e7in iki resim, be\u015f kullan\u0131c\u0131 i\u00e7in be\u015f resim derken, bin kullan\u0131c\u0131 i\u00e7in bin resim olu\u015ftururum.Ve buda hosting alan\u0131m\u0131 \u00e7ok \u00e7abuk bir \u015fekilde \u015fi\u015firecektir.Hostingci bize k\u00fcf\u00fcr edecektir :).Her kullan\u0131c\u0131 i\u00e7in bir resim olu\u015fturmaktansa, bir .aspx sayfas\u0131n\u0131 Image nesnesinin ImageUrl \u00f6zelli\u011fine verip, o sayfay\u0131 sanki resimmi\u015f gibi g\u00f6stermek daha maliyetli olacakt\u0131r.Bu \u015fekilde, iki,\u00fc\u00e7,be\u015f,bin veya on bin ki\u015fiyede o .aspx sayfas\u0131 sayesinde, bir tane resim g\u00f6stermi\u015f olaca\u011f\u0131z.<\/p>\n<p>\u015eimdi bahsetti\u011fim .aspx sayfas\u0131n\u0131 olu\u015fturmadan \u00f6nce, g\u00fcvenlik kodunu \u00fcreten class\u0131m\u0131z\u0131 yazal\u0131m.Ben GuvenlikKoduUretici.cs ad\u0131nda bir s\u0131n\u0131f haz\u0131rl\u0131yorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n---GuvenlikKoduUretici.cs---\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Web;\r\nusing System.Threading;\r\nusing System.Drawing;\r\n\r\npublic class GuvenlikKoduUretici\r\n{\r\n    private int KarakterSayisi;\r\n    \/\/G\u00fcvenlik kodunda ka\u00e7 karakter bulunacaksa, bu field sayesinde belirleyece\u011fiz.\r\n    private string FontTipi;\r\n    \/\/G\u00fcvenlik kodundaki karakterlerin Fontunu bu field tutacak.\r\n    private float FontBoyutu;\r\n    \/\/Guvenlik kodundaki karakterlerin Font Size \u0131n\u0131 bu field tutacak.\r\n    private string OlusturulanString;\r\n    \/\/En son olu\u015fturulan karakterlerin metinsel halini bu field tutacakt\u0131r.\r\n\r\n    public string OlusturulanStringVer\r\n    {\r\n        get\r\n        {\r\n            return OlusturulanString;\r\n        }\r\n    }\r\n\r\n    public void GuvenlikKoduOzellikleri(int KarakterSayisi, string FontTipi, float FontBoyutu)\r\n    {\r\n        this.KarakterSayisi = KarakterSayisi;\r\n        this.FontTipi = FontTipi;\r\n        this.FontBoyutu = FontBoyutu;\r\n    }\r\n    \/\/Bu metod sayesinde g\u00fcvenlik kodunun \u00f6zelliklerini d\u0131\u015fardan set edece\u011fiz\r\n    private char KarakterUret()\r\n    {\r\n        Random rastgele = new Random();\r\n        char karakter = ' ';\r\n        bool kontrol = true;\r\n\r\n        while (kontrol)\r\n        {\r\n            int sayi = rastgele.Next(65, 123);\r\n            if (!(sayi &gt; 90 &amp;&amp; sayi &lt; 97))\r\n            {\r\n                karakter = (char)sayi;\r\n                kontrol = false;\r\n            }\r\n        }\r\n        return karakter;\r\n    }\r\n    \/*\r\n     Bu method sayesinde karakterler \u00fcretilecektir.\r\n     E\u011fer int de\u011ferler char tipine d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcrse , ASCII kod kar\u015f\u0131l\u0131\u011f\u0131na denk d\u00fc\u015fen karaktere ula\u015f\u0131l\u0131r.\r\n     ASCII kod aral\u0131\u011f\u0131 65 - 90 olanlar b\u00fcy\u00fck harfleri temsil ederken, 97 - 122 olanlar k\u00fc\u00e7\u00fck harfleri temsil eder.\r\n     *\/\r\n    private string KarakterDizisiOlustur()\r\n    {\r\n        string karakterdizisi = &quot;&quot;;\r\n        for (int i = 0; i &lt; this.KarakterSayisi; i++)\r\n        {\r\n            karakterdizisi += KarakterUret().ToString();\r\n            Thread.Sleep(10);\r\n            \/\/Thread.Sleep() metodu ise, bir i\u015flemi milisaniye cinsinden geciktirmeye yarar.\r\n            \/\/Burada karakter \u00fcretmeyi 10 ms. geciktirdik.\r\n            \/\/Thread s\u0131n\u0131f\u0131n\u0131 kullanabilmek i\u00e7in, System.Threading namespace ini using etmeniz gerekmektedir.\r\n        }\r\n        return karakterdizisi;\r\n    }\r\n    public Bitmap GuvenlikResmi()\r\n    {\r\n        string resmebasilacakifade = KarakterDizisiOlustur();\r\n        this.OlusturulanString = resmebasilacakifade;\r\n        \/\/Burada Graphics s\u0131n\u0131f\u0131n\u0131 kullanaca\u011f\u0131m\u0131z i\u00e7in System.Drawing namespace ini using etmelisiniz.\r\n        Bitmap b = new Bitmap(10, 10);\r\n        \/\/A\u015fa\u011f\u0131da Graphics tipinden grafik ismindeki referans\u0131m\u0131za Graphics.FromImage() metodunu ba\u011flarken, bizden Bitmap nesnesi istemektedir.\u0130\u015fte bu b ad\u0131ndaki Bitmap nesnesini bu sebepten dolay\u0131 olu\u015fturuyoruz.\r\n        Graphics taban = Graphics.FromImage(b);\r\n        \/\/Graphics s\u0131n\u0131f\u0131 sayesinde \u00e7izim i\u015flemlerini ger\u00e7ekle\u015ftirebiliyoruz.Graphics nesnesi olu\u015ftururken, constructor\u0131na bir tane Bitmap nesnesi istemektedir.Yukar\u0131daki b ismindeki Bitmap nesnesini bu y\u00fczden olu\u015fturduk.FromImage() metodu sayesinde grafik taban\u0131 olu\u015fturmu\u015f bulunuyoruz.Bitmap nesnesine verilen boyutlar, bu olu\u015fturulan grafi\u011fi etkileyecekmi diye sorarsan\u0131z, hay\u0131r etkilemeyecektir.Bitmap nesnesi sadece grafik olu\u015fturulmas\u0131 i\u00e7in formaliteden yarat\u0131lm\u0131\u015ft\u0131r.\r\n        \/\/\u015eimdi ise olu\u015fturdu\u011fumuz grafik taban\u0131na bir Bitmap nesnesiyle, resmini \u00e7izece\u011fimiz string ifadenin hangi \u00f6zelliklere g\u00f6re \u00e7izilece\u011fi bilgisini verelim.\r\n        Bitmap resim = new Bitmap((int)taban.MeasureString(resmebasilacakifade, new Font(this.FontTipi, this.FontBoyutu)).Width, (int)taban.MeasureString(resmebasilacakifade, new Font(this.FontTipi, this.FontBoyutu)).Height);\r\n        \/\/MeasureString() metoduyla, otomatik boyutlarda resim olu\u015fturuyoruz.resmebasilacakifade de\u011fi\u015fkeninin uzunlu\u011funa g\u00f6re boyut olu\u015fturulmaktad\u0131r.\r\n        \/\/\u015eimdi elimizdeki bu Bitmap nesnesini Graphics'e \u00e7izdirelim.\r\n        Graphics resimciz = Graphics.FromImage(resim);\r\n        \/\/resim Bitmap'i boyutlar\u0131nda bir resimciz nesnesi olusturuldu.\r\n        resimciz.DrawString(resmebasilacakifade, new Font(this.FontTipi, this.FontBoyutu), Brushes.GreenYellow, new PointF(0, 0));\r\n        \/\/resimciz nesnesi \u00fczerine resmebasilacakifade'sindeki ifadeyi,FontTipi ve FontBoyutu Fontlar\u0131nda,Brushes.GreenYellow f\u0131r\u00e7as\u0131yla, 0'a 0'dan ba\u015flayarak \u00e7iz.\r\n        return resim;\r\n    }\r\n}\r\n<\/pre>\n<p>Art\u0131k GuvenlikKoduUretici.cs s\u0131n\u0131f\u0131n\u0131 olu\u015fturduktan sonra, bu s\u0131n\u0131f\u0131n olu\u015fturaca\u011f\u0131 resmi yedirece\u011fimiz .aspx sayfas\u0131n\u0131da olu\u015ftural\u0131m.<br \/>\nGuvenlikResmi.aspx sayfas\u0131nda olu\u015fturuyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n---GuvenlikResmi.aspx---\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Web;\r\nusing System.Web.UI;\r\nusing System.Web.UI.WebControls;\r\nusing System.Drawing;\r\nusing System.Drawing.Imaging;\r\n\r\npublic partial class GuvenlikResmi : System.Web.UI.Page\r\n{\r\n    protected void Page_Load(object sender, EventArgs e)\r\n    {\r\n        \/\/Bu web sayfas\u0131 normal bir web sayfas\u0131 olmayacakt\u0131r.\r\n        \/\/\u0130\u00e7ine resim g\u00f6m\u00fclm\u00fc\u015f ve o resim format\u0131nda \u00e7\u0131kt\u0131 verebilen bir sayfa olacakt\u0131r.\r\n        \/\/Art\u0131k bir resim dosyas\u0131 gibi davranacakt\u0131r.\r\n        GuvenlikKoduUretici guvenlik = new GuvenlikKoduUretici();\r\n        guvenlik.GuvenlikKoduOzellikleri(5, &quot;Arial&quot;, 10f);\r\n        Bitmap resim = guvenlik.GuvenlikResmi();\r\n        Response.ContentType = &quot;image\/jpeg&quot;;\r\n        \/\/ContentType \u00f6zelli\u011fi, bu sayfan\u0131n asl\u0131nda ne oldu\u011funu belirten \u00f6zelliktir.Bu sayfan\u0131n streaminde(yap\u0131s\u0131nda) ne olaca\u011f\u0131n\u0131 bildirir.Default olarak bir .aspx sayfas\u0131n\u0131n ContentType'\u0131 text\/html dir.Dilersek xml'e, dilersek zip dosyas\u0131na \u00e7evirebiliriz.(text\/xml v.s.)\r\n        resim.Save(Response.OutputStream, ImageFormat.Jpeg);\r\n        \/\/Bu sayfan\u0131n OutputStream'\u0131na resim nesnesini Jpeg format\u0131nda g\u00f6m.\r\n    }\r\n}\r\n<\/pre>\n<p>Son olarak Image nesnemizin ImageUrl \u00f6zelli\u011fine GuvenlikResmi.aspx sayfas\u0131n\u0131 g\u00f6stermemiz yetecektir.<br \/>\nSayfalar\u0131m\u0131z\u0131 derleyip \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131z zaman, a\u015fa\u011f\u0131daki g\u00f6r\u00fcnt\u00fcy\u00fc elde etmemiz gerekiyor \ud83d\ude42<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/guvenlik2.jpg\"><img loading=\"lazy\" decoding=\"async\" title=\"guvenlik2\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/guvenlik2.jpg\" alt=\"\" width=\"316\" height=\"129\" \/><\/a><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi g\u00fcvenlik kodumuz olu\u015fmu\u015ftur.Sayfay\u0131 her yeniledi\u011finizde de\u011fi\u015fmesi gerekmektedir.Kod kontrol k\u0131sm\u0131n\u0131 da Session nesnelerini kullanarak\u00a0yapabiliriz.Tabi bu k\u0131sm\u0131da sizlere b\u0131rak\u0131yorum\u015eimdilik bu kadar.<\/p>\n<p>\u0130yi \u00e7al\u0131\u015fmalar..<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>G\u00fcn\u00fcm\u00fcz sitelerinde, genellikle kay\u0131t esnas\u0131nda kullan\u0131c\u0131dan gerekli bilgileri almaktan ziyade, son olarak bir resim \u00fczerindeki az \u00e7ok okunur bi\u00e7imde olan karakterleri, sistem bizden istemektedir.E\u011fer do\u011fru bi\u00e7imde karakterleri girersek kay\u0131t i\u015flemi ba\u015far\u0131l\u0131 olacakt\u0131r.Yanl\u0131\u015f girersekte bize&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[185,184],"class_list":["post-360","post","type-post","status-publish","format-standard","hentry","category-asp-net","tag-guvenlik","tag-system-drawing"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/360","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=360"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/360\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=360"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=360"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=360"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}