Google+
Barış Ceviz Menü

  • Açık Akademi Beta

    Açık Akademi'nin Beta versiyonu çıktı!

    Açık Akademi Beta

Paylaşım Linki:

Android Search Bar Kullanımı

Selamlar,

Benden beklenmeyen bir yazı olacak. Bu yazımda Android uygulama geliştirme hakkında bir makale olacak. Beni baya uğraştıran bir sorunun çözümünden bahsedeceğim. Kodları belirli kaynaklardan almama rağmen yine de hata aldım ve kaynakta bunu yaşayan görmedim. Çok ilginç bir durumdu. Bu kaynaklar İngilizce web sitelerden alınmıştır. Yazı sonunda kaynakça olarak paylaşacağım. Bahsettiğim SearchBar dediğim kontrolün şekli aslında aşağıdaki gibidir. Bu tasarımın nasıl yapılacağını bahsedeceğim.

Android SearchBar Görünüm 1 Android SearchBar Görünüm 2 Android SearchBar Görünüm 3

 

Gördüğünüz gibi 3 ekrandaki durumu gerçekleştireceğiz. Burada arama butonunu uygulama menüsüne ekliyoruz. Böylelikle uygulama başlığında açılabilir hal alıyor. Action Bar olarak geçen bu durum içerisinde geliyor. İlk yapmamız gereken kullandığımız Activity nin menu xml dosyasını açalım. İçerisine aşağıdaki kodu ekleyelim.

Burada title ı string.xml dosyasından alabilirsiniz. ShowAsAction değeri always olarak ayarlıyoruz. Bu değerin amacı SearchView ın arama ikonunun ön planda durması ve menünün alt açılır menü olmadan tıklanabilir hale getirir.İsterseniz never yapıp görebilirsiniz sonucu. ActionLayout değerini kullandığınız Activity nin id değerini girmeniz gereklidir. Ve son değer ActionViewClass. Bu değer bulduğum kaynakta android altında tanımlanıyor fakat uygulamada null olarak geliyordu. android yerine app yazdığım anda istediğim değeri aldım. Burada yaptığımız işlem ise bu menu item ın SearchView kontrol olduğunu belirtiyoruz. Bu şekilde menu item ı tanımlıyoruz. Burayı tamamladıktan Activity xml dosyasında bir TextView ekleyelim. Bu sayede yazdığımız arama değerini işeme olayını gösterebilmek içindir. Aşağıdaki kodu ekleyelim.

Yukarıdaki kodu ekledikten sonra arka plana geçerek Java dosyasına geçelim. Imports bölümüne kodlarımızı ekleyelim.

Gerekli Import larımızı yaptıktan sonra global olarak SearchView ve TextView tanımlayalım.

Global değişkenlerimizi tanımladıktan sonra onCreate event ine gelelim ve orada kodların sonuna bir kaç kod ekleyelim. Bu kod parçası bizim TextView u tanımlasın.

Bu tanımı da yaptıktan sonra onCreateOptionMenu event ini açarak bu event içerisinde kodlarımızı yazalım. Aslında tüm iş burada saklı.

MenuInflater ile menu elementlerini elde etmek için bir yapı alıyoruz. Burada hangi menu xml ve değişkeni olduğunu parametre olarak inflate methoduna veriyoruz. Buradan tanımladığımız SearchView a finditem ile id sine göre buluyoruz ve tanımlıyoruz. Tanımlama kodumuzun altında SearchView da yazılan değeri alabilmek için TextChange event ı dinlememiz gerek. Bunun için setOnQueryTextListener event i tanımlıyoruz. İçerisinde iki tane override method tanımlanıyor. Tanımlanan override methodlardaki değerleri sonuc methoduna gönderiyoruz ve bu method bizim tanımladığımız TextView da gösteriyor. Bu şekilde örneğimizi tamamlıyoruz.

Yazımızı bu şekilde tamamlayarak ilk Android Uygulama Geliştirme yazım oluyor.  Umarım yararlı bir yazı olmuştur. Selametle

Kaynak: http://www.java2s.com/Code/Android/UI/UsageofSearchViewinanActionBarasamenuitem.htm

  • Yorumunu eksik etmediğin için teşekkür ederim.

    Yorumunu ben onaylayacağım için biraz bekleyecek ama kısa sürer merak etme :)

Paylaşım Linki:

Web Güvenliği 2 – Kod Hata İhtimalleri

Selamlar,

Web Güvenliği makale dizisinde yazdığımız kodların hata verme ihtimallerini en aza düşürerek daha bilgili ve güvenli web uygulama geliştirme tekniklerinden bahsedeceğim.

Yazdığımız kodlarda genellikle kullanıcıdan aldığımız değerlerden kaynaklı oluşacak hataları hesaplayıp kontrol etmek gerekir. Örnek olarak çok sık yaptığımız string değerini int değerine çevirirken int.Parse veya Convert.ToInt32 gibi methodları direk kullanmamız aslında tehlikeli. Uygulamanın her kodunu Try-Catch blogları içerisine yazıp tüm hatalardan kurtulmak en kolay yoldur fakat bu uygulama performansını düşürmektedir. Bu yüzden tip dönüşümleri, boş olup olmadığı ve işlem kontrollerinde ipuçlarından bahsedeceğim.

1. TryParse ile tip dönüştürme

TryParse methodu ile dönüştürmek istediğiniz tipi hata almadan çevirme imkanı sağlıyor. Tüm kodları Try-Catch olarak almaktan kurtarıyor. Bu method genel tip dönüşümlerinde mevcuttur. Örnek kodlar olarak ise kullanımı şu şekildedir.

