Google reCAPTCHA Entegrasyonu {PHP} (Örnek)

Bildiğiniz gibi Google amcanın web sitenize gelen spam saldırılarını önlemek amacıyla biz developer’lara sunmuş olduğu bir hizmeti var. Google ReCAPTCHA. Google ReCAPTCHA, web sitenizde bulunan isteklerin kötüye kullanıma karşı korunmasını sağlamak için tasarlanmıştır.

Bu yazıda size web sitenize nasıl entegre edileceğini göstereceğim.

Adım 1: Başlangıç

Buradan web sitenizi kaydedin ve Secret Key alın.

Yapmanız gereken ilk şey, bu tıklamayı yapmak için web sitenizi Google şifrelemek üzere kaydettirmektir. Google hesabınıza giriş yapın ve ilgili formu google’a gönderin.

Kayıt işlemini tamamladıktan sonra google bize kullanmamız gereken 2 kod veriyor. Site Key ve Secret Key.

Screenshot_1

Adım 2: Google ReCAPTCHA’yı web sitemize entegre edelim

Web sitenize entegre etmek için Sunucu tarafında olduğu gibi istemci tarafına ilgili eklemeleri yapmamız gerekir. İstemci HTML sayfasında, aşağıdaki satırı <HEAD> etiketinden önce eklememiz gerekli.

Ve google üzerinden bize dönen widget’ı (recaptcha) sayfamızda göstermek için, aşağıdaki kodu iletişim formu, yorum formu yada nerede kullanacaksak oraya koymamız gerekir.

İlgili form sunucuya gönderildiğinde, chapcha formun içersinde POST verileri olarak ‘g-recaptcha-response’ adında gönderir. Kullanıcının Captcha’yi başarılı şekilde geçip geçmediğini görmek için doğrulamalısınız.

Adım 3: Herşey bu kadar! Şimdi örnek zamanı.

Açıklama kutusu ve gönderme düğmesi bulunan basit form oluşturdum. Bu formun gönderilmesiyle birlikte Google’ın reCAPTCHA doğrulamasını yapmak için back-end’de PHP‘yi kullanacağız.

Sunucu tarafında PHP kullanıyorum. Form gönderme isteğinde POST değişkenini kontrol edeceğiz.

 

Görüldüğü üzere kullanıcının reCAPTCHA gönderip göndermediğini, fiziksel manada insan olup olmadığını yakalayabildik 🙂 Ve işlemlerimizi buna göre yaptırdık. Siz de örnek üzerinden denemelerinizi yapabilirsiniz.

Kolaylıklar dilerim.

PhpMailer Kullanarak E-mail Göndermek {PHP}

PHP doğrudan e-posta göndermek için kendi içerisinde dahili mail() fonksiyonunu barındırır. Bu fonksiyonun kullanımı çok kolay ve etkilidir ancak ciddi birkaç sorunu bulunur.

Öncelikle ana sunucuya büyük bir yük bindirir, e-posta teslimatı konusunda hiçbir garanti vermez. En önemli eksisi (bana göre) mail() fonksiyonunu birçok sunucu spam koruması için engeller. Yani yazmış olduğunuz kod 2 ay sonra çalışmayabilir.

Son dönemde bu sorunla karşılaşanlar tarafından sık sık benzer sorularla karşılaşıyorum. Bu makalemde umarım bu sorunu birlikte halledebileceğiz.

PHPMailer, popüler ve kullanımı kolay bir e-posta gönderim kütüphanesidir. Bu kütüphane, SMTP sunucusunu yapılandırmamıza izin vererek sunucu yükü sorununu ortadan kaldırır, e-posta teslimatını size garanti eder. Ve en önemlisi sunucular tarafından hiçbir şekilde engellenemez.

Haydi Başlayalım!

Öncelikle PHPMailer kütüphanesini indirmeniz gerekiyor. Sizi hemen şuraya alalım.

Dosyayı indirdikten sonra zip dosyasını public_html dosyanıza aktarın. Dosyayı açtıktan sonra public_html / PHPMailer_5.2.0 klasör yapısına sahip olacağız.

Yukarıda örnek bir form oluşturduk, şimdi gönderim işleminin yapıldığı yere geçelim.

Bir sonraki makalemizde görüşmek üzere.

