Spring Boot Uygulamasını Heroku üzerinde Deploy Etme

Bu yazımızda sizlere spring boot ile yazılmış basit bir Rest api'nin heroku üzerinde nasıl deploy edebileceğimizi göstereceğim.


Önce spring boot ile basit bir rest servis yazalım ve bunun doğru bir şekilde çalıştığını onaylayalım.






Buradan bir hesap oluşturuyoruz. Daha sonra buradan Heroku CLI'yı indirip kuruyoruz. Kurulum gerçekleştikten sonra login oluyoruz 

Login olduktan sonra projemizin root konumuna gidiyoruz ve heroku create komutu ile yeni bir app oluşturuyoruz.



https://calm-bayou-73911.herokuapp.com/ default olarak yüklendi.


Şimdi de projemizi git'e atıp commit edelim. Daha sonra uygulamamızı yaratırken oluşturulan "https://git.heroku.com/calm-bayou-73911.git'i" projemize bağlıyoruz. Github üzerinden boş bir repository oluşturduğunuzu düşünün ve localde'ki dosyalarınızı oluşturduğunuz uzak repoya göndermek istiyorsunuz(Github). Aynı işlem. Heroku bizim için herşeyi halletti. Git ile ilgili daha fazla bilgi almak isterseniz buradaki yazımı inceleyebilirsiniz.





Görev tamamlandı :). Bir sonraki yazıda görüşmek üzere.. İyi kodlamalar...











Birleştirmeli Sıralama (Merge Sort) Nedir ?

Birleştirme sıralama(Merge sort) algoritması adından da anlaşılacağı üzere bir sıralama algoritmasıdır. O(n log(n)) karmaşıklığına sahiptir. Girdi listesini en küçük hale gelene kadar ikili parçalara ayırır ve bu parçaları kendi aralarında sıralayarak birleştirir ve nihayetinde sıralanmış çıktı elde edilir.


Merge sort animation.gif
Wikipedia

Elimizde böyle bir liste olsun ve bu listeyi sıralamaya çalışıyor olalım.

  | 38 | 27 | 43 | 3 | 9 | 82 | 10 | 

İlk açamada listemizi 2'ye bölüyoruz. Tabi burada listemizdeki eleman sayısı tek olduğundan tam olarak bölemiyoruz.

                                                           | 38 | 27 | 43 | 3 |            | 9 | 82 | 10 | 

İşlemimizi karşılaştırabileceğimiz 2 sayı kalana kadar devam ettiriyoruz.

                                                      | 38 | 27 |         | 43 | 3 |         | 9 | 82 |        | 10 |  

Evet şimdi sayılarımızı sıralayarak birleştirebiliriz. 

                                                      | 27 | 38 |          | 3 | 43 |        | 9 | 82 |        | 10 | 

                                                          | 3 | 27 | 38 | 43 |               | 9 | 10 | 82 | 

                                                                      | 3 | 9 | 10 | 27 | 38 | 43 | 82 |




Mantığını anladığımıza göre java ile nasıl kodlayabileceğimize bakabiliriz.






Burada sort, doSort ve merge adında 3 fonksiyon mevcut. doSort recursive olarak çalışıyor. Main fonksiyonunda sort fonksiyonuna parametre olarak gönderilen dizinin boyutunda boş bir dizi oluşturuluyor(tmp). Sonrasın da parametler doSort fonksiyonuna gönderiliyor. Orada bölünen dizi merge fonksiyonunda sıralanarak birleştiriliyor. Kodu satır satır açıklamam epeyce bir zaman alır. Bunun yerine kod parçasını alıp debug etmenizi öneririm. Bir sonraki yazıda görüşmek üzere. İyi çalışmalar.

Ekleme Sıralaması (Insertion Sort) Nedir ?

Ekleme sıralaması (Insertion Sort) basit bir sıralama algoritmasıdır. Bu algoritmayı günlük hayatta oyun kartlarını elimizde sıralarken kullanıyoruz. Ekleme sıralamasının çok elemanlı listelerde kullanımı facia ile sonuçlanabilir. Büyük listeleri sıralarken genellikle quick, merge veya heap sort gibi algoritmalardan yararlanırız. Insertion sort küçük boyutlu listelerde(ortalama 30 ve altı) tercih ediliyor. Çünkü performansı O(n ^ 2)'dir. Bu demek oluyor ki listedeki veri miktarı arttıkça çalışma süresi n ile doğru orantılı olarak artacaktır. Java 12'de Arrays sınıfının altında hazır gelen sort fonksiyonu, Vladimir Yaroslavskiy, Jon Bentley, ve Joshua Bloch'un uyguladığı (implement ettiği) Quicksort algoritmasını kullanır. Bu algoritmanın performansı ise O(n log(n)) dir. Bu algoritmayı büyük listelerde(örneğin 10 milyon kişinin puanı)  gönül rahatlığı ile kullanılabilir.