ASP.Net’de örnek bir kullanımı ise şu şekildedir. Request.QueryString den gelen değerleri genellikle düzgün bir şekilde kontrol etmememiz sonucunda ciddi açıklar oluşabilir. Örnek olursa Adana ASKİ nin web sitesinde parametre olarak aldığı ID değerini int tipine çevirirken hiç bir kontrol yapılmadığı için verilen bir karakter durumunda site direk hata vermekteydi. Hatada asıl sorun bir üst satırında veritabanı bağlantı cümlesi yer alıyordu. Bu bilgiler ile uzaktan veritabanına bağlana biliyordunuz. Bu tarz bir açık oluşturmamak için aşağıdaki teknikle kullanabilirsiniz.

TryParse method mantığı ise sizden iki parametre değer ister. İlk parametre çevrilecek string değer, ikincisi ise bu çevrilen değerin atanacağı değişkeni istemektedir. out anahtar kelimesi değeri dıştaki bir değişkene atamak için kullanılmaktadır. Aynı zamanda TryParse methodu bool değeri döndermektedir. Böylelikle çevirme işlemi sorunsuz yapılmışsa true değeri, yapılmamışsa false değeri alarak sorunu çözebiliyorsunuz.

2. Null (Atanmamış değer) ya da Empty (Boş değer) kontrolleri

Genellikle string değerlerde karşılaştığımız bir durumdur. Gelen değer atanmamış veya boş olma olasılığı olmaktadır. Hatta değer boşluk karakteri içeren bir değerde olabilir. Bunun kontrollerini yapmak önemli olacaktır. Bu kontrollere basit örnek olarak aşağıda verilmiştir.

Bu örnekte görüldüğü gibi gelen değeri boş veya atanmamış olup olmadığı kontrol edilerek işlem yapılıyor. Böylelikle işlemin daha stabil çalışmasını sağlamaktadır.

3. Nullable ve ?? işleyici kullanımı

Bu iki tanımda yine değer kontrollerinde idealdir. Nullable tanımı ile oluşturulmuş değişkenin boş olup olmadığını hasvalue adında değerliği ile kontrol edip daha rahat işlem yapma olanağına sahip olabiliyorsunuz. Örnek olarak aşağıdaki kodu inceleyelim.

Gördüğünüz gibi Nullable tanımı ile int değişkeni tanımlanınca HasValue ile değer atanıp atanmadığını kontrol ediyoruz ve buna göre de Value ile değeri alıyoruz.

?? işleyici ile değeri kontrol edip varsayılan bir değer atıyabilirsiniz. Örnek olarak veritabanına Null değer girmek istemiyorsunuz onun yerine 1 değerini atamak istiyorsunuz. Bu durumda kısa bir kod ile bu sorunu çözebiliyorsunuz. Örnek kodumuz aşağıdaki gibidir. İnceleyelim ve görelim.

Burada gördüğünüz üzere ASP.NET MVC projemde kullandığım bir ürün ekleme kodudur. Bu kodda Product sınıfındaki State değeri eğer atanmamışsa varsayılan olarak 1 atanıyor. Aynı şekilde SaveDate atanmamışsa bugün olarak atanıyor. ProductLayer classında ekleme işlemi yapılıyor ve geriye bool tipinde değer dönderiyor. Kontroller sonucunda sonuçlar veya hatalar ekleniyor. Sayfa bu sonucu ekrana HTML çıktı olarak sunuyor.

Gördüğünüz üzere örnekler ve teknikler ile belirttik. Eğer hataları yine de susturamıyor sanız tek çare Try-Catch olacaktır. Umarım faydalı olmuştur.Selametle

Web Güvenliği Serisi

Web Güvenliği Nedir?

Web Güvenliği 1 – Log Tutmak

  • Yorumunu eksik etmediğin için teşekkür ederim.

    Yorumunu ben onaylayacağım için biraz bekleyecek ama kısa sürer merak etme :)

Paylaşım Linki:

Mikro Mimikler

İnsanların yüzlerinde istemsiz haraketlilik ve bu haraketliliğin anlam taşıması konusunda araştırmalar yaparken fark ettiğimiz konu Mikro Mimikler oldu. “Lie To Me” adlı dizi ile ilgimizin gittikçe artması bu konuya ciddi yönelimimizi arttırdı. Mikro Mimikler saniyede 1/15 ve 1/25 arasında gerçekleşmektedir. Çok hızlı gerçekleşen bu mimikleri yakalamak oldukça zordur. Mikro mimikleri görmek yetmemektedir. Asıl durum gördüğümüz mimikleri incelemek ve bu mimiklerin anlamlarını bilmemiz de gereklidir.

İnsanlar duygusal varlıklardır. Düşüncelerimiz, duygularımız ile yüzümüze istemsiz yansımaktadır. O an da düşündüğünüz ve hissettiğiniz duygu yüz ifadenize çok hızlı bir şekilde yansıması sizin o an ne düşündüğünüzü de tahmin etmeye yöneltir. İnsanlar bunu kontrol etme şansı neredeyse çok azdır.

Yalan makinesi çalışmaları, insanların kan değerleri, nabız atışları ve sinirsel elektrik akımı ölçerek insanın o anda yalan söyleyip söylemediğini hesaplamaya çalışan birçok çalışma yapılmıştır. Fakat araştırmalarımız neticesinde şu sonuca vardık. Ölçülen değerlerin başka nedenlerden dolayı değişme olanağı çok yüksektir. Bu öne sürülen önergeyi bir örnekle açıklayalım. Bir erkek ile yapılan bir sorguyu başka bir erkek yaparak belirli sorular sorulur ve değerlerin normal olduğu gözükür. Bu durumda bu kişi doğru söylüyor anlamına gelir. 2. Kez bu kişiye başka bir kişi tarafından sorular sorulmaktadır. Fakat soruyu soran kişi bir bayan ve bu bayan çok çekici ve alımlıdır. Karşıdaki erkeğin cinsel hazzını arttırmış ve düşünceleri istemsiz olarak sapmıştır. Ölçülen değerler anormal bir durum almıştır ve makine bunu yalan olarak tespit etmiştir. Fakat sorular ve cevaplar aynı olmasına rağmen soruyu soran kişinin büyük bir faktör oynadığını söyleyebiliriz. Bu yüzden makineler ile ölçülen değerlerle şu anda insanın yalan söyleyip söylemediğini anlayamayız. Fakat başka teknikler kullanabiliriz.

