Programlama | CodeWK https://codewk.com Sınırsız bilgi ve çok eğlenceli ! Tue, 24 Dec 2019 08:32:49 +0000 tr hourly 1 https://wordpress.org/?v=6.1.7 https://codewk.com/wp-content/uploads/2019/02/cropped-favicon-32x32.jpg Programlama | CodeWK https://codewk.com 32 32 Kodlama Öğrenirken Aynı Zamanda Para Kazanacağınız Siteler https://codewk.com/kodlama-ogrenirken-ayni-zamanda-para-kazanacaginiz-siteler/ https://codewk.com/kodlama-ogrenirken-ayni-zamanda-para-kazanacaginiz-siteler/#respond Mon, 23 Dec 2019 07:53:53 +0000 https://codewk.com/?p=2364 Hem kodlama becerilerinizi geliştirecek hem de para kazanmanızı sağlayacak en iyi siteler

Kodlamayı seviyorsanız ya da merakınız varsa sizin için sayısız çevrimiçi kaynak mevcut. Kaynaklar sayısız olsa da, çoğu yeni başlayanların unuttuğu şey, pratik yapma ihtiyacıdır. Kodlamanın nasıl yapıldığını öğrenmek kritik bir ilk adımdır, ancak kodlamanın pratiğe dökülmesi de bir o kadar önemli bir adımdır. Pratik yapmak, kodlamayı yaptığınız dilde iyi olmaktan çok daha önemlidir. Bu yazıda bu amaç için tasarlanmış birkaç siteyi sizlerle paylaşacağız.

TopCoder

Kodlama pratiği denilince ilk akla gelen sitelerden biridir. Oldukça fazla üyeye sahip olan TopCoder, Size günlük ve haftalık kodlama rekabetleri verir.

HackerEarth

Kodlama becerilerinizi geliştirmek için önerilen bir diğer web sitesi HackerEarth. Kuruluşların ihtiyaçlarına en uygun yazılım geliştiriciyi bulmalarını sağlamak amacıyla geliştirici adayların teknik ve mantıksal becerilerinin otomatik olarak değerlendirilmesi için bir platform sağlar. Bunun için challengelar yapar. Yapılan challengelara 1 hafta önceden kayıt olmanız gerekiyor. Ayrıca tek başınıza girdiğiniz bazı görevler mevcut.

CoderByte

Yeni başlayanlar ve orta düzeydeki geliştiriciler için tasarlanan bu site 2012 yılında Daniel Borowski tarafından kurulmasından bu yana, web sitesi iyi ve özel bir geliştirici topluluğuna sahip oldu.

Project Euler

Web sitesi kodlama becerilerinizi arttırmanıza yardımcı olacak olan bu site yaklaşık 100.000 özel geliştirici topluluğuyla bu listedeki en popüler kodlama sitelerinden biridir. Her hafta kodlama ile ilgili eleştirel düşünme ve problem çözmeyi içeren, yeni bir zorlukla karşılaşıyorsunuz.

CodeChef

Geliştirici topluluğuna meydan okuyan ve onları meşgul etmek amacıyla kurulan bu site, geliştiricilerin uygulama yapabilecekleri, rekabet edecekleri ve geliştirebilecekleri bir platform sunuyor. Burada her hafta yeni bir kodlama yarışmasına katılabilirsiniz.

]]>
https://codewk.com/kodlama-ogrenirken-ayni-zamanda-para-kazanacaginiz-siteler/feed/ 0
10 Soruda Sızma Testleri (Pentesting) Nedir? https://codewk.com/10-soruda-sizma-testleri-pentesting-nedir/ https://codewk.com/10-soruda-sizma-testleri-pentesting-nedir/#respond Thu, 04 Apr 2019 11:37:29 +0000 https://codewk.com/?p=1707 Sızma Testi Nedir? Penetrasyon testleri günümüz bilgi güvenliği dünyasının en popüler konularından biridir. BGA tarafından verilen güvenlik eğitimlerinde, sızma testi hakkında oldukça fazla soru ile karşılaşılmaktadır. Bu sorulara referans cevaplar olması adına “10 Soruda Sızma Testi” konulu yazıyı hazırlamış bulunmaktayız. Pentest nedir? Neden yaptırmalıyım? Kime nasıl yaptırmalıyım? gibi sorulara cevap arıyoruz. Sizin de bu konu hakkında fikirleriniz varsa yorumlarınızla zenginleştirebilirsiniz.

Öncelikle “pentest” kavramından ne anladığınızı ve ne beklediğinizi bilmek size bu süreçte yardımcı olacaktır. Zira ne olduğunu bilmediğiniz bir servisi alarak sonradan bu muydu yani? Bu kadar parayı bu iş için mi verdim ya da bu sistemlere neden baktırmadım gibi sorular sormak durumunda kalabilirsiniz. Yazı boyunca pentest, penetrasyon testi, sızma testi şeklinde farklı ifadeler kullanılmıştır.

1- Sızma testi (Pentest) nedir? Vulnerability Assessment ve Risk Assesment kavramlarından farkı nedir?

Pentest Tanımı:

Belirlenen bilişim sistemlerindeki mantık hataları ve zafiyetleri tespit ederek, söz konusu güvenlik açıklıklarının kötü niyetli kişiler tarafından istismar edilmesini önlemek ve sistemleri daha güvenli hale getirmek maksadıyla, “yetkili” kişiler tarafından ve “yasal” olarak gerçekleştirilen güvenlik testleridir. Pentest çalışmalarındaki asıl amaç, zafiyeti tespit etmekten öte ilgili zafiyeti sisteme zarar vermeyecek şekilde istismar etmek ve yetkili erişimler elde etmektir.

Pentest Çeşitleri:

Pentest hedefe, vektöre, simüle edilecek saldırıya ve sisteme bağlı olarak üçe ayrılır.

  • İç Ağ (Internal) Sızma Testi: Bu sızma testi çeşidinde ilgili kurumun içeriye açık sistemleri üzerinden hangi verilere ve/veya sistemlere erişilebileceği sorusuna cevap aranmaktadır.
  • Dış Ağ (External) Sızma Testi: Bu sızma testi çeşidinde ilgili kurumun dışarıya açık sistemleri üzerinden hangi verilere ve/veya iç sistemlere erişilebileceği sorusuna cevap aranmaktadır.
  • Web Uygulama Sızma Testi: Dış Ağ Sızma Testleri ile aynı soruya cevap aranmaktadır ancak odak noktamız web uygulamalarıdır.

Pentest Yöntemleri:

Temel olarak kabul görmüş üç yöntem vardır:

  • Black Box: Bu yaklaşımda, başlangıçta güvenlik testi yapılacak sistemle ilgili bir bilgi yoktur. Tamamen bilinmeyen bir sistem ile ilgili bilgi toplanacak ve testler yapılacaktır. Bu yöntemde test ekibinin sistem ile ilgili bilgi düzeyi hiç olmadığından, yanlışlıkla sisteme zarar verme ihtimalleri de yüksektir. Bilgi toplama safhası oldukça zaman alır. Süre bakımından en uzun süren yaklaşım tarzıdır.
  • Gray Box: Bu yaklaşımda, sistem ile ilgili bilgiler mevcuttur. Örneğin; IP adres listesi, sunucu sistem ile ilgili versiyon bilgisi vb. Bilgiler güvenlik testi yapacak ekibe önceden sağlanır. Black Box yaklaşımına göre daha kısa zaman alır. Kontrolü ve testi istenen IP adresleri belli olduğundan sistemin, istem dışı zarar görme ihtimali de azalmış olur.
  • White Box: Beyaz kutu olarak ifade edilen bu yaklaşımda, güvenlik testi ekibi, sistemin kendisi ve arka planda çalışan ilave teknolojiler hakkında tam bilgi sahibidir. Black Box tekniğine göre kurum ve firmaya daha büyük fayda sağlar. Hata ve zafiyetleri bulmak kolaylaşacağından bunlara tedbir alınma süresi de azalacaktır. Sistemin zarar görme riski çok azdır ve maliyet olarak da en az maliyetli olandır.

Vulnerability Assessment (Zafiyet/Açıklık Tarama):