Kaynak


Kaynak
Elimizde 8 elemanlı bir dizi var. Şekilde de gördüğümüz üzere 2.elemandan başlıyoruz ve önceki elemanlar ile karşılaştırıp sayının yeni yerini belirliyoruz. Örneğin ilk aşamada 3 ile 4'ü karşılaştırdık ve 3 < 4 olduğundan yerlerini değiştirdik. 3. elemandan devam ediyoruz. Bakıyoruz ki 2 < 4 o halde karşılaştırmaya devam ediyoruz ve 2 < 3 olduğundan ve karşılaştıracak herhangi bir eleman kalmadığından 2'nin yeni yeri belirlenmiş oluyor. Algoritmamız çalışma mantığını kavradığımıza göre Java'da nasıl uygulayacağımıza bakalım. 
Kaynak

Burada T[] (Generic, neden kullanıldığını bilmiyorsanız buraya) dönüş tipi olan sort adında bir fonksiyon ve yardımcı fonksiyonların bulunduğun bir SortUtils sınıfımız mevcut. Burada dizimizi ekrana basacak print adında bir fonksiyon ve iki değeri karşılaştırıp sonucu boolean döndürecek less adlı bir fonksiyonumuz mevcut. Son olarak fonksiyonumuzun test edildiği main fonksiyonumuz var. Basit bir unit test yazmak daha iyi olacaktır. Sort fonksiyonunda parametre olarak alınan dizimizin boyutu kadar dönen bir for döngümüz var. Döngümüz 1'den başlıyor çünkü yukarıda belirttiğimiz gibi önceki sayılar ile kıyaslayacağız. Yani 1-0, 2-1-0, 3-2-1-0 diye devam edecek. Daha sonra bir key değeri belirliyoruz ve ikinci index'imizi içine atıyoruz(array[1]). Sonrasında bir i değeri belirliyoruz ve j değerimizin bir önceki değierini içine atıyoruz.(0 => array[0] için). i değerimizin 0>= olduğu ve key(array[1]) ile array[0] less fonksiyonuna parametre olarak yolladığımız bir while döngüsüne sokuyoruz. Eğer şart sağlanırsa yani 3<4 ise döngünün içindeki işlemler ile 4<=>3 yer değiştiriyor. Mantık bu şekilde devam ediyor. Herhangi bir sorunuz olursa yorum olarak belirtebilirsiniz. İyi çalışmalar.




Bug Bounty nedir ? Nasıl çalışabilirim ?

Bu yazımda hobi olarak ilgilendiğim bug bounty'i anlatmaya çalışacağım. Daha sonra bu konu üzerinde kendimizi geliştirmek için neler yapabileceğimize bakacağız.