Yeni bir deney oluşturalım ve bu oluşturduğumuz deneyde sorularımıza verilen cevap sürelerini hesaplayalım, sorulara cevap veren kişinin görüntüsünü kaydedelim ve inceleyelim. Sorular sorma esnasında cevap veren kişinin mikro mimiklerini göremeyebiliriz fakat videoyu yavaşça inceleyip izlediğimizde mikro mimikler çok rahat bir şekilde anlaşılacaktır. Mikro mimikleri görerek nasıl gerçeğe varacağız? Sorusu da aklımıza takılmıyor değil. Sorduğumuz sorulara verilen ilk cevap sözlerle değil Mikro Mimikler ile gerçekleşir. İnsan yüzüne takındığı sahte bir ifade olsa da yine bu gerçeği saklayamaz. Örnek olarak “Kardeşinizin ölümünden ne hissediyorsunuz?” sorusunu duyduğunda yüzüne bir üzüntü ifadesi takınsa da aslında mikro mimikler gerçek cevabı verir. Bu soruya verilen sözlü cevap “Üzülüyorum, onu çok severdim.” Gibi bir cevap alınsa da mikro mimiklerde asıl gerçek cevap saklıdır. Eğer yüzde bir tiksinme mikro ifadesi gördüğünüzde aslında üzüntü değil kardeşinden tiksindiğine dair bir belirti oluşur ve bu da bu kişiyi daha da şüpheli yapar. Bundan sonra sorular buna göre ilerlerse yüz ifadeleri onu daha da belirtecektir.

Mikro mimikler yüz ifadelerinin belirli kombinasyonları ile oluşur. Bu kombinasyonlarda göz, dudak, burun, kaş, çene ve yanaklar rol oynar. Ek rol oynayanlar ise boğaz, eller ve göğsümüzdür. Ek rol oynayanlara örnek olarak insan korku duygusunu hissettiği zaman anlık olarak bir yutkunma gerçekleşir. Bu durumda bu kişinin söylenen ifade de korktuğu anlamına gelir. Örnek olarak şiddet görmüş bir kişiye “Bunu size yapanları tanıyor musunuz?” sorunu sorduğunuzda eğer cevabı veren kişi yutkunuyorsa bunu yapan kişiyi tanıyor anlamına gelir. Çünkü bunu yapan kişinin yapacağı başka şeylerden korktuğu için veya eğer o kişiyi söylerse ona yapılacaklardan korktuğu için yutkunmuştur. Bu ihtimaller o anda ki senaryoya göre değişir.

Mikro mimiklerin en büyük ve gizemli özelliği ise evrensel olmasıdır. Asyalı, Afrikalı veya başka ülke veya ırktan olmanız hiçbir şeyi değiştirmemektedir. Bu avantaj, mikro mimikler konusunda yapılan çalışmaları Dünya’nın herhangi bir yerinde de gözükebilecektir. Böylelikle evrensel bir çözüm niteliği taşıyacaktır. Evrensel çözüm oluşturarak Dünya genelindeki büyük sorunları ortadan kaldırma konusunda büyük bir yer sağlayacak ve bu çözümlerin gelişimleri de daha da hızlı bir şekilde artacaktır. Aynı zamanda yapılan çalışmalar ve deneyler insan açısından zararsız olacaktır. Tabi bu yapılan deneyler sadece yüz ifadelerini izlemekse.

  • Yorumunu eksik etmediğin için teşekkür ederim.

    Yorumunu ben onaylayacağım için biraz bekleyecek ama kısa sürer merak etme :)

Paylaşım Linki:

Web Güvenliği 1 – Log Tutmak

Selamlar,

Geçen ki Web Güvenliği ile ilgili yazımdan sonra makale serisine Log Tutmak başlıklı yazımla başlayayım dedim. Log dan biraz bahsedelim ve bunun ASP.NET tarafında nasıl gerçekleştiğine bakalım.

Log, uygulama içerisinde gerçekleşen bir takım olayları not tutma alışkanlığıdır. Bu not tutma işlemlerinde veritabanı logları, uygulama hata logları, sayfa erişim logları gibi ayırabilirsiniz. Biz bu bölümde örnek olarak Log tutma nasıl olduğunu anlatıp, uygulama içerisinde oluşan hataları loglamanın nasıl olduğunu göstereceğim.

Bu makalemde Log tutma konusunda gerçekten güzel bir kütüphane var. Bu kütüphane ile işimizi kolaylaştıralım. NLog adında kütüphanemizi kurarak başlayabiliriz. Nuget Package üzerinden rahatlıkla erişebilirsiniz. Nuget Package Kurulumu makalem ile aşağıdaki NLog için gerekli kütüphaneleri kurabilirsiniz.

Bu kütüphaneleri kurduktan sonra Visual Studio proje dizinmize NLog.config ve NLog.xsd dosyaları yerleşecek. NLog.config dosyasında yapacağımız ayarlar ile loglama işlemlerini gerçekleştirecektir.

NLog konfigürasyonları yapmadan önce veritabanımızda bir tablo oluşturalım. Tablomuzun yapısı aşağıdaki gibi yapmayı tavsiye ederim.

NLog Tablo

 

Tabloyu direk veritabanınızda oluşturmak isterseniz aşağıdaki SQL kodlarını çalıştırabilirsiniz

Tablomuzu oluşturduk. İsterseniz bunun için bir tane de Stored Procedure oluşturalım. Stored Procedure ile daha rahat ve daha hızlı işlem yapabiliriz. Logger adında oluşturduğum