Zafiyet taraması bir sistemdeki muhtemel tüm açıklıkların belirlenmesine yönelik tasarlanmış bir testtir. Bu yöntem için genellikle otomatize araçlar (Nessus, Nmap, Qualys vb) kullanılır. Zafiyet taramasında asıl amaç taranan sistemin anlık olarak genel güvenlik görüntüsünü almaktır. Muhtemel tüm güvenlik tehditlerine karşı bizi uyaran bu yöntem sonucu çıkan tüm bulgular ciddi bir tehdidi göstermeyebilir. Ancak bu da ciddiye alınmaması gerektiğini göstermez. Bizim için önemli olan çıkan bulgulardan hangilerinin sistemimiz için gerçek bir tehdit oluşturduğuna karar vermektir.

Bu yöntemde denetlenen diğer şey ise uyumluluk süreçleridir. Firmaların HIPAA, PCI, SOX vb. gibi dünyaca kabul edilmiş birçok uyumluluk standartlarına göre durumunu da inceler.

Risk Assessment:

Risk Assessment  kavramı tamamen farklı bir kavram olup Pentest ve Vulnerability Assessment kavramlarını kapsar. Zaman zaman “Technical Risk Assessment” tanımı kullanılarak “Vulnerability Assessment” kavramı kastedilmektedir.

2- Neden sızma testi yaptırmalıyız?

Sahip olduğunuz bilişim sistemlerindeki güvenlik zafiyetlerinin üçüncü bir göz tarafından kontrol edilmesi ve raporlanması proaktif güvenliğin ilk adımlarındandır. Çünkü siz ne kadar güvenliğe dikkat ederseniz edin saldırganların, sistemi istismar etmek için kullanacağı tekniklerin sınırı yoktur.

Hayal gücü ve bilgi seviyelerine göre ihtimaller değişmektedir. Bir şeylerin gözünüzden kaçma ihtimali vardır. Bu sebeplerden dolayı hackerlara yem olmadan kendi güvenliğinizi Beyaz şapkalı hackerlara test ettirmeniz yararınıza olacaktır. Ek olarak PCI, HIPAA gibi standartlar da Pentest yaptırmayı zorunlu kılmaktadır.

3- Sızma testi projesinin planı nasıl olmalıdır?

Yaptırılacak sızma testi çalışmasından olabildiğince çok verim alabilmek için her işte olduğu gibi burada da plan yapılması gerekmektedir. Pentest planınızı en azından aşağıdaki soruları cevaplayarak hazırlamanız gerçekleştirilecek testten üst düzeyde verim almanızı sağlayacaktır.

  • Sızma Testi’nin kapsamı ne olacak? (White Box, Gray Box, Black Box)
  • Ne çeşit bir sızma testi istiyorum? (Internal Pentest, External Pentest, Web Application Pentest)
  • Testleri kime yaptıracağım?
  • Ne kadar sıklıkla yaptıracağım?
  • Riskli sistem ve servisler kapsam dışı olmalı mı yoksa riski kabul edip sonucunu görmek ister miyim?
  • Pentest kapsamında DDOS testleri de gerçekleştirilecek mi?

4- Pentest firması seçimi konusunda nelere dikkat etmeliyim?

Pentest yaptıracağınız firmaya ne kadar güvenirseniz güvenin – aranızda muhakkak imzalı ve maddeleri açık bir NDA olmalı – siz yine de işinizi garantiye alma açısından firmanın yapacağı tüm işlemleri loglamanız yararınıza olacaktır. Peki bunu nasıl yaparsınız? Firmanın pentest yapacağı IP adres bilgilerini isteyerek bu IP adreslerinden gelecek tüm trafiği Snort, Tcpdump vb. trafik kaydı gerçekleştirebilen bir yazılım kullanarak loglayabilirsiniz. Özellikle web trafiğini -ki en kritik bilgiler burada çıkacaktır. Snort ile çok rahatlıkla sonradan incelendiğinde anlaşılacak şekilde trafik kaydettirilebilir. Bunun dışında dikkat etmeniz gereken konular şunlardır;

  • Firmada test yapacak çalışanların CV’lerini isteyin.
  • Varsa testi yapacak çalışanların konu ile ilgili teknik sertifikasyonlara (CEH, OSCP vb.) sahip olmasını tercih edin.
  • Testi yapacak çalışanların ilgili firmanın elemanı olmasına dikkat edin.
  • Firmanın daha önceki referansları ile iletişime geçerek bunlardan birkaçına memnuniyetlerini sorun.
  • Mümkünse firma seçimi öncesinde teknik kapasiteyi belirlemek için tuzak sistemler kurarak firmaların bu sistemlere saldırması ve sizin de bildiğiniz açıklığı bulmalarını isteyin.
  • Firmadan daha önce yaptığı testlerle ilgili örnek raporlar isteyin. Örnek bir sızma testi raporuna bu adresten ulaşabilirsiniz. https://www.slideshare.net/bgasecurity/szma-testleri-sonuc-raporu
  • Testlerin belirli IP adreslerinden yapılmasını ve bu IP adreslerinin size bildirilmesini talep edin.
  • Firmaya test için kullandıkları standartları sorun.
  • Firmanın test raporunda kullandığı tüm araçları da yazmasını isteyin.
  • Pentest teklifinin diğerlerine göre çok düşük olmamasına dikkat edin.
  • Sızma testi işi firmanın özel işi mi yoksa öylesine yaptığı bir iş mi? Bu sorgu size firmanın konu hakkında yetkinliğine dair ipuçları verecektir.

5- Pentest yapan firmadan sonuç olarak neler beklemeliyim?

  • Yöneticilere ve teknik çalışanlara özel iki farklı rapor
  • Raporların okunabilir ve anlaşılır olması
  • Testler esnasında keşfedilen kritik seviye güvenlik açıklıklarının anında bildirilmesi
  • Pentest raporunun şifreli bir şekilde iletilmesi
  • Keşfedilen güvenlik açıklarının nasıl kapatılacağı konusunda çözüm önerilerinin sunulması

6- Pentest sonrası nasıl bir yol izlemeliyim?

Pentest yaptırmak ne kadar önemliyse, sonuçlarını değerlendirip aksiyon almak çok daha önemlidir. Maalesef ki yaygın olarak yapılan yanlış sadece Pentest yapıp/yaptırıp raporu incelemek ve çok acil açıkları kapatmak şeklinde oluyor. Pentest sonrası açıklıkların kapatılmaması ve bir sonraki pentest çalışmasında aynı açıklıkların tekrar çıkması sıklıkla karşılaşılan bir durumdur. Gerçekleştirilen çalışmanın katma değerinin yüksek olması için en azından aşağıdaki maddelerin uygulanması önerilmektedir:

  • Pentest raporlarının üst yönetimle paylaşılıp yönetim desteğinin alınması
  • Sonuçlarının basit açıklıklar olarak değil, bir risk haritası kapsamında yönetime sunulması (bu açıklık hackerlar tarafından değerlendirilirse şu kadar kaybımız olur vb çıkarımlarda bulunularak)
  • Raporu detaylıca inceleyip her bir açıklığın kimin ilgi alanına girdiğinin belirlenmesi
  • Sistem yöneticileri ve yazılım geliştiricilerle toplantı gerçekleştirilip sonuçların paylaşılması.
  • Açıklıkların kapatılmasının takibi.
  • Bir sonraki pentestin tarihinin belirlenmesi

7- Türkiye’de Pentest yapan hangi firmalar var?

Türkiye’ de bu alanda sektör hızla gelişmektedir. Ayrıca kurumsal firmaların yanında kişisel olarak sızma testi yapan kişiler de bulunmaktadır. Ancak bu konuda Pentest yaptıracağınız kişiyi net olarak tanımıyorsanız, kişi yerine bir firma tercih etmeniz güvenliğiniz açısından daha sağlıklı olacaktır.

8- Pentest konusunda kendimi geliştirmek için izlemem gereken yol haritası nasıl olmalıdır?

Pentest konusunda kendinizi geliştirmek için öncelikle bu alana meraklı bir yapınızın olması gerekmektedir. İçinizde bilişim konularına karşı ciddi merak hissi ve sistemleri bozmaktan korkmadan kurcalayan bir düşünce yapınızın olması yolun başında sizi ön sıraya taşıyacaktır. Aksi halde işiniz biraz zor demektir. Çünkü “Pentester” olmak demek başkalarının düşünemediğini düşünmek, yapamadığını yapmak ve farklı olmak demektir.

Bu işin en kolay öğrenimi bireysel çalışmalar, kendi kendinize deneyerek öğrenmeye çalışmak, yanılmak sonra tekrar yanılmak ve doğrusunu öğrenmektir. Eğitimler bu konuda destekçi olabilir. Sizin 5-6 ayda katedeceğiniz yolu bir iki haftada size aktarabilir ama hiçbir zaman sizi tam anlamıyla yetiştirmez, “sadece” yol gösterici olur. Pentest konularının konuşulduğu güvenlik listelerine üyelik de sizi hazır bilgi kaynaklarına doğrudan ulaştıracak bir yöntemdir ve gündemi takip etmenizi sağlar.

