Güvenlik Kütüphanesi
Güvenlik açıklarına yönelik oluşturulmuş kütüphanedir. 2 adet kütüphaneden oluşmaktadır; Security ve Secure. Özellikle çapraz script, enjeksiyon gibi risk teşkil edecek kullanımları izole et…
This article is currently available in Turkish. Its English translation is being prepared.
Güvenlik açıklarına yönelik oluşturulmuş kütüphanedir. 2 adet kütüphaneden oluşmaktadır; Security ve Secure. Özellikle çapraz script, enjeksiyon gibi risk teşkil edecek kullanımları izole etmek için oluşturulmuştur. Hiç bir güvenlik sistemi gibi bizde %100 güvenlik garantisi sağlayamayız. Ancak genel olarak yüksek düzeyde güvenlik sağlanmıştır.
Kurulum
Bu bileşen KUT ile birlikte gelir; ayrıca kurulum gerektirmez.
↓ Paket KUT ile birlikte gelir.
Yöntemler
# TimeOnStay KUT 1.0’da desteklenir
Bir sayfa içinde sayfada kalış süresini başlatmak için kullanılır. Özellikle form işlemlerinde botları engellemek için kullanılabilir.
| string $name = 'timeOnStay' | Sayfa süresini tutacak oturum anahtarının ismi. | |
Kullanımı
Security::timeOnStay();
# ValidTimeOnStay KUT 1.0’da desteklenir
Sayfada kalış süresini kontrol etmek için kullanılır. Bu yöntem istek yapanın bot mu yoksa gerçek kullanıcı mı olup olmadığının ayırt edilmesinde kullanışlıdır.
| int $second = 5 | Minimum kalınması gereken süre. | |
| string $name = 'timeOnStay' | Kalış süresini tutan oturum anahtarının ismi. | |
| return bool | ||
Kullanımı
Security::validTimeOnStay(10) or redirect();Yukarıdaki örnekte Security::timeOnStay() yönteminin kullanıldığı sayfada kalma süresi 10 saniyenin altında yukarıdaki kodun bulunduğu sayfaya istek yapılması durumunda yönlendirme yapar.
Uygulama 1
Form üzerinde örnek kullanım.
Dosya: Views/Contact/main.wizard.php@Form::open('contactForm') {[ Security::timeOnStay() ]} . . . @Form::close()
Dosya: Controllers/Contact.phppublic function main() { if( Post::all() ) { if( ! Security::validTimeOnStay(6) ) # 6 saniyeden erken istek yapılmış ise yönlendir. { redirect('invalid/request'); } # your codes } }
CSRFToken KUT 1.0’da desteklenir
Yapılan isteğin geçerli olup olmadığını kontrol eder. Herhangi bir başarısızlık durumunda yönlendirme yapılır.
| string | $redirect = NULL | Geçersiz istek sonrası hangi sayfaya yönlendirme yapılacağı. |
| string | $type = 'post' | Post verilerini kontrol eder. Kullanılabilir Seçenekler: post, get |
Kullanımı
Security::CSRFToken();
[$redirect = string]
Yönlendirme adresini belirler.
Security::CSRFToken('home/invalid', 'get');
[$type = 'get']
Bu parametrenin get ayarlanması durumunda get isteklerini kontrol eder.
Security::CSRFToken(NULL, 'get');
Security::CSRFToken() yönteminin opsiyonel kullanımıdır.
Security::CSRFPost('home/invalid');
Security::CSRFToken() yönteminin opsiyonel kullanımıdır. GET datalarını kontrol eder.
Security::CSRFGet('home/invalid');
# CSRFTokenKey KUT 1.0’da desteklenir
Security::CSRFTokenKey(), Kut\Security\Guard facade'i uzerinden CrossSiteRequestForgery::key()'e yonlenen bir kisayoldur ve oturum icin CSRF token'ini dondurur (yoksa uretir).
$name parametresi artik yok sayilir — hangi deger verilirse verilsin her zaman kanonik 'token' oturum anahtari kullanilir. Eskiden her cagrida token yeniden uretiliyordu ve $name'e gore ayri token'lar tutulabiliyordu (ornegin OrunCP'nin sayfaya ozel md5(URL) anahtari); bu, bir sekmede uzun sure acik kalan formun veya birden cok sekmenin token'ini sessizce geciriyordu. Artik oturum basina tek, sabit bir token var: bir kez uretilir, o oturumdaki her render/form/AJAX cagrisinda ayni deger doner.
| string $name = 'token' | Geriye donuk uyumluluk icin kabul edilir, kullanilmaz. Facade her zaman 'token' yuvasini okur/yazar. |
|
| return string | ||
Kullanimi
echo Security::CSRFTokenKey();d9902834cd95305a55a1cfbd8ebe2a46956c8e30a7cde33506469c3387ae4b32
Facade uzerinden yalniz
CSRFTokenKey()(getir-yoksa-uret) ve asagida anlatilanCSRFRotate()(kosulsuz yenile) erisilebilir. Ozel isimli bagimsiz bir token gerekiyorsa, facade katmanini atlayip cekirdek siniftaki gercek metotlar dogrudan cagrilir:Kut\Security::getCSRFTokenKey('xtoken'); // sadece okur, uretmez Kut\Security::createCSRFTokenKey('xtoken'); // yoksa uretir, varsa ayni degeri dondurur Kut\Security::createCSRFTokenKey('xtoken', true); // kosulsuz yeniler (force)
# CSRFRotate Yeni
Security::CSRFRotate(), kanonik token'i kosulsuz yeniler (CrossSiteRequestForgery::rotate() → Kut\Security::rotateCSRFTokenKey('token')). Sabit-token modelinde token normalde hic degismedigi icin, giris/cikis veya yetki degisimi gibi hassas anlarda eski oturumdan kalan token'i gecersiz kilmak icin acikca cagrilmalidir.
Kullanimi
Security::CSRFRotate(); // login/logout sonrasi
# ValidCSRFTokenKey KUT 1.0’da desteklenir
# ValidCSRFTokenKey KUT 1.0’da desteklenir
Security::validCSRFTokenKey(), CrossSiteRequestForgery::validToken() uzerinden Kut\Security::validCSRFToken()'a yonlenen bir kisayoldur. $name parametresi (CSRFTokenKey'de oldugu gibi) artik yok sayilir — her zaman kanonik 'token' oturum degeri kontrol edilir.
Dogrulama uc sirayla denenir; ilk eslesen kabul edilir, hicbiri eslesmezse false doner. Karsilastirma her adimda hash_equals() ile zamanlama-guvenli yapilir (eskiden !== kullaniliyordu).
- Header —
X-CSRF-Token(modern AJAX yolu; form alani tasimayan JSON istekleri icin). - Bilinen alan adi —
CSRFInput()'un urettigi gizlitokenPOST/GET alani. - Gecis uyumu — istegin herhangi bir alani token degerini tasiyorsa kabul edilir (eski, URL'ye bagli anahtar adlariyla gonderilmis formlari kirmaz). Alan adi gizli degildir; guvenlik degerin
hash_equalsile karsilastirilmasindadir.
| string $name = 'token' | Geriye donuk uyumluluk icin kabul edilir, kullanilmaz. |
| string $type = 'post' | 2. adimda hangi super globalin okunacagi. Kullanilabilir Secenekler: post, get. (1. ve 3. adim her zaman ilgili $_POST/$_GET dizisini tarar.) |
| return bool | |
Kullanimi
if( Security::validCSRFTokenKey() ) { // gecerli istek }
Facade her zaman kanonik
'token''a bakar. Kendi$name'inizle uretilmis bagimsiz bir token'i dogrulamak icin cekirdek sinifi dogrudan kullanin:$token = Kut\Security::createCSRFTokenKey('xtoken'); Post::xtoken($token); if( Kut\Security::validCSRFToken('xtoken') ) { // your codes. }
X-CSRF-Token header'iyla gondermek, JSON govdeli isteklerde (form alani olmayan) tek pratik yoldur.
# NcEncode KUT 1.0’da desteklenir
# NcEncode KUT 1.0’da desteklenir
Kötü içerikli olduğunu düşündüğünüz ifadeleri değiştirmek için kullanılır.
| string $data | Veri. |
| string $badChars | Kötü içerikli karakter veya karakter grupları. |
| string $badChars | Kötü içerikli karakterlerin yerini alacak olan değer. |
| return string | |
Ön Tanımlı Dönüştürülen Karakterler
| Neyden | Neye |
| <!-- | [badchars] |
| --> | [badchars] |
| <? | [badchars] |
| ?> | [badchars] |
| < | [badchars] |
| > | [badchars] |
Kullanımlar
echo Security::ncEncode('Hello or Goodbye', 'or', '[xxx]');Hello [xxx] Goodbye
2. ve 3. parametre dizi türü veride içerebilir. Böylece birden fazla karakter grubunu aynı anda izole edebilirsiniz.
echo Security::ncEncode('Hello or Goodbye', ['Hello', 'Goodbye'], ['[xxx]', '[yyy]']);[xxx] or [yyy]
# XssEncode KUT 1.0’da desteklenir
Genel olarak script kodlardan kaynaklı çapraz enjeksiyonları engellemek için geliştirilmiştir.
| string $data | Veri. |
| return string | |
Dönüştürülen Karakterler
| Neyden | Neye |
| document.cookie | document.cookie |
| document.write | document.write |
| .parentNode | .parentNode |
| .innerHTML | .innerHTML |
| -moz-binding | –moz–binding |
| < | < |
| > | > |
Kullanımlar
echo Security::xssEncode('[|script|]alert(1);script|]');<script>alert(1);</script>
# InjectionEncode / InjectionDecode KUT 1.0’da desteklenir
SQL enjesiyonlarına karşı oluşturulmuş yöntemdir. Enjeksiyonlar genellikle backslash sembolü ile yapılır.
| string $data | Veri. |
| return string | |
Dönüştürülen Karakterler
| Neyden | Neye |
| ' | \' |
| " | \" |
| \ | \\ |
| or.+\= | string empty |
Kullanımlar
$data = Security::injectionEncode('KUT" Framework'); echo $data;Kut\" Framework
Bu dönüşümü eski haline getirmek için;
echo Security::injectionDecode($data);KUT" Frameworkgibi kullanılır.
# HtmlEncode / HtmlDecode KUT 1.0’da desteklenir
Sadece <, >, ', " karakterleri üzerinde dönüştürme işlemi uygular.
| string $data | Veri. | |
| mixed $type = 'quotes' | Çevrim türü. | |
| Seçenekler | quotes, noquotes, compat | |
| mixed $encoding = 'utf-8' | Kodlama türü. | |
| return string | ||
Dönüştürülen Karakterler
| Neyden | Neye |
| ' | " |
| " | ' |
| > | < |
| < | > |
Kullanımlar
$data = Security::htmlEncode('[|b|]KUT[|/b|]'); echo $data;<b>KUT</b>
Bu dönüşümü eski haline getirmek için;
echo Security::htmlDecode($data);<b>KUT</b>gibi kullanılır.
Bu güncellemeden önce & sembolü de dönüştürülmekteydi. Özellikle veri kaydetme sürecinde bu dönüşümün oluşturduğu karakter sorunları nedeni bu dönüşüm artık yapılmamaktadır. Ayrıca bu güncelleme ile zaten dönüştürülmüş karakterler üzerinde tekrar dönüşüm uygulanmayacak şekilde düzenlemeye gidildi.
# HtmlTagClean KUT 1.0’da desteklenir
HTML etiketlerini siler.
| string $string | Veri. |
| mixed $allowable = '' | İstisna etiketler. |
| return string | |
Kullanımlar
$data = Security::htmlTagClean('[|b|]KUT Framework[|/b|]'); echo $data;KUT Framework
Bu güncellemede 2. parametre ile silinmemesi istenen etiketler belirtilebilir. Ayrıca silme işleminin sağlıklı gerçekleştirilebilmesi için veri içinde varsa encode edilmiş HTML etiketleri öncelikle decode edilir ve sonra silme işlemi gerçekleştirilir. Bu nedenle bu işlemden önce Security::htmlDecode() kullanımına ihtiyaç duyulmaz.
$data = Security::htmlTagClean('[|b|][|i|]KUT Framework[|/i|][|/b|]', '[|i|]'); echo $data;KUT Framework
[PHP 8.1.4]
PHP KUT 1.0 ile 2. parametre dizi olarak kullanılabilir.
$data = Security::htmlTagClean('[|b|][|i|][|u|]KUT Framework[|/u|][|/i|][|/b|]', ['[|i|]', '[|u|]']); echo $data;KUT Framework
# PhpTagEncode / PhpTagDecode KUT 1.0’da desteklenir
PHP taglarını numerik koda çevirir.
| string $data | Veri. |
| return string | |
Dönüştürülen Karakterler
| Neyden | Neye |
| <? | |
| [php-close] | ?> |
Kullanımlar
$data = Security::phpTagEncode('[|?php echo 1;'); echo $data;<?php echo 1;
Bu dönüşümü eski haline getirmek için;
echo Security::phpTagDecode($data);<?php echo 1;gibi kullanılır.
# PhpTagClean KUT 1.0’da desteklenir
PHP etiketlerini siler.
| string $data | Veri. |
| return string | |
Kullanımlar
$data = Security::phpTagClean('[|?php KUT Framework ?|]'); echo $data;KUT Framework
# ScriptTagEncode / ScriptTagDecode KUT 1.0’da desteklenir
Script taglarını numerik koda çevirir.
| string $data | Veri. |
| return string | |
Dönüştürülen Karakterler
| Neyden | Neye |
| <script(.*?)> | <? |
| <script> | </script> |
Kullanımlar
$data = Security::scriptTagEncode('[|script|]alert(1);[|/script|]'); echo $data;<script>alert(1);</script>
Bu dönüşümü eski haline getirmek için;
echo Security::scriptTagDecode($data);<script>alert(1);</script>gibi kullanılır.
# NailEncode / NailDecode KUT 1.0’da desteklenir
Tırnak işaretlerini numerik koda çevirir.
| string $data | Veri. |
| return string | |
Dönüştürülen Karakterler
| Neyden | Neye |
| ' | ' |
| " | " |
Kullanımlar
$data = Security::nailEncode('KUT" Framework'); echo $data;KUT" Framework
Dönüşümü eski haline getirmek için;
echo Security::nailDecode($data);KUT" Frameworkgibi kullanılır.
# ForeignCharEncode / ForeignCharDecode KUT 1.0’da desteklenir
Yabancı karakterleri numerik koda çevirir.
| string $data | Veri. |
| return string | |
Kullanımlar
$data = Security::foreignCharEncode('Àŕç'); echo $data;Àŕç
Dönüşümü eski haline getirmek için;
echo Security::foreignCharDecode($data);Àŕçgibi kullanılır.
# Data KUT 1.0’da desteklenir
Secure:: kütüphanesi Security:: kütüphanesinin yöntemlerini kullanan bir filtreleme kütüphanesidir. Güvenlik süzgecinden geçecek veriyi belirtmek için kullanılır.
| string $data | Veri. |
| return this | |
Kullanımlar
echo Secure::data('[|?php echo "This is"; ?|] [|b|]example code![|/b|]') ->phpTagEncode() ->htmlEncode() ->get();<?php echo "This is"; ?> <b>example code!</b>