Stored Procedure ümüzü de oluşturduktan sonra artık konfigürasyonlara başlayabiliriz. Konfigürasyonlar için NLog.config dosyamızı açalım.

NLog.config dosyamızda targets ve rules adlı iki alanlar olacaktır. Bu alanlar içerisindeki değerleri silin ve yeniden hazırlayalım. Targets kısmı Loglarımızın nereye kaydedileceği ile ilgili kısımdır. Bu kısımda isterseniz bir dosya, isterseniz bir mail, isterseniz veritabanına yazabiliyorsunuz. NLog bu konuda çok iyi şekilde hazırlanmıştır. Biz veritabanı üzerinde kayıt yapacağımız için aşağıdaki gibi bir ayar ekleyelim. İlgili yerleri siz doldurun.

Ayarlarda yinelenmiş bilgiler mevcut. Örnek olursa veritabanı bilgilerini teker teker de girmeniz gerekiyor bir yandan da ConnectionString olarak da eklemeniz gerekiyor. Ben denediğimde nedense birisini yazmayınca hata alıyorum. ConnectionString i girip InstallConnectionString değerini true yapmama rağmen bağlanamadı. Bunun tam tersini yaptığımda yine çalışmamıştı. NLog’un bug u olabilir. Şuan bu sorun kalkmışta olabilir. Bu ayarlar benim APAL FM Web projemin ayar kodlarından alındı. CommandText e çalıştırılacak komut yazılıyor. Target tagları içerisine eklenen parameter olarak da değerleri yerleştiriyorsunuz. Layout tarafında değişkenler kod tarafında gönderilerek yerleşmektedir.

Rules tagları arasına ise aşağıdaki kodu yerleştirmeniz yeterli. Burada logun eklenme şeklinden bahsetmektedir. Biz buraya pek dokunmamıza gerek yok.

Bu kodu da ekledikten sonra kod tarafında yapmamız gerekenleri yapalım. NLog için temel olarak loglama şekli budur. ASP.NET tarafında geliştirdiğim için burada IP Adresi ve hangi sayfadan geldiğini de alıyorum. Masaüstü uygulaması geliştirenler için IP Adres ve referans sayfa gerekli değildir.

Bu method ile hataları bu methodu çağırarak yapabilirsiniz. ASP.Net Uygulama geliştirenler için otomatik alınan hataları loglayıp başka bir sayfaya yönlendirme işlemi için ise bu bölümü anlatacağım.

ErrorController adında bir controller oluşturalım ve içerisinde Index action a View ekleyelim. View a gerekli tasarımları yapalım ve kaydedelim. Bu anlattığım taraf ise ASP.NET MVC geliştirenler için. Klasik ASP.NET için direk bir Error.aspx oluşturmanız ve tasarlamanız yeterli olacaktır.

Global.asax.cs dosyasına girerek Application_Error event i oluşturalım. Otomatik oluşturulmuş ise aşağıdaki kodlara göre uyarlama yapın.

Üstteki kod ASP.NET MVC geliştirenler içindir. Aşağıdaki ise Klasik ASP.NET ciler için geliyor.

Klasik ASP.NET için kısa öz bir kod. Diğerine göre farklı. Burada hata loglanıp Error.aspx e gönderiliyor. MVC için yazılmış olan kodda StatusCode ve alınan hatayı sayfaya gönderiyor. Bu şekilde otomatik olarak gelen hataları loglayıp ekranada sadece hazırladığınız hata sayfası çıkacaktır. Böylelikle oluşacak hatalar arka planda kaydedilecek ama ön planda gözükmeyecektir. Bu da aldığımız hataya bağlı açıkları yok etmiş olmamıza yarar.

Bu yazımda bu kadar başka bir yazı ile görüşmek dileğiyle, selametle.

Not: Bu makaledeki NLog kütüphanesi Burak hocamın (Burak Selim Şenyurt) NLog yazısı ve videosu ile öğrendiğim bilgiler düzeyinde yazılmıştır.

  • Yorumunu eksik etmediğin için teşekkür ederim.

    Yorumunu ben onaylayacağım için biraz bekleyecek ama kısa sürer merak etme :)

Paylaşım Linki:

Web Güvenliği Nedir ve Ne Tür Güvenlik Açıkları Var?

Web uygulaması geliştiren arkadaşlara buradan selamlar. Bu yazımda “Web Güvenliği” konusunu bu yazı ile temel alıp, teorik ve uygulamalı olarak Web Güvenliğini nasıl sağlayabileceğimize bakacağız. Öncelikle “Web Güvenliği’nden kastımız nedir?” ona bir göz atalım.

Web güvenliği geliştirdiğiniz bir web uygulamasının kötü amaçlı insanlar tarafından suistimal edilmemesi için gereken korumadır. Bu koruma bir developer tarafından yapılabilecek bir korumadır. Web güvenliğini sağlamak için yazdığınız kodu suistimal edebilecek herhangi bir eksiklik dahi bırakmadan yazmaktır. Örnek olursa bir string değeri int e çeviriyorsunuz ve bunun bir sayı yerine karakter gelebileceğini hiç ihtimal etmeden yazdıysanız verecek hatada sizin için ciddi sıkıntılar çıkarabilir. Bu cümleyi okuyanlar “Bir string i int e çevirmek ile ne açık oluşturulabilir ki” sorusunu duyar oluyorum. Bu makale serisi ile bu sorulara birer birer cevap vereceğim. Eksik cevap verdiklerimi yorum ve mailler ile telafisini yaparız.

Web uygulamamızın güvenliğini sağlamamaız web sitemize zarar gelmemesi, verilerin çalınması hatta silinmemesi için aynı zamanda sitenin kullanıcılarını da rahatsız edebilecek sorunlar oluşturmamak için gerekli önlemleri yerine getirmeliyiz. Ben bu makalemde tüm olumsuzlukları yazacağım ve bunları ayrı ayrı makaleler ile çözüme kavuşturacağım.