Örnek; https://codewk.com

Bunun yanında Linux işletim sisteminin kullanımı hakkında tecrübe ve temel ağ güvenliği konularında bilgi sahibi olmak, Pentest konusunda sizi 1 adım öne çıkaracaktır. Bu işi ciddi anlamda yapmak istiyorsanız bu iki konuda ne kadar bilgi ve tecrübe sahibi olursanız rakiplerinize karşı o kadar fark atabilirsiniz demektir.

9- Pentest için hangi yazılımlar kullanılır?

Açık kod ve ticari yazılımlar olmak üzere iki çeşit kullanılır.

Açık Kod Pentest Yazılımları:

  • Nmap
  • Nessus
  • Metasploit
  • Inguma
  • Hping
  • Webscarab
  • John the Ripper
  • W3af

…bunlardan bazılarıdır. Açık kodlu olarak bilinen çoğu Pentest yazılımı Kali Linux dağıtımı ile birlikte kurulu olarak gelmektedir.

Ticari Pentest Yazılımları:

  • Immunity Canvas
  • Core Impact
  • HP Webinspect
  • Saint Ssecurity Scanner

Bu araçların yanında araçlar kadar önemli olan “Pentest Metodolojileri” vardır. Bunların da araçlar kadar iyi bilinmesi ve kullanılması gerekir. Bunlar;

  • OWASP Guide
  • NIST
  • ISSAF
  • OSTTM

10- Pentest konusunda hangi eğitimler vardır?

BGA Security Bilgi Güvenliği Akademisi Güncel Eğitim Takvimi sayfamız üzerinden güncel eğitimleri inceleyebilirsiniz.  Siber Güvenlik Eğitim Takvimi: https://www.bgasecurity.com/egitim-takvimi/

  • SANS Pentest Eğitimleri https://www.sans.org/curricula/penetration-testing
  • Ec-Council Pentest eğitimleri http://www.penetration-testing.com
]]>
https://codewk.com/10-soruda-sizma-testleri-pentesting-nedir/feed/ 0
Windows Sunucu Güvenliği (VDS) https://codewk.com/windows-sunucu-guvenligi-vds/ https://codewk.com/windows-sunucu-guvenligi-vds/#respond Fri, 15 Mar 2019 10:25:54 +0000 https://codewk.com/?p=1600 Virtual Dedicated Server – VDS Nedir?
Windows Sunucu Güvenliği

Virtual Hosting’in bir diğer başlığı olan VDS, Virtual Dedicated Server teriminin baş harflerinden oluşmaktadır. VDS’in her ne kadar Türkçe’de net bir karşılığı olmasa da Paylaşımlı Ayrılmış Özel Sunucu olarak tanımlanabilir.

Son dönemin en popüler bulut sunucu hizmetlerinden biri olan VDS; kullanıcılarına kendi web uygulamalarını geliştirmeleri, dağıtmaları ve barındırmaları için kullanabilecekleri bir sanal sunucuyu kiralama imkânı verir. Yani VDS hosting’i tercih eden bir kullanıcı belirli bir alanı kiraladığı zaman, o alan o kullanıcının dışında herkes için kullanıma kapalıdır ve kullanıcı kendi isteklerine göre alanını dilediği gibi kullanabilir.

Peki VDS Güveliği nasıl sağlanır ?

Windows Sunucu Güvenliği

Öncelikle otomatik güncelleştirme özelliklerini aktif edin, mümkünse SSCM kullanın.

Hiyerarşiyi takip edecek listeler oluşturun. (excel vb)

Mümkünse sunucuları yerel modda kullanmaya özen gösterin.

Sunucuları mümkünse Active Directory üzerine aktarın.

Sunucular arasında iletişim kurulacaksa Ipsec gibi VPN teknolojileri kullanın.

Parola güvenliğini sağlamak amacı ile 90 günde bir parola değiştirmeye zorlayın.

Parola uzunluklarını minimum 12 karekter olacak şekilde ayarlayınSunucularda 15 dakikada 2 kez geçersiz parola denemesi yapılırsa hesabı devre dışı bırakın.

Logon eventlerini belirli aralıklarla takip edin.

Ataklara karşı koymak için sunuculara EMET kurulumunu gerçekleştirin.

.Sunucular üzerinde kullanılan 3.parti yazılımların güvenlik güncelleştirmelerini mutlaka gerçekleştirin.

Anti-virüs uygulamaları kullanımına özen gösterin. (Kaspersky, Sophos, Eset vb)

Sistemde yüklü olan antivirüs uygulaması ile belirli aralıklarla tarama işlemi gerçekleştirin.

Sistemde günlük tutmayı aktif hale getirin.

Güvenlik duvarı kullanımına özen gösterin, ihtiyacınız olmasa bile güvenlik duvarını açın (Tabiki kullanıma ve amaca bağlı olarak ! )

Kullanılmayan portlara erişimleri kalıcı olarak kapatın.

Sunucuda kullanılmayan bütün özellikleri devre dışı bırakın (yazıcı sunucusu, yazıcı paylaşımı, dosya paylaşımı).

Tüm İnternet tarayıcılarını kaldırın veya devre dışı bırakın. (Yine Kullanım amacınıza bağlı olarak !)

Kimlik avı saldırılarına karşı korumak için sunucudaki tüm e-posta istemcilerini kaldırın.

Web sunucusu üzerinde kullanılacak bütün web sitelerinde TLS kullanımına özen gösterin.

Yedekleme için en az iki DNS sunucusu ve komut isteminden nslookup kullanarak çift onay ad çözümlemesi yapılandırın.

Sunucunun, istediğiniz adla birlikte DNS’de geçerli bir A kaydının yanı sıra geriye doğru aramalar için bir PTR kaydının olduğundan emin olun.

Sunucuda eğer IPv6 kullanılmayacaksa interface üzerinden kalıcı olarak devre dışı bırakın.

ihtiyacınız olan her şeyin kurulu olduğundan emin olun.

İhtiyacınız olmayan her şeyi kaldırın. Sunucunun saldırı yüzeyini gereksiz yere arttırmayın.

Sunucuda varsayılan olarak yüklü gelen uygulamaları kaldırın.

Windows oturum açmalarını ve kerberos güvenliğine dayalı çeşitli diğer işlevler tamamen aksayacağından dolayı NTP kullanımına özen gösterin.

Powershell ve SSH gibi diğer uzaktan erişim mekanizmaları eğer kullanılacaksa sadece VPN üzerinden kullanılacak şekilde ayarlayın.

Şifrelenmemiş protokolleri kullanmayın(telnet, FTP).

Mümkünse dosya yükleme işlemlerini SFTP üzerinden gerçekleştirin.

2008 ve 2003 gibi eski sürümlerde bulunan servisleri özellikle kontrol edin, gerekli olmayanları kapatın.

Önemli servisleri otomatik olarak başlayacak şekilde ayarlayın.

Kurtarma konsoluna otomatik yönetimsel oturum açmayı devre dışı bırak.

Alternatif medyadan izinsiz olarak önyükleme yapılmasını önlemek için aygıt önyükleme sırasını yapılandırın.

Misafir hesaplarını devre dışı bırak.

“everyone” olarak geçen izinleri gerekmedikçe asla kullanmayın.

Anonim SID ve Ad çeviri özelliğini devre dışı bırak.

Kullanılmayan kullanıcı hesaplarını derhal devre dışı bırakın veya silin.

Ncacn_ip_tcp kaldırın.

TCP / IP üzerinden NetBIOS’u devre dışı bırak.

Herhangi bir paylaşımın anonim olarak erişilmesine izin vermeyin.

Yerel Sistemin NTLM için bilgisayar kimliğini kullanmasına izin ver.

LAN Manager kimlik doğrulama seviyesini sadece NTLMv2’ye izin vermek ve LM ile NTLM’yi reddetmek için ayarlayın.

NTFS veya BitLocker ile yerleşik dosya şifrelemesini etkinleştirin.

Windows Server 2016/2012/2008/2003 lisans anahtalarınızı mutlaka girin.

Gereksiz tüm yürütülebilir dosyaları ve kayıt defteri aracılığı ile kaldırın.

Fiziksel sunucu güvenliğinizi mutlaka tamamlayın.

Windows Sunucu Güvenliği

