KKUT Docs

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

Security::timeOnStay(string $name = 'timeOnStay') : void
Security::validTimeOnStay(int $second = 5, string $name = 'timeOnStay') : bool
Security::CSRFToken(string $redirect = [[NULL]], string $type = {{'post'}}) : void
Security::CSRFTokenKey(string $name = 'token') : string
Security::validCSRFTokenKey(string $name = 'token', string $type = {{'post'}}) : bool
Security::ncEncode(string $string, mixed $badWords, mixed $changeChar) : string
Security::xssEncode(string $string) : string
Security::injectionEncode(string $string) : string
Security::injectionDecode(string $string) : string
Security::htmlEncode(string $string, string $type = {{'quotes'}}, string $encoding = {{'utf-8'}}) : string
Security::htmlDecode(string $string, string $type = {{'quotes'}}) : string
Security::htmlTagClean(string $string, mixed $allowable = '') : string
Security::phpTagEncode(string $string) : string
Security::phpTagDecode(string $string) : string
Security::phpTagClean(string $string) : string
Security::scriptTagEncode(string $str) : string
Security::scriptTagDecode(string $str) : string
Security::nailEncode(string $str) : string
Security::nailDecode(string $str) : string
Security::foreignCharEncode(string $str) : string
Security::foreignCharDecode(string $str) : string
Secure::data(string $str) : this

# 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.php
public 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'); 
CSRFPost

Security::CSRFToken() yönteminin opsiyonel kullanımıdır.

Security::CSRFPost('home/invalid'); 
CSRFGet 

Security::CSRFToken() yönteminin opsiyonel kullanımıdır. GET datalarını kontrol eder.

Security::CSRFGet('home/invalid');

# CSRFTokenKey KUT 1.0’da desteklenir

Rastgele CSRF token anahtarı üretir. Özellikle çoklu form kullanımı gerektiğinde kendi tokeninizi oluşturmak için kullanabilirsiniz.

string $name = 'token' Oluşturulacak tokeni tutacak isim bilgisi. Farklı tokenler oluşturacaksınız bu parametreyi kullanın.
return string

Kullanımı

echo Security::CSRFTokenKey('xtoken');
d9902834cd95305a55a1cfbd8ebe2a46956c8e30a7cde33506469c3387ae4b32

 

 

# ValidCSRFTokenKey KUT 1.0’da desteklenir

İsteğe bağlı oluşturulan tokeni kontrol etmek için kullanılır.

string $name = 'token' Kontrol edilecek token adı.
string $type = 'post' Post verilerini kontrol eder. Kullanılabilir Seçenekler: post, get
return bool

Kullanımı

Security::validCSRFTokenKey('xtoken');
Gerçerli Token Kontrolü

Oluşturulan token adı ne ise post veya get gönderiminde de aynı isim kullanılmalıdır.

$token = Security::CSRFTokenKey('xtoken');

Post::xtoken($token);

if( Security::validCSRFTokenKey('xtoken') )
{
    # your codes.
}

# 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&#46;cookie
document.write document&#46;write
.parentNode &#46;parentNode
.innerHTML &#46;innerHTML
-moz-binding &#150;moz&#150;binding
< &#60;
> &#62;

Kullanımlar

echo Security::xssEncode('[|script|]alert(1);script|]');
&#60;script&#62;alert(1);&#60;/script&#62;

# 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" Framework

gibi 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
' &quot;
" &#039;
> &lt;
< &gt;

Kullanımlar

$data = Security::htmlEncode('[|b|]KUT[|/b|]');
echo $data;
&lt;b&gt;KUT&lt;/b&gt;

Bu dönüşümü eski haline getirmek için;

echo Security::htmlDecode($data);
<b>KUT</b>

gibi kullanılır.

& Dönüşümü Kaldırıldı KUT 1.0’da desteklenir

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

[$allowable]

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
&#60;&#63;
[php-close] &#63;&#62;

Kullanımlar

$data = Security::phpTagEncode('[|?php echo 1;');
echo $data;
&#60;&#63;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(.*?)> &#60;&#63;
<script> &#60;/script&#62;

Kullanımlar

$data = Security::scriptTagEncode('[|script|]alert(1);[|/script|]');
echo $data;
&#60;script&#62;alert(1);&#60;/script&#62;

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
' &#39;
" &#34;

Kullanımlar

$data = Security::nailEncode('KUT" Framework');
echo $data;
KUT&#34; Framework

Dönüşümü eski haline getirmek için;

echo Security::nailDecode($data);
KUT" Framework

gibi 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;
&#192;&#341;&#231;

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();
&#60;&#63;php echo &quot;This is&quot;; &#63;&#62; &lt;b&gt;example code!&lt;/b&gt;
KUT Framework 1.0Katmanlı Uygulama Tabanı

Kur. Uyarla. Türet.