1. Uygulamada çıkan hataları değerlendirme

Geliştirdiğimiz web uygulaması dış dünya ile bağlantı kurduğunda oluşacak hataları kullanıcıya göstermek ciddi bir sorundur. Bu yüzden oluşacak her hatayı Log tutmak ve kullanıcıyı bir sayfaya yönlendirmek herkes için en ideal çözümdür. Hatanın nedenini ekrana yazdırmak hackerlara yol göstermektir. Bu yüzden aldığınız hataların detaylarını Log tutarak kendi tarafınızda tutun fakat dış dünyaya bunu açmayınız.

2. İş görür kod yazarak ihtimalleri hesaplamamamk

Web uygulamalarınızda yaptığınız işlemleri iş görürcesine yaptığınızda aslında arkanızda açık bırakmış oluyorsunuz. Arka tarafta String i int e çevirip bunun kontrolünü almamak aslında ciddi sorunlara neden olmaktadır. Gördüğüm deneyimlerle size bunu açıklayacağım. Adana ASKİ web sitesinde parametre olarak alınan ID değerini arka tarafta int e çevirirken alacağı hata için herhangi bir önlem alınmamıştı. Örneğin ID değerine “a” yazdığınızda ASP.Net in o sarı renkli hata sayfası çıkıyor ve hata alan kodu gösteriyordu. Hata alan kodun gösterilmesinden ziyade ASP.Net aldığı hatadaki bir üst satır ve 2 alt satırı da beraberinde göstermektedir. Bundan dolayı çevirme işleminin bir üst satırında tanımlanmış SQLConnection nesnesi ve bu nesneye verilmiş bağlantı cümlesi (ConnectionString) de açık olmasıyıdı. Bir string in int e çevrilme hatası ile bir veritabanı bilgilerini rahatlıkla görebiliyorsunuz. Bu durumdan dolayı bu sitenin saldırı alma olasılığı %99 dur :) Aldığınız hatayı Log tutarak hataları gidermek daha iyidir. Makale serimde bunu bire bir yapacağız

3. Session Tokenlardan haberimizin olmayışı

Üyelik sistemli web sitelerimizde yaptığımız işlemlerin Session Token veya anlık doğrulayıcıları olmadığı için oluşturduğumuz ciddi açıklar söz konusu olabiliyor. Bu açık tipine CSRF olarak adlandırılır. Saldırı çeşidinden bahsedersek; tarayıcınızda açık kalmış bir oturumun dışarıdan gelen bir isteğe direk cevap vermesi sonucunda istemsiz işlemler olmasıdır. Örnek olursa eskiden WordPress in bir açığı vardı. Açık şu şekilde işliyor. Web sitenizde WordPress oturumunuz açık bir şekilde kalmış ve gelen bir mailde bir linke tıkladınız. Linkte aslında WordPress e şifre değiştirmesi yapabilen GET parametreleri içeriyor. Açık olan oturumnuz ve token kullanılmadığı için direk işlem gerçekleştirmektedir. Bunu sadece bu şekilde değil, bir web siteye ziyaret ettiğiniz anda bile gerçekleşebilir. JavaScript kodları Client olarak çalışmaktadır. Tarayıcınızdaki kalmış cookies set edilerek yine bu açık tetiklenebilir. Bunların bir çok yolu mevcuttur. İster bir cookies yolu ile isterseniz değişmemiş session token ı ile gerçekleştirilebilir.

4. SQL Injection

Bu açık hala bırakanlar var. Her zaman işleyen bir açıktır. Web uygulamanız üzerinden veritabanınıza erişebilecek bir açıktır. Bunun örneği çoktur. Basit olarak yine Adana ASKİ’nin sitesinde başka bir sayfada parametre olarak alınan bir string tipli değer üzerinden ID alınıyor. Bu ID aslında veritabanına şu şekilde gönderilir. “SELECT * FROM TabloAdi WHERE ID=”+ID olarak gider. Burada ID yerine SQL cümlesini tamamlayabilecek ve üzerine bir şeyler ekleyebileceğiniz anlamına da gelir. Bu durum sonucunda sitede birden fazla sorgu çalıştırabilirsiniz. Bu sorgulardan birisi tablo isimlerini almak olabilir, bu tablo isimlerine göre kolonları almak ve bu kolonlara göre de verileri çekmek olabilir. Yönetim panelinizin bilgileri veritabanında duruyorsa geçmiş olsun :) Bu şekilde oluşan açıklar ciddi açıklardır.

5. Şifrelenmemiş Veriler

Web uygulamanızda dışarıdan alınan saldırıda dahi çalınacak verilerin başkaları tarafından okunmamasını sağlamak gerekir. Örnek olursa kullanıcıların şifreleri bu duruma örnektir. Kullanıcıların bilgileri çalınsa da içerisindeki veriler şifrelenmesi durumunda yine de bu bilgilerin zarar verme konusunda pek bir önemliliği olmayacaktır. MD5 Doğrulaması ile kullanıcıların şifrelerinin 32 karakterli Hash lere çevrilmesi sonucunda sadece doğrulama amaçlı kullanılması en iyi tekniğidir. MD5 Hashler geriye döndürülemeyen bir algoritmaya sahiptir. Bu yüzden şifreleme tekniği değil sadece doğrulama tekniğidir. Böylelikle kullanıcılar şifreyi çalsalar da ellerinde aslında geri döndürülemeyecek hash bulunmaktadır. Böylelikle sonuç alınamayacaktır.

6. Her şeye yetki vermeyin