Güvenli PHP Uygulamaları Oluşturmak İçin Yararlı İpuçları

PHP, bildiğiniz gibi web için en popüler programlama dillerinden biridir. Her ne kadar birileri bunu kabullenmek istemese de. Kullanımı oldukça esnek olan bu dil programcıya çok fazla yardımcı olabilir aynı zamanda güvenlik açıkları konusunda barikatlar da yaratabilir.

Bu yazıda, bazı yaygın PHP güvenlik tuzaklarından ve geliştirme hatalarından kaçınmanıza yardımcı olacak 5 ipucu inceleyeceğiz. Peki güvenlik zafiyetlerinden kaçınmamız için neler yapmamız gerekiyor?

1- Uygun Hata Raporlarını Kullanmalısınız

Proje geliştirme işlemi sırasında, uygulama hatası raporlaması sizin en iyi arkadaşınızdır. Hata raporları, sizin yazım hataları bulmanıza yardımcı olur. Değişkenler, hatalı işlev kullanımı ve çok daha fazlasını bu fonksiyonlar bizim için otomatik olarak algılar. Ancak, projeyi yayına alıp bu hataları açık olarak bırakırsanız kötü niyetli kişilere davet çıkarmış olursunuz. Bu hatalar kullanıcılarınıza sisteminiz hakkında bilgi verebilir (Çalıştırdığınız yazılım, klasör yapısı, vs.)

Siteniz canlı yayına gönderildikten sonra, tüm hataları gizlediğinizden emin olmalısınız. Bu, aşağıdaki basit işlevi çağırarak yapılabilir.

2- Kötü Özellikleri Devre Dışı Bırakın

PHP geliştiricileri en eski zamanlarından beri, geliştirmeyi kolaylaştırmak için bazı özellikler kullanırlar. Bunlardan bazıları inanılmaz düzeyde yararlıdır özellikler içerir, bazılarıysa istenmeyen sonuçlara neden olabilir. Ben bunları “kötü” olarak adlandırıyorum. Geliştirme sürecine başlarken yapmanız gereken ilk şeyler, bu özelliklerden bazılarını devre dışı bırakmak olacaktır. Ana bilgisayarınıza bağlı olarak, sanal sunucunuzda bunlar kapalı olabilir veya kapatılmayabilir. Kendi bilgisayarınızda veya benzeri diğer yerel bilgisayarlarda uygulama geliştiriyorsanız bunlar muhtemelen kapatılamazlar. Bu özelliklerden bazıları PHP6’da da kaldırılmıştır, ancak PHP4’te bulunmaktadır. Yalnızca PHP5 uygulamalarında kullanımdan kaldırılmıştır. PHP sürümünüze göre kontrolleri sağlamanızda fayda var.

Register Globals

register_globals ile hızlı bir şekilde uygulanma geliştirmeye yardımcı olması amaçlanmıştır
Örnek ile açıklayalım. Örneğin bir URL’yi ele alalım, http: //fatihsoysal.com/index.php?var=1, bu bir sorgu dizesi içerir.
Register_globals deyimi, $var ile değere erişmemizi sağlar. Şimdi karşı koruma sağlamayan PHP uygulamalarına kolayca erişebiliriz. Bu bizim için istenmeyen bir durum. Bu fonksiyonu devre dışı bırakmak için sunucunuzdaki .htaccess ve php.ini dosyanıza erişim sağlayın. Buradaki değerleri aşağıdaki gibi güncelleyin.

Disabling with .htaccess

Disabling with php.ini

Magic Quotes (magic_quotes_gpc, magic_quotes_runtime, magic_quotes_sybase)

Magic Quotes, programcıların sorunlarını kurtarmak için tasarlanmış bir özellikti. Addslashes () ve benzeri diğer güvenlik özelliklerini kodlarında kullanmamak için. Bu fonksiyon birden fazla eğik çizgi eklenerek hatalara neden olabilir. Veritabanı motorunda, birçok veritabanına özgü karakterler vardır. Bunları kullanmaktan çekinmek gerekir. Bu fonksiyonu normal betikten devre dışı bırakamıyoruz. php.ini ve htaccess güncellemesi gerekmekte.

Disabling with .htaccess

Disabling with php.ini

3- Girişi Doğrula

