Güvenlik Kütüphanesi
"Libraries/ dizini içine taşınan veya bu dizinde oluşturulan kütüphaneler hiç bir tanımlama gerektirmeden kullanılabilir. "
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
ZN dağıtımları için kurulum gerekmez.
↓ composer require znframework/package-security
# Yöntemler
# TimeOnStay [6.2.0][2021-02-27]
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 [6.2.0][2021-02-27]
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 (ZN >= 4.3.2)
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 [6.1.1][2021-01-29]
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 [6.2.2][2021-01-30]
İ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');
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 (ZN >= 1.0.0)
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 (ZN >= 1.0.0)
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 (ZN >= 1.0.0)
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('ZN" Framework'); echo $data;
ZN\" Framework
Bu dönüşümü eski haline getirmek için;
echo Security::injectionDecode($data);
ZN" Frameworkgibi kullanılır.
# HtmlEncode / HtmlDecode (ZN >= 1.0.0)
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>ZN4</b>'); echo $data;
<b>ZN4</b>
Bu dönüşümü eski haline getirmek için;
echo Security::htmlDecode($data);
<b>ZN4</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 (ZN >= 1.0.0)
HTML etiketlerini siler.
string $str | Veri. |
mixed $allowable = '' | İstisna etiketler. |
return string |
Kullanımlar
$data = Security::htmlTagClean('<b>ZN Framework</b>'); echo $data;
ZN 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>ZN Framework</i></b>', '<i>'); echo $data;
ZN Framework
[PHP 7.4]
PHP 7.4 sürümü itibari ile 2. parametre dizi olarak kullanılabilir.
$data = Security::htmlTagClean('<b><i><u>ZN Framework</u></i></b>', ['<i>', '<u>']); echo $data;
ZN Framework
# PhpTagEncode / PhpTagDecode (ZN >= 1.0.0)
PHP taglarını numerik koda çevirir.
string $data | Veri. |
return string |
Dönüştürülen Karakterler
Neyden | Neye |
<?php | <? |
?> | ?> |
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 (ZN >= 1.0.0)
PHP etiketlerini siler.
string $data | Veri. |
return string |
Kullanımlar
$data = Security::phpTagClean('<?php ZN Framework ?>'); echo $data;
ZN Framework
# ScriptTagEncode / ScriptTagDecode (ZN >= 3.0.7)
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 (ZN >= 1.0.0)
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('ZN" Framework'); echo $data;
ZN" Framework
Dönüşümü eski haline getirmek için;
echo Security::nailDecode($data);
ZN" Frameworkgibi kullanılır.
# ForeignCharEncode / ForeignCharDecode (ZN >= 2.0.0)
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 (ZN >= 4.0.23)
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>