Kompleksli bir web uygulamasında verilerle yapılan işlemleri kısıtlama yaparak işleme tabi tutulmalıdır. Bu kısıtlama şu şekildedir. Veritabanı ile yapacağınız işlemleri farklı yetkilerde ki farklı kullanıcılara yaptırmak daha mantıklıdır. Örnek olarak SELECT sorgularını A kullanıcısı, INSERT işlemlerini B, UPDATE işlemleri C ve DELETE işlemleri için D kullanıcısını yetkilendirin. Böylelikle A kullanıcısı ele geçirilsede veriler sadece okunur hale gelecektir. Aynı zamanda web uygulamalarınızın çalıştığı sunucudaki kullanıcı da tam yetkili değilde gerekli yetkiler verilmesi durumunda çalışmalıdır. Böylelikle uygulamanız üzerinden sunucuya erişim sağlamalarını kesebilirsiniz.

7. Komut çalıştırma

Web uygulamalarınızda SQL Injection dan sebebiyet verebilecek bir diğer açıktır. Bu açık ciddi bir  problemdir. Çünkü eğer bu açık mevcut ise uygulamanın bulunduğu sunucu üzerinde çalıştırılacak komutlar ile büyük bir problem oluşturulabilir. Örnek olarak Uzak Masaüstü Bağlantısı için kendisine bir kullanıcı oluşturabilir ve oluşturulan bu kullanıcı ile sunucunuza bağlanabilir, dosyalarınızı çalabilir.

8. Cookies Injection

Cookies değerlerinin alınıp başka bir tarayıcı veya bilgisayardan inject edilip o kullanıcı olarak girilmesi bir açıktır. Kullanıcının Cookies leri çalınıp ki başka JS kodları ile alınması sonucunda bu Cookies lerin girilmesi sonucunda web uygulamasına girilmiş olması ciddi bir açıktır. Böylelikle kullanıcının giriş bilgilerini çalmak yerine Cookieslerini çalmak ile normal kullanıcının işlemlerini yapabilecek konumlara denk gelmektedir.

9. Geliştirici bazlı açıklar

Bu aslında diğer açıklar diye geçiyor. Bazı sitelerde görmüştüm. CSS vs JS dosyasını tek bir dosyadan getirmek için kısaca SEO için yaptığı bir açık vardı. PHP tabanlı bir uygulama ve dosya.php adında bir dosya yazılmış. Bu dosya parametre olarak Base64 ile şifrelenmiş bir dosya yolu alıyor. Burada gelen dosya yoluna css veya js dosyaları yerine index.php ve ona bağlı önemli dosyaların yollarını şifrelenmiş olarak verildiğinde sitenin kodları direk gözükmektedir. Bu aptalca bir açıktır. Başka bir açık olarak da debugging açıklarıdır. Uygulama release olmasına rağmen debugging açık olması sonucunda dışarıdan birisi kodları görebilir ve değişiklik yapabilirler.

 

Aklıma gelen açıklardan bahsettim ve bundan sonra bu adımları tek tek bir yazı olarak detaylı bir şekilde açıklayacağım. Selametle

  • Yorumunu eksik etmediğin için teşekkür ederim.

    Yorumunu ben onaylayacağım için biraz bekleyecek ama kısa sürer merak etme :)

Paylaşım Linki:

PHP REST API Service Yazalım

Bu aralar sardığım bir dil PHP. Orta ölçekte bilgim olan PHP üzerinden birazcık yürüyorum. Bakalım neler var neler yok diye. Android uygulaması için Web Services yazılması gerekiyor. Normalde WCF RIA Service ile rahatlıkla yazabilirim fakat gerekli şartlar bizi PHP ye yönlendirdiği için PHP üzerinden yazmam gerekti. PHP üzerinde REST API nasıl yazılır ona bakalım.

Öncelikle bir .htaccess yazalım. Burada Rewrite yapmamız gerekecek. Eğer Wampserver kullanıyorsanız Apache den Rewrite module ü aktif etmeniz gerekecektir. Bunun için gerekli yol, Wampserver Menüsü > Apache > Apache Modules > Rewrite_module e tıklayın ve wampserver otomatik yeniden başlamaz ise elle yeniden başlatın.

www klasöründe bir htaccess yazalım.

Bunu yazdıktan sonra Slim Library kurmamız gerekecek. GitHub’dan indirip ekleyebilirsiniz. Şuan ki sürümünü isterseniz rahatlıkla indirmek istiyorsanız buradan indirebilirsiniz. İndirdiğiniz dosyayı www dizinine çıkarın. Bundan sonra yapmamız gereken bir index.php oluşturmak ve içerisine öncelikle şu kodları eklemek olacaktır.

Burada ilk üç satır Slim Framework ü include edip tanımlamasıdır. EchoResponse methodu ise gelen objeyi json olarak çıktı vermektedir ve aynı zamanda Status Code dediğimiz (404,200,302,401) kodlar ile de mesaj verebilmektedir. Şimdi biz API Servisimiz için neler yapabiliriz. Hemen ona bakalım

GET İşlemleri

GET işlemleri için tanımlamamız gereken örnek kodlar aşağıdaki gibidir.

Burada alınan Get değerlerini ekrana JSON olarak yazdırmaktadır. İsterseniz veritabanı class ı yazarak verilerinizi kontrol ettirerek JSON verileri döndürebilirsiniz.

POST İşlemleri

POST işlemleri de yine GET ile benzerdir. Biliyorsunuz ki GET direk yapılan istekler iken POST ise bazı Client API Araçları ile test edilebilmektedir. Tarayıcı üzerinden direkt erişim sağlanmaz. Bu yüzden Google Chrome Advenced REST API Client ı tavsiye ederim.

Tarayıcı üzerinden /Giris olarak istek yaptığınızda ki sonuç ile POST ederek yaptığınız sonuç farklı olacaktır. Böylelikle aralarındaki farklılıkları göreceksiniz. Bunun yanında PUT,DELETE gibi bir çok HTTP API komutları da yer almaktadır.