Bu konumuzun da sonuna geldik umarım paylaşılan bilgiler işinize yarar.. Buradan diğer Yazılarıma da bakabilirsiniz. Bir sonraki konumda görüşmek üzere. 🙂

]]>
https://codewk.com/windows-sunucu-guvenligi-vds/feed/ 0
Linux Sunucularda PHP.ini Düzenleme Ve Güvenlik https://codewk.com/linux-sunucularda-php-ini-duzenleme-ve-guvenlik/ https://codewk.com/linux-sunucularda-php-ini-duzenleme-ve-guvenlik/#respond Fri, 08 Mar 2019 21:33:05 +0000 https://codewk.com/?p=1559 PHP Nedir ?

Bir Sunucuda PHP uzantılı dosyaların çalıştırılabilmesi için gerekli olan yazılımlar/paketler yüklendikten sonra projenize bağlı olarak bazı değişiklikler yapmanız gerekebilir. Örneğin web sitenizde bir dosya yükleme alanı varsa buradan yüklenecek dosya boyutunu izinler dosyasından değiştirmeniz gerekebilir.

İşte bu ve bunun gibi önemli PHP ayarların barındırıldığı özel ayar dosyası php.ini dosyasıdır.

PHP.ini Dosyası nasıl düzenlenir ?

Bu makalede yer alan php.ini düzenlemesini tüm Linux VPS sunucularda gerçekleştirebilirsiniz.

cPanel, Directadmin, Plesk sunucular için php.ini yolu şu şekildedir ;

 /usr/local/lib/php.ini 

Eğer php.ini yolunuzu öğrenmek isterseniz şu komutu ssh üzerinden çaılştırmanız gerekiyor ;

$ php -i | grep php.ini

Yukarıda Gördüğünüz gibi yol ekrana gelecektir.

php.ini dosyamızı nano editör ile açalım ;

nano -w /usr/local/lib/php.ini

PHP.ini içerisinde istediğiniz değerleri bularak sunucu kaynaklarımıza veya scriptinizin ihtiyacı oranında yükseltelim ve kaydedelim.

Ardından apache veya nginx kullanıyorsanız nginx servisini ayarlarımızın yapılandırılması için son olarak baştan başlatıyoruz ;

service httpd restart & service httpd restart

Tebrikler Artık Linux Sunucularda PHP.ini düzenleyebiliyorsunuz. 🙂

Linux Sunucularda Güvenlik

1. Kernel

İlk olarak Kernel Sürümünüzü Güncel Tutmanız sizi bir çok sistem açığından koruyacaktır.

Peki Kernel Nasıl Güncellenir ?

Bu site üzerinden en güncel kernel sürümünü indirin.

Arşivden çıkarma işlemi

$ unzx -v linux-4.19.tar.xz
ya da
$ xz -d -v linux-4.19.tar.xz

Yapılandırma ayarlarları

$ cd linux-4.19
 $ cp -v /boot/config-$(uname -r) .config

Örnek çıktı:

'/boot/config-4.15.0-30-generic' -> '.config'

Gerekli geliştirici araçları yükleme

$ sudo apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev

Kernel’i Yapılandırma

Kaynak kodların olduğu yerde aşağıdaki komuntlardan gerekli olanı yazıyoruz:

  • $ make menuconfig — Grafiksel arayüz ile yapılandırma
  • $ make xconfig — KDE Masaüstü ortamları için ideal yapılandırma
  • $ make gconfig — Gnome Masaüstü ortamları için ideal yapılandırma

Örnek komut kullanım şekli:
$ make menuconfig

Eğer make komutu bulunamadı hatası gelirse “sudo apt-get install make” ile indirmeniz gerekmekte !

Kernel’i Derleme

Sıkıştırılmış kernel imajını derlemek için alttaki komutu yazın:
$ make

Derleme hızını arttırmak için -j ile birden fazla çekirdek kullanabiliriz:
## use 4 core/thread ##
$ make -j 4
## get thread or cpu core count using nproc command ##
$ make -j $(nproc)

Kernel Modüllerini Yükleme

Alttaki komutla kernel modüllerini yüklüyoruz:

$ sudo make modules_install

Kernel’i Yükleme

Kernel derleme işlemi de bittiğine göre artık kernel yüklene bilir:
$ sudo make install

Bu yükleme işlemi alttakileri /boot dizinine yükleyecektir:

  • initramfs-4.19.img
  • System.map-4.19
  • vmlinuz-4.19

Grub Yapılandırmasını Güncelleme

Grub2 yükleyicisinin yapılandırma ayarlarını yapmamız gerekmekte.

Bu komutlar isteğe bağlıdır. make install işlemi bu işlemleri zaten yapmış olacaktır. Yine de vermekte fayda var:
$ sudo update-initramfs -c -k 4.19
$ sudo update-grub

İşlemi Sonlandırma

Sistemi yeniden başlatma komutunu giriyoruz:
# reboot
Yeniden başlatıldıktan sonra, Linux Kernel Versiyon’unu kontrol ediyoruz:
$ uname -mrs

Örnek çıktımız:

Linux 4.19 x86_64

2. PHP “Disable Functions”

PHP.ini Düzenlemeyi göstermiştik en başta hatırlarsınız. Şimdi ise PHP.ini içerisindeki Disable Function yani “Kapalı Fonksiyonlar” için bazı değerler gireceğiz. Bunun sebebi ise Sistemdeki User’lerin erişimini kısıtlayarak saldırıları minimum’a indirmek.

Örnek Kod ;

disable_functions=exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

3. SSH Port’unu Değiştirmek

SSH portunu değiştirmek sunucu güvenliği için gerekli bir işlemdir.Kurulum sonrası varsayılan olarak gelen 22 portu veya sık kullanılan SSH portları sürekli bot’lar tarafından taranmaktadır.Sunucunuzun hacklenmemesi için bilindik ya da varsayılan portları kullanmamanızı tavsiye ederim.

nano /etc/ssh/sshd_config

komutu ile SSH ayarlarının bulunduğu dosyayı açıyoruz. Bu dosya içerisinde aşağıdaki şekilde portu belirten bir bilgi olacaktır.

sshport

Buradaki #Port 22 olan bölümü unutmayacağınız bir port ile değiştirebilirsiniz.Yeni gireceğiniz portun sürekli kullanılan ya da bilindik bir port olmamasına dikkat ediniz. Değişikliği yaptıktan sonra CTRL+X ve sonrasında Y tuş kombinasyonu ile dosyayı kaydedip çıkış yapabilirsiniz.Yapmış olduğunuz port ayarının aktif olabilmesi için son olarak sshd servisine restart atmanız gerekiyor.

/etc/init.d/sshd restart

4.Python ve Perl Güvenliği

Son zamanlarda cgi-telnet scriptleri ile sunuculara sızmaya çalışan ve ln ile hedef sitenin içerisine müdahale eden mudavimlerle dolu sanal ortam maalesefki . bu konuda aşağıdaki işlemleri uygulayarak kalıcı çözüm oluşturabilirsiniz.

nano /etc/httpd/conf/httpd.conf

Komutu ile apache konfigurasyon dosyasına erisim sağlayarak akabinde aşağıdaki satırı bulun ( kismi olarak bulunabilir addhandler diye aratabilirsiniz )

AddHandler cgi-script .cgi .pl .plx .ppl .perl

Daha sonra bu komutun başına bir sharp işareti ekleyerek etkisiz hale getiriniz.

Örn : # AddHandler cgi-script .cgi .pl .plx .ppl .perl

Daha sonra Perl Kütüphanesine erişimi engellemek için ;

chmod 710 /usr/bin/perl 

komutunu ssh üzerinde çalıştırınız . en son olarak apache ‘yi restart ediyoruz.

 /etc/init.d/httpd restart

Aynı işlemi Plesk için aşağıdaki komutlar ile gerçekleştirebilirsiniz.

chmod 700 /usr/bin/perl
 /etc/init.d/httpd restart & service apache restart

Artık Cgi-Telnet erişimi kapanmıştır. Bazı Cgi-Telnet bağlantıları python ile çalışmaktadır aynı işlemleri python kütüphanesi için yapabilirsiniz.

5. Veri Akışını kesmek

Kötü amaçlı kullanımlar için, örneğin basit icmp saldırılar için en güvenli yol sunucuyu dışarıdan ping’e kapatmaktır. Pingi kapatmak ddos saldırılarından bizi korumaz, yalnızca isteklere kapatır. Bunun sunucumuza veya site erişimlerine bir zararı yoktur hatta faydası vardır.

