Bilgi için teşekkürler hocam saolun

Madde 8:

Upload işlemlerinde sadece uzantıya göre filtreleme yapmayın. Dosya tipinide denetleyin.


Demişsiniz dosya tipini nasıl değerleme yapabiliriz bu konuda tam güvenlik açısından hazır fonsyon var mı elinizde

Riga adlı üyeden alıntı: mesajı görüntüle
Bölümde açılan konulardan yola çıkarak nacizane gördüğüm yanlışları ve temel kodlama mantığını açıklamak istedim.

Burada verilen bilgiler; php kodlamaya başlamış ve orta derece bilgisi olanlar için.

Madde 1:

$_GET, $_POST, $_SESSION, $_SERVER v.b parametlerden değer alırken, bunları bir fonksiyona bağlamanız sizin yararınıza olur.

Neden: 2 yıl sonra $_GET yerine ::GET kullanıldığında phpde tüm kodları değiştirmek yerine tek bir fonksiyonu değiştirirsiniz. Ayrıca bu parametlerden gelen verilere tek bir fonksiyon üzerinden müdahele edersiniz.

Örnek:

function r_get($name)
{
    if($_GET[$name])
    {
        // basit bir filtreleme.
        return htmlspecialchars($_GET[$name]);
        
    }
    else
    {
        return false;
    }
}
Madde 2:

$_GET, $_POST parametlerle aldığınız değerleri filtreden geçirin.

Neden: Güvenlik açıklarını bir nebze engellemiş olursunuz.

Örnek:

function r_get($name)
{
    if($_GET[$name])
    {
        // basit bir filtreleme.
        // PDO kullanılmıyorsa : return htmlspecialchars(strip_tags(mysql_real_escape_string($_GET[$name])));
        
        return htmlspecialchars($_GET[$name]);
        
    }
    else
    {
        return false;
    }
}
Madde 3:

Yönlendirme yaparken mutlaka header fonksiyonundan sonra exit; kullanan.

Neden: Aksi takdirde 301 yönlendirmesi deaktif edilerek sayfaya ulaşılabilir. ( Örneğin: Yönetim paneli sayfası )

Örnek:

function r_redirect($url)
{
    header('location: '.$url);
    exit;
}
Madde 4:

Düzenli çalışmak ve kodlamak bu işin altın kurallarından biri. Kendinize bir template sistemi oluşturun.

Neden: Neyin nerde olduğunu daha hızlı çözebilirsiniz, daha hızlı düzenlemeler yapabilirsiniz, sizden başka biri kodları daha çabuk anlıyabilir ve iş yapabilir.


Örnek ( En basit haliyle, MVC yapısıda kullanabilirsiniz )

Link: site.com/sayfa/hakkimizda

.htaccess

Options +FollowSymLinks
Options -Indexes
RewriteEngine On


RewriteRule ^sayfa/([0-9]+)$ index.php?page=page&sef=$1
index.php

switch($_GET['page'])
{
    case 'page':
        include('theme/page.php');
    break;
    default:
    include('theme/home.php');
}
home.php

r_header(); // Bu isimde bir fonksiyon oluşturarak fonksiyon içerisinde header.php dosyasını include edebiliriz. Böylece her defasında header kodlarını tekrar tekrar yazmayız. Hatta fonksiyonu dinamik hale getirerek meta tag v.b şeyleri işleyebiliriz.

content...

r_footer(); // Header mantığı
Madde 5:

MySQL işlemlerinde direk mysql_query veya pdo classını kullanmak yerine bunları kendi oluşturduğunuz bir class içinde yaparsanız ileride syntax tarafında bir değişiklik olduğunda daha hızlı çözümler üretirsiniz.

Madde 6:

Kodlama yaparken değişkenlerde, dizilerde çift tırnak kullanmaktan kaçının.

Neden: tek tırnak kullanılması performans açısından daha iyidir.

Örnek:


$_POST['page'] // hızlı
$_POST["page"] // yavaş
Madde 7:

Döngü, if işlemlerinde süslü parantez yerine yeni syntaxları kullanın.

Neden: Daha hızlılar ve ilk koda bakışta daha iyi çözümlenebilir.

Örnek:


// HIZLI

foreach($cars as $car):
  echo $car.'<br>';
endforeach;

// YAVAŞ

foreach($cars as $car)
{
 echo $car.'<br>';
}
Madde 8:

Upload işlemlerinde sadece uzantıya göre filtreleme yapmayın. Dosya tipinide denetleyin.

Ayrıca upload edilen dosyaları kesinlikle kendi adı ile kaydetmeyin.

Neden: Klasik güvenlik açıkları.


Madde 9:

Genel gördüğüm yanlışlardan biride yönetim paneli yaparken, index.php dosyasında sadece yetki kontrolu yapılıyor include edilen alt dosyada yetki kontrolu bulunmuyor.

Bu yüzden ilgili alt dosya kodlarında, ilgili dosyanın index.php tarafından include edildiğini doğrulayın.

Örnek

index.php

define('ADMIN_INCLUDED', TRUE);
include('x.php');
x.php

if(!defined('ADMIN_INCLUDED')) { exit; }
Madde 10:

Özetle kesinlikle düzenli kodlar yazın ve dosya düzenine önem verin. Nesne yönelimli programlamaya geçmediyseniz ilk adımı buradan atın. Eğer tercih etmiyorsanız yaptığınız işlemleri, fonksiyonlar haline getirin, bu sizin ileride yapacağınız düzenleme ve eklemelere olumlu katkı sağlayacaktır.

Okuduğunuz için teşekkürler.