Başka bir makale ile görüşmek dileğiyle. Selametle

  • Yorumunu eksik etmediğin için teşekkür ederim.

    Yorumunu ben onaylayacağım için biraz bekleyecek ama kısa sürer merak etme :)

Paylaşım Linki:

PHP Uygulamalarınızı Visual Studio IDE ile Geliştirin

Selamlar,

Bu aralar YGS’den çıktıktan sonra kendimi PHP’ye verdim :) PHP RESTFull API Service yazıyorum. Biliyorsunuz ki PHP kodları yazmak çok farklı bir durum. Genellikle Notepad++ veya Adobe Dreamviewer gibi yazılımlar ile geliştirilir. Açıkçası ya ben alışamadığım kullanamıyorum ya da kullanımları zor. Notepad++ ı genellikle ufak düzenlemeler için kullanırım fakat Dreamviewer ı malesef hiç bir şekilde alışamadım. Tasarım olarak bir şey demiyorum. Kod tarafı gerçekten sıkıcı bir durum. Hele ki bir Data veya Service katmanları yazıyorsanız (Tasarım içeriği 0 olan yerler) gerçekten zorlayan bir durum. Visual Studio ya alışan bir kişi için Visual Studio ile PHP geliştirmek şahane gözüküyor. Bunu sizinle paylaşayım :)

Visual Studio ile PHP uygulama geliştirmek için elimize bir Visual Studio IDE si alıyoruz bir tane de PHP Tools For Visual Studio denilen zat-ı muhterem i alıyoruz. Bu bir extensiondır. Basit bir extension olmadığını ücretli olması ile gösteriyor. Üzücü yanı 30 günlük trial versiyonunu kullanabilirsiniz. Lisans ücretini ödeyebilirseniz sıkıntı yok. Tabi ben burada Trial olarak kullanıyorum. 30 gün içerisinde RESTFull API Service i rahat yazarım. Bana yeterli bir süre bu. Her neyse şimdi bakalım ne nedir.

Eklenti kurulumu basit. Eklenti kurulduktan sonra Visual Studio Templates bölümüne PHP olarak geliyor.

Visaul Studio Gallery - PHP

 

PHP Web Project seçerek bir Web Uygulaması oluşturabiliyorsunuz. Tavsiyem WampServer gibi yazılımlar kullanıyorsanız eğer Location bölümünü www klasörüne göstermenizdir. O zaman daha rahat bir çalışma olabilir. Wamp içerisinde direk bulunarak herhangi bir izin ayarı yapmanıza gerek kalmaz. Projeyi oluşturduktan sonra bakalım neler var.

Visaul Studio - PHP

Yeni bir dile veya yazılım geliştirmeye başlamış kişiler bu kodu yazmadan başlayamaz kuralına uyarak PHP Tools otomatik bir Hello World eklemiş :)

PHP Tools da intellisense özelliği destekliyor. Include methodu ile eklediğiniz class veya dosyalardaki php method ve değişkenleri algılıyor ve yine intellisense özelliği ile listeleyebiliyor. Otomatik hizalama (CTRL + K – D) gibi özellikleri de mevcut.

PHP Tools debugging özelliğini de taşıyor fakat bilgisayarınıza PHP uygulamanızı debug yani derleyebilecek bir yazılıma ihtiyacınız olacaktır. WampServer bu konuda ideal bir yazılım. WampServer kurduktan sonra debugging için Visual Studio nun istediği bir kaç ayar vardır. Bu ayarlar doğrultusunda Remote Debugging kullanarak projenizi derler ve tarayıcı üzerinden incelersiniz. Bu ayarlara gelecek olursak hemen bu ayarlar nasıl yapılıyor ona bakalım.

F5 tuşuna bastığınızda yani Debugging yapmak istediğiniz anda karşınıza gelen bir ekran var.

Visual Studio - PHP Debugging Settings

Bu bölümde Web Platform kullanabildiğimizi söylüyor fakat ben Web Installer kurmama rağmen bu seçenek aktif olmadı. Tam olarak bu konu hakkında pek bir şey diyemeyeceğim. O yüzden Configure PHP Manually seçeneğini seçip işleme devam edelim.

Visual Studio - PHP Debugging Settings 2

Burada gerekli PHP ayarlarımızın yapılmadığı söyleniyor. WampServer ı algılamış. PHP Debugger ı da algılamış. Uyarıdaki View recommendations a tıklayarak bakalım neler yapılması gerektiğini görelim.

Visual Studio - PHP Debugging Settings 3

Biraz genişleterek gereken ayarları görelim. Sol tarafta bulunan ayar değer isimlikleri orta taraftaki şuan da yapılmış olan ayarlar sağ taraftaki ise yapılması gereken ayar değeri demektir. Bunları bulup ayarlamamız gerekiyor. Sonrada hepsini seçip Apply diyerek bu ayarlardan kurtulmamız gerek. Bundan sonra göstereceğim ayarlar PHP.ini üzerinde yapılacaktır. WampServer gibi kullandığınız yazılımlarda PHP.ini dosyasını bulalım ve düzenlemeleri yapalım. Tavsiyem Notepad++ ile açın ve sol taraftaki ayar isimliklerini aratarak açmaktır. Eğer bu ayar isimliğinin önünde noktalı virgül (;) var ise bu işareti kaldırın ve yapılması gereken ayar değerini girin.  Benim yaptığım ayarlar şu şekilde

Bu ayarlardan sonra eklenmesi gereken değerlikler mevcuttur. En son satıra geçerek şu ayarları ekleyin.

Bu satırlarda eklendikten sonra tamamdır. Tümünü seçin ve Apply butonuna basın. Uyarı kalkacaktır ve Ok butonuna basın. Wampserver veya benzeri yazılımınızı yeniden başlatın. Sonra Visual Studio ya gelerek debugging yapın karşınıza PHP.Debugger.Server adlı zat sizden erişim izni isteyecektir. İzin verin gitsin sıkıntı yok. Ve sonuç: Hello World.