Ping i kapatmak için ssh ile login olduktan sonra nano komutu ile aşağıdaki kısıma erişiyoruz;

nano /etc/sysctl.conf

Daha sonra aşağıdaki komutu en alt satıra ekliyoruz, kaydedip çıkıyoruz;

net.ipv4.icmp_echo_ignore_all=1

Değişiklikleri uygulamak için aşağıdaki komutu çalıştırıyoruz;

sysctl -p

Farklı bir bilgisayardan alan adımızı veya ip adresimizi pinglediğimizde zaman aşımına uğrayacaktır.

Yeniden ping erişimine açmak istersek aşağıdaki komutu çalıştırıyoruz;

nano /etc/sysctl.conf

En aşağıda eklediğimiz satırı siliyoruz ve kaydedip çıkıyoruz.

Değişikliği uygulamak için aşağıdaki komutu çalıştırıyoruz.

sysctl -p

İşlemimiz bu kadar.

6. Fail2Ban

Fail2ban belirli servislere ait log dosyalarını takip ederek başarısız login girişimlerini tespit eder ve bu denemeler belirli bir sayıya ulaştığı zaman ilgili aktivitenin kaynak IP’si için Iptables’a bir drop kuralı ekler. Sisteminizde iptables yoksa ya da iptables kullanmak istemiyorsanız aynı şeyi tcpwrapper ile de yapabilir ve ilgili IP adresini hosts.deny dosyasına ekler. Ancak bu durum sadece tcpwrapper kullanan (örn: sshd) servisler için geçerlidir. Mesela apache tcpwrapper kullanmaz bu nedenle apache için iptables kullanmanız gerekir.

Fail2ban ile reject edilen IP adresleri için öntanımlı olarak 5 dakikalık bir ban süresi bulunmaktadır. Ban süresi dolan IP adresleri için girilen drop kuralları (ya da hosts.deny girdileri) sistemden kaldırılır. Sonuç olarak ban durumu kalıcı değildir ve süre sonunda ilgili IP adresleri tekrardan erişim sağlayabilirler.

Bunun yanı sıra, Fail2ban, banlanan ipleri mail yolu ile raporlayabilir; böylece sunucudaki aktivite ile ilgili bilgi edinebilirsiniz.

Bu kısa bilgilendirmeden sonra kurulum ve yapılandırma kısmına geçebiliriz.

Kurulumu kaynak koddan yapıyorum. Bu nedenle şimdi “/usr/local/src/” dizinine geçerek son “http://sourceforge.net/projects/fail2ban/files/” adresinden fail2ban’ın son sürümünü download edelim.

(Şu an son sürüm 0.8.4’tür. Siz download etmeden önce kontrol edin.)

# cd /usr/local/src # http://downloads.sourceforge.net/project/fail2ban/fail2ban-stable/fail2ban-0.8.4/fail2ban-0.8.4.tar.bz2?use_mirror=ignum 

Şimdi tar.bz2 dosyasını açıp kurulumu yapmak için fail2ban dizinine geçiyoruz.

# tar xjvf fail2ban-0.8.4.tar.bz2 # cd fail2ban-0.8.4 

Kurulum aşağıdaki gibi setup.py scripti üzerinden yapılmaktadır.

# python setup.py install 

Yükleme işlemi bittikten sonra fail2ban binary dosyaları /usr/bin dizinine, yapılandırma dosyaları ise /etc/fail2ban dizinine konulur.
Ancak yapılandırmaya başlamadan önce fail2ban’ı sisteme servis olarak ekleyelim.

# cp /usr/local/src/fail2ban-0.8.4/files/redhat-initd /etc/init.d/fail2ban # chmod 755 /etc/init.d/fail2ban # chkconfig --add fail2ban # chkconfig fail2ban on 

Şimdi fail2ban’ı start edelim. (Ön tanımlı ayarlarda herhangi bir servis için ban özelliği aktif değildir.)

service fail2ban start 

Böylelikle Fail2Ban Kurulumumuzu tamamlamış oluyoruz.

7. Bash Güvenlik Açığı

Linux sistemleri etkileyen , heartbleed ten daha tehlikeli gözüken yeni bir açık bulundu , en kısa sürede bash’i güncellemelisiniz ,açıktan etkilenip etkilenmediğinizi anlamak için terminal de aşağıdaki komutu çalıştırınız.

# env x='() { :;}; echo vulnerable’ bash -c “echo this is a test”

Eğer çıktısı aşağıdaki gibi ise acilen yama yapmalısınız.

vulnerable
this is a test

Eğer komutu çalıştırdığınızda aşağıdaki sonucu görüyor iseniz Sizin korkacak bir şeyinizi yok demektir.

bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x’
this is a test

8. Cloudflare

Cloudflare web performansını arttıran ve web sitenizin güvenliğini arttırmaya yarayan bir hizmettir. Cloudflare free planı sayesinde CloudFlare CDN, SSL, DDoS koruması gibi birçok özelliği ücretsiz olarak kullanabiliyorsunuz. Cloudflare’in genel özelliklerinden bahsettikten sonra gelelim bu özelliklerin ne işe yaradığına:

1. CDN Nedir?

cloudflare-cdn-haritasi

CDN’nin açılımı Content Delivery Network olup Türkçe anlamı İçerik Dağıtım Ağı’dır. CDN’nin amacı kullanıcılara sitenin en hızlı şekilde ulaştırılmasıdır.
Peki CDN nasıl çalışıyor?
CDN dünyanın birçok yerine dağıtılmış sunucuların bir alt yapısıdır. Bu yapıda kullanıcı hangi ülkedeyse o ülkeye en yakın sunucuya ulaşıyor. Bu sayede kullanıcı uzaktaki sunucuya bağlanıp zaman kaybetmiyor. Bu yüzden hızlandırma açısından önemli bir özellik.
Ayrıca sitenizin hızlı açılması SEO açısından da çok faydalıdır.

2. DDoS Koruması Nedir?

ddos-saldirisi

DDoS saldırganlar sizin sunucunuza çok sayıda PC üzerinden istekler gönderir ve sunucuyu meşgul ederler. Bu şekilde sunucu yoğunluktan yanıt veremez olur ve sunucunuz çöker. İşte Cloudflare sitenize yapılan DDoS saldırılarını bir noktaya kadar önleyebiliyor.
Cloudflare DDoS’u nasıl engelliyor?
Sitenize gelen trafik önce Clodflare sunucusuna erişiyor ve sistem burada saldırgan davranışlarını tespit ederek sitenize ulaşmasını engelliyor.

3. SSL Sertifikası nedir?, Ne işe yarar?

SSL internet üzerinde bilgi aktarımı sırasında bilgininin gizlilik ve güvenliğini saplamak için yapılmış bir güvenlik protokolüdür. Bu SSL sertifikasını sitenin https ile başlaması ve yeşil kilit bulundurmasıyla anlayabiliriz. Siz de Cloudflare ile sitenize SSL sertifikası ekleyebilirsiniz.

4. Trafik analizi

Sitenizin analizi için genelde Google Analytics gibi araçlar kullanılıyor. Ancak Javascript ve pixel tracking yöntemleriyle elde edilemeyen kullanıcıları Cloudflare ile görebilirsiniz.

5. Önbellekleme

Sunucunuz tarafından dinamik şekilde oluşturulmayan sayfaları otomatik olarak tanır, bu sayfaları kendi sunucularında önbellekleyerek hem sunucunuzdaki trafiğinizi azaltır hem de sayfa yükleme sürelerinizi azaltır.

6. Spam Yorum Koruma

CloudFlare sitenize gelen spam yorum sayısını en aza indirgemek için üçüncü parti birçok uygulamadan yararlanır.

7. Dosya Optimizasyonu

Cloudflare Javascipt, CSS gibi dosyalarınızı sıkıştırarak sitenizi daha hızlı açılmasını sağlıyor.

8. Her Zaman Online

Eğer sunucunuz çökerse CloudFlare sitenizin önbelleğe alınmış halini servis ediyor. Bu sayede sitenize giren kullanıcılar hata sayfası almayacak sitenizi görüntüleyebilecek.