Yukarıdaki anlattıklarıma ek olarak, koruma için başka yol da girdi doğrulamaktır. Pek çok uygulamada, aslında zaten giriş işlemlerinde ne istenildiğini herkes az çok biliyor.

Örneğin, kullanıcıları listeleyen bir uygulama oluşturduğumuzu varsayıyorum. Doğum günlerini kullanıcıların kendi eklediklerini düşünelim. Nelere ihtiyacım var? 1-12 arası bir ay, bir sayı olarak 1-31 arasında bir gün ve bir yıl. (YYYY biçiminde Uygulamanızda dil bilgisi (regex), kontrolu yapmak güvenlik adına mükemmel bir yoldur.

Aşağıdaki örneğe  bir göz atalım:

4- Kullanıcı Girişinde Siteler Arası Komut Dosyası (XSS) Saldırıları İzleme

Bir web uygulaması genellikle kullanıcılardan gelen girdileri kabul eder ve onu görüntüler bir şekilde. Bu elbette çok çeşitli şekillerde olabilir HTML biçiminde olan yorumlar, linkler veya blog postları da dahil olmak üzere. Data girişi kabul edilirken HTML’ye izin vermek tehlikeli bir şey olabilir. Çünkü bu dolaylı yoldan sistem üzerinde javascript çalıştırılmasına izin vermemiz demektir. Bir delik bile açık bırakılırsa, Javascript çalıştırılabilir ve çerezler hakkında bilgi sahibi olunulabilir. Bu çerez verileri daha sonra gerçek bir örneği taklit etmek için kullanılabilir
Kendinizi bu tür saldırılardan korumanın birkaç yolu vardır. Bir yolu tamamen HTML’ye izin vermemektir (ki bu en güvenlisidir), çünkü o zaman bunu yapmak mümkün değildir. Ancak bunu yaparsak nasıl blog yazacağız dediğinizi duyar gibiyim, haklısınız. Dediğim gibi bu sadece bir seçenek.
HTML kullanmak istiyorsanız alternatif olarak, sadece “BBCode” veya “BB Tags” olarak adlandırılan popüler bir etiket grubuna izin verebilirsiniz. Forumlarda [b] bold [/ b] biçimleri sıklıkla görülür. Normal HTML’e izin vermeyerek böyle bir yol izlemek bazı biçimlendirme özelleştirmesine izin vermek için mükemmel bir yoldur.
Bunun için BBCode kütüphanelerinden birini kullanabilirsiniz. Detaylı bilgi için HTML_BBCodeParser

5- SQL Enjeksiyonuna Karşı Koruma
Sonuncusu fakat sona kaldığına bakmayın, en tanınmış güvenlik saldırılarından biri. En önemlisi. Web: SQL injection. SQL sorgularınızda bulunan Tek tırnak ( ‘) veya çift tırnak ( “) gibi özel karaktarler filtrelenmezse, kullanıcılar soruları her zaman doğru hale getirerek sistemi kullanabilir ve böylece giriş sistemlerini kandırabilir.
Neyse ki PHP, veritabanınızı korumaya yardımcı olacak birkaç araç sunar. Bir sql sunucusuna bağlandığınızda bunları kullanabilirsiniz.Basit bir çağrı ile çalışır ve değişkenlerinizin kullanımı güvenli olmalıdır. PHP ile sunulan büyük veritabanı sistemlerinin çoğunda bu koruma fonksiyonları bulunmaktadır.
MySQLi, bunu iki yoldan biriyle yapmanıza izin verir. Bir sunucuya bağlandığında mysqli_real_escape_string işleviyle:

Veya hazırlanmış ifadelerle.Hazırlanan ifadeler, SQL mantığını kendisine iletilen verilerden ayırmanın bir yöntemidir. MySQLi kitaplığında kullanılan işlevler, değişkenleri hazır ifadeye bağladığımızda girdiğimizi filtreliyor. Bu şekilde (bir sunucuya bağlandığında) kullanılabilir:

En yaygın güvenlik açıkları ve saldırı türlerini sizlerle paylaştım. Zaman buldukça makale yazmaya devam edeceğim. PHP’deki güvenlik konuları hakkında daha fazla bilgi edinmek için bana e-posta adresim yada iletişim bölümünden ulaşabilirsiniz.
Exit mobile version