Debugging sorununu da çözdükten sonra geldik en sevdiğim özelliği. Debugging with Step by step. Anlamı adım adım derlemedir. Breakpoint koyup değişkenlerin ne değer aldığını görmek hatayı yakalamak için bire bir yardımcı olan etken. Bu özelliği debugging olmadan önce kod satırının sol tarafındaki boşluğa tıklayarak kırmızı bir nokta eklemeniz gerekir ve sonrasında derlemeyi başlatın o satıra geldiğinde F11 e basarak adım adım ilerleyebilirsiniz. Tamamen derlesin adım adım gitmesini istemiyorsanız F5 tuşuna basıp breakpoint i kaldırabilirsiniz.

Evet PHP seveler Visual Studio bu işe de yarıyor :) Umarım yararlı bir yazı olmuştur.

Selametle

  • Yorumunu eksik etmediğin için teşekkür ederim.

    Yorumunu ben onaylayacağım için biraz bekleyecek ama kısa sürer merak etme :)

Paylaşım Linki:

Barış CevizHadi Cevapla Hacı

15 Mart YGS sınavını Ankara Çankaya’da giriyorum. Gece yolculuğumuza başladık. Hiç bilmediğim Ankarayı tanımaya gidiyorum. Hadi hayırlısı. Gördüğüm ilginç şeyleri Internete bağlandıkça yazacağım. YGS Stresi 0 :-) 

  • Yorumunu eksik etmediğin için teşekkür ederim.

    Yorumunu ben onaylayacağım için biraz bekleyecek ama kısa sürer merak etme :)

Paylaşım Linki:

Barış CevizHadi Cevapla Hacı

#FTS Sınav Sistemi Genç Beyinleri Köreltiyor

Biliyorsunuz ki 15 Mart’ta YGS (Yüksek Öğretime Geçiş Sınavı) olacak fakat bu sınavın o kadar gereksiz olduğunu biliyorum ki bendeki var olabilecek her şeyi yok ediyor. Gereksiz bir stres oluşturmanın ve bunu geçerli bir sebepmiş gibi yansıtmalarına karşı çıkıyorum. Ne adil bir sınav oldu ne de eğitimi geliştiren bir sistem. Eğitim sistemimizin ve bu sistemin bölüm sonu canavarları yani sınavlar. Bu sistemi geliştiren ve yararlı olduğunu düşünen fosilleşmiş beyin kalıntısına sahip insanların kararlarıyla yaşıyoruz. Gerçek eğitim sistemi, eğitmenler (öğretmenler) ve amaçlar artık yok olmuş. Para, kar ve temel seviye eğitim verilmektedir. Üretime yönelik değil tüketime ve tüketilmeye yönelik eğitim sisteminden kokan bu bozulmuş peynir kokusu kokan sınavlarınız. Hangi geleceği belirleyen sınavın cevaplandığı kağıt aynı zamanda şans oyunlarının oynandığı kağıt ile eş değer olabiliyor. Pardon şans oyunları daha değerli çünkü ucunda ciddi bir miktarda gelir var. Hem devlet için hem de vatandaş için. Vatandaş ona gelebilecek paranın ihtimalini sayarken devlet gelecek parayı nerede saklayabilirim sorusuna cevap arıyor. Gelecekler ve insan yaşamının kalitesi düşük olduğu bir ülkede insan hayatına zam yapın. Etiket fiyatını yükseltin. İşin ehli olmayanlar işten anlamış gibi davranıyorlar. Buna göz yuman tüm fosillere diyorum ki “Tarihte fosiller ciddi bir izdir ama siz sadece gelecek için çöp duracaksınız. Sizin fosilleriniz bulunduğunda at o çöpleri diyecekler” Unutmayın fikrini paylaşan geliştirir, fikri varmış gibi davranıp başkalarının fikirlerini kendine fikir edinmiş eksik sindirimli varlıklar değil!

  • Yorumunu eksik etmediğin için teşekkür ederim.

    Yorumunu ben onaylayacağım için biraz bekleyecek ama kısa sürer merak etme :)

Paylaşım Linki:

ASP.NET MVC 5 – Dinamik Dropdownlist Oluşturma

Merhabalar,

Gelen mail üzerine bir çırpıda yazayım dedim. ASP.NET MVC 5’de DropDownList oluşturmak biraz farklı. Farklı olmasının sebebi sizden SelectList tipinde bir veri istiyor. Bu veriyi oluşturmak için bazı kolay yollarımız var. Ben bu yazımda Entity Framework ve object bazında göstereceğim. İlk olarak Objectsler ile yapalım.

Öncelikle bir class ımızı olmalı. Oradan bir çok veri varken sadece Id ve DropDownList te göstermek istediğimiz değeri belirtmemiz gerek.

Oluşturduğumuz View içerisinde şu kodlar ile çok rahat yapabilirsiniz.

Bu şekilde farklı bir şekilde DropDownListlerimizi oluşturabiliyoruz. Peki böyle bir tablom varsa ve Entity Framework kullanıyorsam nasıl yapacağım? Hemen bakalım ve yapalım.

HTML tarafında verileri ViewBag ile aktarabilirsiniz. Örnek olursa Controller ı açın ve şu şekilde bir şey yazınız.

Bu kodlardan sonra View daki cshtml dosyanızı aşağıdaki gibi düzenlediğinizde hiç bir sorun oluşmayacaktır.

Selametle => APAL FM’i dinlemeyi unutmayın #APALFMRadyo

Şampiyon GALATASARAY :)

  • Yorumunu eksik etmediğin için teşekkür ederim.

    Yorumunu ben onaylayacağım için biraz bekleyecek ama kısa sürer merak etme :)