Evet arkadaşlar umarım hazırladıgım makaleyi beğenmişsinizdir.Başka makalelerde görüşmek üzere..

]]>
https://codewk.com/linux-sunucularda-php-ini-duzenleme-ve-guvenlik/feed/ 0
Android – Date Picker & Time Picker Kullanımı https://codewk.com/android-date-time-picker-kullanimi/ https://codewk.com/android-date-time-picker-kullanimi/#respond Wed, 27 Feb 2019 16:20:28 +0000 https://codewk.com/?p=1515 Merhaba arkadaşlar, bu yazıda Android uygulamalarda kullanılan Date Picker ve Time Picker nedir, nasıl kullanılır bunları öğreneceğiz ve bununla ilgili Button ve TextView’lerden oluşan bir uygulama yapacağız. Gerek web uygulamalarda, gerekse mobil uygulamalarda kullanılan zaman kavramı çok önemlidir. Şimdir ise Date Picker ve Time Picker’ın ne olduğunu anlamaya çalışalım. Ve daha sonrasında da basit bir uygulama ile olayı kavramaya çalışalım. Başlıyoruz.. ????

Date Picker : Anlamı “tarih seçici“dir. Tarih belirlemede kullanılır.
Time Picker : Anlamı “saat seçici“dir. Saat belirlemede kullanılır.
Bu iki yapı kullanıcıların manuel olarak saat ve tarih belirlemesine gerek kalmadan basit bir diyalog penceresi kullanmasını sağlar.

Örnek Uygulama :

Bu uygulamada giriş ekranında “Saat” ve “Tarih” adında iki buton olacak ve kullanıcılar açılan diyalog penceresinden saat ve tarihi seçebilecekler ve biz de bu iki yapının kullanımını anlamış olacağız. Hadi başlayalım !

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#e0e0e0"
tools:context=".MainActivity"
tools:layout_editor_absoluteY="25dp">

<Button
android:id="@+id/button"
android:layout_width="115dp"
android:layout_height="60dp"
android:layout_marginEnd="20dp"
android:layout_marginLeft="68dp"
android:layout_marginRight="20dp"
android:layout_marginStart="68dp"
android:background="#463c48"
android:text="SAAT"
app:layout_constraintBaseline_toBaselineOf="@+id/button2"
app:layout_constraintEnd_toStartOf="@+id/button2"
app:layout_constraintStart_toStartOf="parent" />

<Button
android:id="@+id/button2"
android:layout_width="115dp"
android:layout_height="60dp"
android:layout_marginBottom="71dp"
android:layout_marginEnd="68dp"
android:layout_marginRight="68dp"
android:background="#463c48"
android:text="TARİH"
app:layout_constraintBottom_toTopOf="@+id/textView2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/button"
app:layout_constraintTop_toBottomOf="@+id/textView" />

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginBottom="75dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="128dp"
android:text=" Tarih ve saati seçmek için butonlara tıklayınız."
android:textColor="#000000"
android:textSize="18dp"
app:layout_constraintBottom_toTopOf="@+id/button2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginBottom="23dp"
android:paddingLeft="10dp"
android:textColor="#000000"
android:textSize="20dp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/textView3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button2" />

<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginBottom="92dp"
android:paddingRight="10dp"
android:textColor="#000000"
android:textSize="20dp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2" />
</android.support.constraint.ConstraintLayout>

Uygulamanın tasarımını istediğiniz gibi düzenleyebilirsiniz. Önemli olan seçilen değerlerin gösterilebileceği bir TextView olmasıdır. Tabi farklı fikirler de olabilir.

MainActivity.java

public class MainActivity extends AppCompatActivity {

Button button, button2;
TextView textView2,textView3;
Calendar calendar;
DatePickerDialog datePickerDialog;
int hour,minute;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

button = (Button) findViewById(R.id.button);
button2 = (Button) findViewById(R.id.button2);
textView2 = (TextView) findViewById(R.id.textView2);
textView3 = (TextView) findViewById(R.id.textView3);

calendar = Calendar.getInstance();
hour = calendar.get(Calendar.HOUR_OF_DAY);
minute = calendar.get(Calendar.MINUTE);

//textView2.setText(hour + " : " + minute);

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TimePickerDialog timePickerDialog = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
textView2.setText(hourOfDay + " : "+ minute );

}
}, hour,minute,true);
timePickerDialog.show();
}
});


button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calendar = Calendar.getInstance();
int day = calendar.get(Calendar.DAY_OF_MONTH);
int month = calendar.get(Calendar.MONTH);
int year = calendar.get(Calendar.YEAR);

datePickerDialog = new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
textView3.setText(dayOfMonth + "/" + (month+1) + "/" + year);
}
}, day,month,year);
datePickerDialog.show();
}
});

}

}

Kodları kısaca açıklayayım. Ana sınıfta önemli olan yapılar TimePickerDialog, DatePickerDialog ve Calendar. Bu sınıflardan nesne üretmekle başlıyoruz. Butonlara tıklandığında tarih ve saat diyalog pencerelerinin çıkmasını sağlayan kodları, butonların onClick() metodu içerisine yazıyoruz. Integer cinsinden tanımladığımız hour, minute, day, month ve year‘a ise seçilen zamanlar atanır. Örnek ➡

hour = calendar.get(Calendar.HOUR_OF_DAY);
minute = calendar.get(Calendar.MINUTE);

Calendar ise takvim sınıfıdır. Bu sınıftan türettiğimiz nesne ile yukarıdaki gibi saati ve dakikayı alabildik. Ve integer cinsindeki hour ve minute değişkenlerine atadık.

Değişkenlere atadığımız değerleri butonların altındaki TextView’lerde gösterebilmek için setText kullanıyoruz.

 textView3.setText(dayOfMonth + "/" + (month+1) + "/" + year); 

Butonların onClick() metodlarının içinde kullandığımız onTimeSet() ve onDateSet() override metodları sayesinde tarih ve saat kullanımını daha kolay bir şekilde sağlıyoruz.

onTimeSet() ve onDateSet() metodlarının parametrelerinin anlamlarına da bakalım.

 public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) 
 public void onTimeSet(TimePicker view, int hourOfDay, int minute) 

hourOfDay : Gün içerisindeki geçerli saat.
minuteOfHour : Saat içerisindeki geçerli dakika.
dayOfMonth : Ay içerisindeki geçerli gün.
hour : saat
minute : dakika
day : gün
month : ay
year : yıl

Son olarak datePickerDialog.show(); ve timePickerDialog(); ile seçilen tarih ve saati ekranda gösteriyoruz.

Uygulamanın Son Hali :

Android - Date Picker & Time Picker Kullanımı
Android – Date Picker & Time Picker Kullanımı

Bu uygulama sayesinde Android’de Time Picker ve Date Picker kullanımının anlaşıldığını umuyorum. Siz de uygulamanıza tarih ve saat eklerken bu şekildeki kullanımı veya daha farklı kullanımları deneyebilirsiniz. Okuduğunuz için teşekkür ederim. Bir sonraki yazıda görüşmek üzere..????

]]>
https://codewk.com/android-date-time-picker-kullanimi/feed/ 0
Android – Thread ve Splash Screen Uygulaması https://codewk.com/android-splash-screen/ https://codewk.com/android-splash-screen/#respond Fri, 22 Feb 2019 17:56:10 +0000 https://codewk.com/?p=1424 Merhabalar ???? Thread mantığını kavramak ve uygulama açıldığında karşımıza gelen ilk ekranı özelleştirmek adına Splash Screen uygulaması yapacağız.

Öncelikle Splash Screen nedir bunu öğrenelim.

Splash Screen : Bir uygulama açıldığında karşımıza gelen ilk sayfadır, genelde uygulamayı tanıtan tek bir resimden oluşur ve kısa süreli görünür. Türkçe karşılığına “karşılama ekranı” diyebiliriz.

Yapacağımız uygulama aslında Thread mantığının ilk adımıdır. Ama önce Thread hakkında bilgi edinelim.

Thread : Aynı anda birden fazla işlem yapılmasını sağlar. Ve bu işlemler eş zamanlı gerçekleşir. Java’da en fazla kullanılan yapılardan biridir. Veri okuma/yazma işlemleri, veritabanı üzerinde crud işlemleri, ağ iletişimi ve görüntü işleme, metin ayrıştırma gibi işlemler thread ile yapılmalıdır.

Artık Splash Screen uygulamamızı yapmaya başlayabiliriz. Uygulamamızın tasarımı ile başlayalım.

İlk xml dosyasının tasarımında sadece LinearLayout kullanmamız yeterli olacaktır. LinearLayout, nesneleri yatay ve dikey olarak sıralamamızı sağlar ve bunu kolaylaştırır. Biz bu tasarımda vertical(dikey) kullanacağız. Bunun için ek olarak : android:orientation=”vertical”  kod bloğunu yazıyoruz. Karşılama ekranındaki arka plan resmini değiştirmek için ise : android:background=”” içerisine istediğimiz resmin konumunu ve ismini yazmamız yeterli. Örneğin  @drawable/tree .