Bir şirketinizin olduğunu varsayın. Ürünlerinizin ve kullanıcılarınızın güvenliği hakkında tedirginsiniz. Bir bug bounty programı başlatıyorsunuz ve diyorsunuz ki, ürünlerimizde herhangi bir açık tespit eden kişileri ödüllendiriyoruz. Ödüle dahil olan ürün ve açık türlerini belirtiyorsunuz. Daha sonra hacker'lar sistemlerinizi taramaya başlıyorlar ve bir açık bulduklarında sizlere bir rapor ile bildiriyorlar. Verilen raporun seviyesi ve doğruluğu onaylandıktan sonra açığı bulan kişi şirket tarafından ödüllendiriliyor. Bu ödül şirket tarafından belirleniyor ve açığın oluşturacağı tehlike büyüdükçe ödülün miktarı da aynı seviyede büyüyor. Tabi bazı şirketlerin programları ödül vermiyor onun yerine sizi hall of fame diye adlandırdıkları listelerine dahil ediyorlar. Bu olay örgüsünün gerçekleştiği ortamlar mevcut. Örneğin en çok kullanılan hackerone ve bugcrowd gibi. Yine bu platformlar dışında bulunan şirketlerin kendi kendilerine açtıkları bug bounty programları da mevcut. Hackerone üzerinde bir programın ve raporun görüntüsü aşağıdaki gibidir.





       Peki bu işe nasıl başlanır. Öncelikle acemi olduğumu belirtmek isterim. Bilgisayar mühendiliği mezunu olduğum için temel konulara hakimim. Ben bu işe bu kitabı  okuyarak başladım. Daha sonra web güvenliği alanına yöneldim ve buradaki açıklar üzerine yoğunlaşmaya başladım. Youtube üzerinden yayınlanan bu konferansları takip etmeye çalıştım ve daha sonra yavaştan açık aramaya başladım. Bugünlerde medium.com üzerinden okuyabildiğim kadar blog yazısı okuyorum. Bu alışkanlığı yeni yeni kazanıyorum. Her blog yazısında farklı taktikler öğreniyorum. Blogları ingilizce olarak okuyor bilmediğim kalıpları ve kelimeleri not alıyorum. Böylece hem dilimi geliştiriyorum hem de bir sürü şey öğreniyorum. Eğer ingilizce bilmiyorsanız(okuduğunuz ve duyduğunuzu anlamanız yeterli) en az 1-2 senenizi ingilizceye ayırın derim. Neyse devam edelim.

    Bilgi toplama (Recon) bu işin kilit noktalarındandır. Örneğin bilgi toplarken gözüme kibana.xyz.com diye bir subdomain çıktı yapacağım ilk iş önce kibana'nın ne iş yaptığını, nasıl çalıştığını öğrenmek daha sonra buradan belgelenmiş açıklarına göz atamak olacaktır.


         Son aşama ise bilgi manyaklığı. Alanınızda yazılmış, gördüğünüz her blog yazısını okuyun, videolar izleyin özellikle de konferansları şiddetle tavsiye ederim çünkü konferansı veren kişi o işin ustasıdır.(Çok büyük ihtimal) Not alın, uygulayın, tekrar edin, deneyin ve başkalarına öğretin ki bilginiz kalıcı olsun.


       Eğer bu alanda herhangi bir bilginiz yoksa ilk önce ağ teknolojilerine hakim olmanız şart. Her nerede çalışıyor olursanız olun çalışma ortamınızı çok iyi tanımanız gerekir. Örneğin web siteleri üzerinde açık arıyorsanız bu alanda kullanılan programlama dillerini(php, javascript, jsp, aspnet, django vb.) çok iyi tanımanız gerekir. Bu dillerin hangi yanlış kullanımda hangi güvenlik açığına neden olacağını bilmeniz sizi bir adım öne atacaktır. Daha sonra işinizde daha hızlı olmak için çok iyi seviyede linux(özellikle shell scripting) bilginizin olmasını tavsiye ederim. Örneğin elinizde 3000 tane subdomain var ve bunların arasından ayakta olanları (isteğe olumlu yanıt veren, açık aranacak potansiyele mevcut) tespit etmek istiyorsunuz. Bunu manuel olarak yaparsanız en azından 1-2 saatiniz gidecek, otomatik olarak yaparsanız (istekte(request) bulunup cevabı(response) ekran görüntüsü alan bir araç gibi örn) çok daha hızlı hareket edebilirsiniz. Sosyal medyayı kullanmayı öğrenin. Örneğin twitter'da bu işi çok çok iyi yapan insanlar var onları takip edin. Etraf harika kaynaklar ile dolu, açın okuyun. Direkt açık aramaya başlamayın (ilk heyecan ile normaldir fakat sabır şart). Bu adımları uyguladıktan sonra açık arayarak güzel paralar kazanabilirsiniz fakat öncelikli hedefinizin para olmamasını öneririm. Sizlere faydası dokunabilecek kişi ve platform linklerini aşağıya bırakıyorum. Bu listeyi sürekli güncelleyeceğim. 

Kullandığım araçlar: 

Tomnomnom'un neredeyse her aracı kullanıyorum. Eğer sizlerinde bu tarz favori araçlarınız varsa ve imkanınız varsa lütfen yazılımcılara destek(sponsor) olalım. 


Full manuel arıyorum..
-------------------------
Daha fazla tool için:


İyi çalışmalar. Herhangi bir sorunuz olursa: https://twitter.com/gkhck_






KAYNAKLAR

https://hackerone.com/hacktivity

https://www.owasp.org/index.php/Category:OWASP_Application_Security_Verification_Standard_P
roject

https://regilero.github.io/

https://portswigger.net/blog

https://www.youtube.com/user/DEFCONConference

https://github.com/OWASP/Top10

https://www.cvedetails.com/

https://medium.com/bugbountywriteup

https://medium.com/hackernoon

https://medium.com/@th3g3nt3l

https://github.com/tomnomnom

https://github.com/s0md3v

https://github.com/danielmiessler

https://github.com/codingo

https://twitter.com/albinowax

https://twitter.com/codecancare

https://twitter.com/ngalongc

https://twitter.com/CVEnew

https://twitter.com/ExploitDB

https://twitter.com/NahamSec

https://twitter.com/HackRead

https://twitter.com/securitytrails

https://twitter.com/GoSecure_Inc

https://pentester.land/list-of-bug-bounty-writeups.html

https://twitter.com/samwcyo


Spring Boot Uygulamasını Heroku üzerinde Deploy Etme

Bu yazımızda sizlere spring boot ile yazılmış basit bir Rest api'nin heroku üzerinde nasıl deploy edebileceğimizi göstereceğim. Önce ...