splash_screen.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/tree"
android:orientation="vertical">
</LinearLayout>

Splash ekranından sonra yönlendireceğimiz yeni sınıfın xml tasarımını yapalım.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="28dp"
android:text="İkinci Ekran"
android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

Bu kısımda örnek olsun diye sadece TextView ekledim. Siz istediğiniz gibi düzenleyebilirsiniz.

Geriye sadece sınıfları oluşturmak kaldı. SplashScreen.java ile başlayalım.

SplashScreen.java

public class SplashScreen extends AppCompatActivity {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);

Splash splash = new Splash();
splash.start();
}

class Splash extends Thread {
public void run() {
try {
sleep(4000);
}
catch (InterruptedException e) {
e.printStackTrace();
}

Intent intent = new Intent(SplashScreen.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
}

Kod içerisinde oluşturulan ikinci sınıfı açıklamakla başlayalım. Thread oluşturmak için Thread sınıfından yeni bir sınıf oluşturduk. Bu sınıf içerisindeki run() methodu splash ekranının çalışmasını sağlar. Try {} içerisinde sleep(4000) yazarak 4 saniye beklemesini sağladık. Catch{} içerisinde ise gerektiğinde hata yazısını gösteren bir yapı yazdık.

Intent ile activityler arası geçişi sağladık. Ve Intent sınıfından türettiğimiz intent nesnesi ile FLAG_ACTIVITY_CLEAR_TASK ve FLAG_ACTIVITY_NEW _TASK kullanarak aynı task içinde çalışan ekranların tekrar gösterilmemesi için bir önceki task’ı silip yeni bir task başlatıyoruz.

onCreate() metodu içerisinde ise alt sınıfın nesnesini kullanarak sınıf içerisindeki metodların çalışmasını sağlıyoruz.

MainActivity.java

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

Son olarak eğer eklenmemişse AndroidManifest.xml dosyasına activityleri aşağıdaki gibi ekliyoruz.

<activity android:name=".MainActivity"></activity>

Uygulamanın Son Hali :

]]>
https://codewk.com/android-splash-screen/feed/ 0
Android Studio ListView Kullanımı https://codewk.com/android-studio-listview-kullanimi/ https://codewk.com/android-studio-listview-kullanimi/#respond Fri, 22 Feb 2019 12:10:03 +0000 https://codewk.com/?p=1380 Bu makalede Android uygulamalarda nasıl ListView kullanabiliriz ve ListView öğelerine tıklandığında istediğimiz yazıyı nasıl gösterebiliriz bunları öğreneceğiz. Evet başlıyoruz..????

Öncelikle Android uygulamalarda sıkça kullanılan List View hakkında bilgi edinelim.

ListView : Herhangi bir liste içerisinde bulunan öğeleri içeren bir görünümdür. Android Studio’da liste oluşturabilmek için bu yapıyı kullanabiliriz.

Dilerseniz bu yapıyı nasıl kullanacağımız hakkında basit bir uygulama yazalım.

ListView Örnek Uygulama

Bu uygulamamızda bir liste olacak ve bu listedeki her bir öğeye tıklandığında listedeki verinin ismi Toast mesajıyla gösterilecek. Android Studio‘da yeni bir proje açtıktan sonra uygulamanın tasarımını yapmak için activity_main.xml dosyasını açıyoruz. Aşağıdaki gibi basit bir ListView kodu yazacağız. Not : tools:context=” “> kısmına kendi paket isminizi yazınız.

ListView
ListView

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.nisa.listview.MainActivity">

<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="fill_parent"/>

</android.support.constraint.ConstraintLayout>

Listedeki öğelerin her birini düzenleyecek xml dosyasını oluşturalım.

activity_list.xml

<?xml version="1.0" encoding="utf-8"?>

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:padding="2dp"
android:textColor="#4d4d4d"
android:text="Text"
android:textStyle="bold"
android:textAppearance="?android:attr/textAppearanceMedium"
/>

Listedeki verilerin isimlerini strings.xml dosyasına aşağıdaki gibi ekleyeceğiz. Her bir <item> </item> içerisine istediğiniz verileri girebilirsiniz.

strings.xml

<resources>
<string name="app_name">ListView</string>
<string-array name="array_animals">
<item>Bee</item>
<item>Cat</item>
<item>Cow</item>
<item>Dog</item>
<item>Frog</item>
</string-array>
</resources>

Son olarak, bir adapter ile listedeki elemanların kullanılmalarını ve xml dosyalarıyla bağlantıyı sağlayacak MainActivity.java sınıfını kodlayacağız. Listedeki öğelere tıklandığında, öğelerin isimlerininToast mesajı ile görünmesini istiyoruz. Ve liste bağlantısını sağlayan yapıları da şu şekilde açıklayabilirim.

ArrayAdapter : Kullanıcı ara birimi ile verileri birbirine bağlayan dizidir. Bu veriler içinde görüntüleme şekli ve görüntülenecek elemanlar bulunmaktadır.
setAdapter : Oluşturduğumuz ArrayAdapter’ı ListView’e atamak için kullanıyoruz.

MainActivity.java

public class MainActivity extends AppCompatActivity {

String[] item;
ListView lv;
TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

lv = (ListView)findViewById(R.id.lv);
tv = (TextView)findViewById(R.id.tv);
item = getResources().getStringArray(R.array.array_animals);

final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, item);
lv.setAdapter(adapter);

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {

String value = adapter.getItem(position);
Toast.makeText(getApplicationContext(),value, Toast.LENGTH_SHORT).show();

}
});
}
}

MainActivity.java sınıfında öncelikle görsel komponentlerin ana sınıfla uyumlu çalışmasını sağlayacak kod bloklarını yazdık. strings.xml dosyasındaki öğeleri sınıf içerisinde kullanabilmek için item tanımladık. ArrayAdapter ile bu öğelerin ListView’in satırlarında görünmesini sağladık. En altta ise value adında bir değişken tanımlayıp, itemların pozisyonlarını bu değişkene atayıp Toast mesajı ile gösterdik.

Ve sonunda List View’i basit bir şekilde kullanmış olduk. ????

Uygulamanın Son Hali
Uygulamanın Son Hali

Siz de liste elemanlarına tıklandığında Toast mesajı göstermek yerine Intent ile yeni bir sınıfa yönlendirme veya Dialog mesajı gösterme şeklinde bu uygulamayı değiştirebilirsiniz.

Yazımı okuduğunuz için teşekkür ederim, umarım faydalı olmuştur. Yorumlarınızı ve sorularınızı bekliyorum. Bu tarz yazılar ve faydalı olabilecek tüm bilgiler için beklemede kalın. Sayfamızın diğer içeriklerine buradan ulaşabilirsiniz. İyi günler dilerim..????????‍♀

]]>
https://codewk.com/android-studio-listview-kullanimi/feed/ 0
E-Ticaret Platformu Seçmeden Dikkat Edilmesi Gerekenler https://codewk.com/e-ticaret-platformu-secmeden-dikkat-edilmesi-gerekenler/ https://codewk.com/e-ticaret-platformu-secmeden-dikkat-edilmesi-gerekenler/#respond Wed, 13 Feb 2019 09:09:45 +0000 https://codewk.com/?p=1240 Çalıştığımız E-Ticaret firmalarının yaşadıkları sıkıntıların başında E-Ticaret platformu seçerken verdikleri yanlış kararlar geliyor. O kadar emek verdikten sonra yanlış kararlar yüzünden istedikleri geri dönüşü sağlayamadıkları için iş farklı boyutlara geliyor.

Peki bu sorunun önüne geçmek için nelere dikkat etmek gerekiyor ?

Bu yazımızda hiç teknik bilgi bilmeyenlerin bile anlayabileceği şekilde E-Ticaret Platformu satın almadan önce dikkat etmeniz gereken şeyleri size anlatacağız.

İşte Dikkat Edilmesi Gerekenler !

1- Ücret Bilgisi

Ücret bilgisi E-Ticaret için çok ayırt edici bir özelliktir. Geniş bir yelpazeye sahip olan fiyatlar ile hizmet vermektedir.

Eğer kendi firmanıza özel bir E-Ticaret Platformu oluşturmak istiyorsanız, oldukça iyi bir bütçeyi gözden çıkarmalısınız. ( Kaliteli bir yazılım yaptırmak için karşınıza 30.000 – 50.000 TL arası fiyatlar çıkabilir ).

Eğer hazır E-Ticaret Platform‘ları kullanırsanız daha uygun şekilde işinizi görmüş olursunuz. ( 4.000 – 8.000 TL )

Teknik konular ve detaylı ayrıntılar hakkında fazla bir bilgiye sahip değilseniz kesinlikle hazır E-Ticaret Platform‘larını öneriyorum.

2- Görünmeyen Giderler

E-Ticaret Platform‘unuzu kurduktan aylar sonra karşınıza gizli ücretler çıkabilir. Yazılım firmanız ile bu konuyu en başından belirtin. Bu başlığı daha iyi bir şekilde anlamanız ve bu sorunun önüne geçmeniz için aşağıdaki soruların cevaplarını bilmeniz gerekiyor.

  • Yazılım firmanız ne kadar süre size ücretsiz destek ve yardım sağlayacak ?
  • Yazılım firmanız teknik konularda değişiklik yapmak istediğinizde sizden ücret talep edecek mi ?
  • Yazılım firmanız tasarım değişmek istediğiniz zaman sizden ücret talep edecek mi ?
  • Yazılım firmanız sizden yıllık bir ücret talep edecek mi ?

Kısacası anlaşmanız harici yazılım firması tarafından karşınıza bir ücret gelecek mi ?

3- Proje süresi

Yazılımın hazırlanma süresini iki önemli konu belirleyecektir:

  • Standart yazılım süresi
  • Tasarım konusunda firma ile anlaşmaya varacağınız süre

Yazılım firmanız web sitem ne zaman hazır olur diye bir soru sorarsanız, çok yüksek ihtimalle 15 iş günü ile 30 iş günü içerisinde yazılımın biteceği, ancak tasarım aşamasında bu sürenin size bağlı olacağı söylenecektir.

Özetle, bu sürecin hızlı olmasını istiyorsanız tasarımınızı hazırlayıp firma ile görüşmeye gidebilirsiniz. En azından beğendiğiniz 2-3 internet sitesi örneğini inceleyip gidebilirsiniz.

4 – Özel Tasarım

Yazılımınız özel tasarım mı olacak yoksa tema mı kullanacak? Eğer tema kullanılacaksa yazılım firmasının sizden çok yüksek ücretler talep etmemesi gerekir.

Ayrıca mobil tasarım konusunda da firmanın neler yapacağını da öğrenmelisiniz. Yani web sitenizin özel tasarım olması web sitenizin mobil versiyonun da özel tasarım olacağı anlamına gelmez.

Yazılım firmasına vereceğiniz tasarımda, sitenizin mobilde nasıl görünmesi istediğini de söylemelisiniz.

5 – Yönetim Paneli

Web sitenizin yönetim paneli nasıl olacak?

Web sitenizin yönetim paneli sizin eliniz ayağınız olacak! O yüzden web sitenizin yönetim panelinde neleri yönete bileceğinizi mutlaka yazılım firmanıza sormalısınız. Örnek bir yönetim panelinden detaylı bir analiz yapmanız en doğrusu olacaktır.

6- Kampanyalar

codesoftware
kampanya

Bir E-Ticaret Sitesi olduğunuz zaman, müşterilerinizi bağlı kılmak için kampanyalar oluşturacaksınız, bu kampanyaları yönetim panelinde görüp kontrol edebilecek misiniz ?

Genel kampanya modelleri:

  • Kupon kodu tanımlayabilmek
  • Belirli ürün veya kategorilerde ücretsiz kargo seçeneği
  • Bir ürün satın alana bir ürün bedava kurgusu
  • Çapraz ürün kampanyaları

7 – SEO ve Kurulumlar

Yine yönetim panelinden gerekli E-Ticaret SEO işlemlerini ve kurulumları yapabiliyor olmalısınız.

SEO için gerekli alanlar:

  • Title giriş alanı
  • Meta açıklama giriş alanı
  • H1 etiketi giriş alanı
  • Site haritası oluşturma
  • Robots.txt oluşturma
  • Toplu ürün title / meta oluşturma
  • Görsel alt etiket girişleri
  • 301 yönlendirme alanı
  • URL değiştirme alanı
  • Yapılandırılmış veri girişleri

8 – Destek Süreci

Destek sürecini de yazılım firmasına sormalısınız.

  • Taleplerinizi firmaya hangi yolla ileteceksiniz?
  • Firma size özel bir müşteri ilişkileri yetkilisi sağlayacak mı?
  • Açtığınız talepler ortalama ne kadar süre içerisinde yanıtlanacak?
  • Firmaya 7/24 talep iletebilecek misiniz?

E-Ticaret Konusunda Detaylı Bilgi almak için CodeSoftware‘yi ziyaret edebilirsiniz.

]]>
https://codewk.com/e-ticaret-platformu-secmeden-dikkat-edilmesi-gerekenler/feed/ 0
Composer Kurulumu ve Kullanımı ? https://codewk.com/composer-kurulumu-ve-kullanimi/ https://codewk.com/composer-kurulumu-ve-kullanimi/#respond Mon, 11 Feb 2019 12:10:47 +0000 https://codewk.com/?p=1204 Composer PHP için bağımlılık yönetim aracıdır. Projenizin ihtiyaç duyduğu kütüphaneleri tanımlamanızı ve sizin için kurmasını ve güncellemesini sağlar. Merak etmeyin otomatik güncellemiyor 🙂

Composer Ne İşe Yarar ?

PHP ile yazılım geliştiriyorsanız, bazı kütüphaneleri/dosyaları yeniden indirmek, yazmak, güncel sürüm kullanmaya çalışmak için zaman harcamanın büyük bir kayıp olduğunu fark etmişsinizdir. Zend, Symfony ve Laravel gibi kütüphaneleri kullanarak proje yapıyorsanız Composer’a daha fazla ihtiyacınız var demektir.

Composer kurulumu hakkında daha detaylı bilgi için https://getcomposer.org/doc/ bu adrese bir göz atabilirsiniz.

Kimler İçin ?

Aslında PHP ile kod yazan herkesin kullanması gerektiğini düşünüyorum. İllaha ki belirli kütüphaneler veya frameworkler vb. kullanıyorsunuzdur; ve en son version kullanmak (benim gözümde) her zaman daha sağlıklıdır. Benim belli başlı kütüphanelere sürekli bir işim düşüyor ve her seferinde git yeniden bul,araştır ve geri getirme işlemlerini yapmak zaman ve odak kaybı bir iş.

Sürekli eski projelerinizi karıştırıp fonksiyon,kod ve dizi aramanıza gerek yok. Neredeyse her işinizi halledebileceğiniz çok geniş kütüphaneler mevcut. Örneğin Laravel Framework için Carbon sınıfını anlatmıştık
(https://codewk.com/laravel-carbon-kurulumu/).Carbon sınıfı gerçekten tarih/zaman işlemleri için muazzam bir kütüphane.

Composer Kurulumu Nasıl Yapılır ?

Windows (için Composer kurulumu)

Windows’a Composer kurulumu yapmak için öncelikle bilgisayarınızda PHP kurulu olmalıdır(XAMPP veya WAMP). https://getcomposer.org/Composer-Setup.exe bu adresten composer’ın indirme işlemini yapıp kurulum yapıyoruz.

Kurulum yaparken php.exe seçmenizi isteyecek. Bu kısımda çok dikkatli olunuz. Doğru php.exe dosyasını seçtiğinizden emin olunuz.

Ve kurulum işlemini başarıyla tamamladınız 🙂 Artık çalışmak istediğiniz dizini CMD yardımı ile açıp artık kütüphaneleri projenize dahil edebilirsiniz.

Linux (için Composer kurulumu)

Terminali açıyoruz ve aşağıdaki komutları sırasıyla veriyoruz.

sudo apt-get update 
sudo apt-get install curl
sudo curl -s https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

Composer kurulumu’nu test etmek için composer komutunu kullanın. Composer doğru şekilde yüklendiyse, sunucu uzun bir yardım bilgileri ve komutları listesiyle yanıt verecektir.

Komutları ve ayrıntılarını ilerleyen yazılarım da daha detaylı olarak örneklerle anlatacağım lütfen takipte kalın 😉

Yazımı okuduğunuz için çok teşekkür ederim bu içeriği paylaşarak size bir yardımım dokunduysa ne mutlu bana… Herhangi bir sorun yaşamanız durumunda yorumlarınızı bekliyor olacağım. İyi Günler 🙂

]]>
https://codewk.com/composer-kurulumu-ve-kullanimi/feed/ 0