PHP ile İnternet Programlama



Benzer belgeler
PHP ile İnternet Programlama

PHP ile İnternet Programlama

İnternet Programcılığı Form İşlemleri ve Oturum Yönetimi Örnekleri

JavaScript Örnekleri PDF

PHP Programlama 3. Bölüm. Tolga GÜYER

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

PHP ile İnternet Programlama

Web Formlar ve Sayfalar Arasında Bilgi Gönderme. BATML İnternet Programcılığı 1

VERİ TABANI ve YÖNETİMİ

PHP Programlama 1. Bölüm. Tolga GÜYER

İNTERNET PROGRAMCILIĞI DERSİ ÇALIŞMA SORULARI

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Öğr. Gör. Serkan AKSU 1

CODEIGNITER SEMINERI KÜTÜPHANE YAZMA GÜVENLIK ÖNLEMLERI CODEIGNITER 2.0

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

WEB PROGRAMLAMA. PHP Temelleri 2. Dr. Erman Yukselturk

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

PHP I PHP I. E. Fatih Yetkin. 26 Eylül 2011

Arayüz Geliştirme Dokümantasyonu

1-100 tam puan üzerinden notları harf notuna çeviren Php kodunu yazınız. <?php


PHP kodları çoğu zaman HTML kodları arasına gömülü olarak yazıldığından öncesinde HTML kodlarınının bilinmesinde fayda vardır.

Bölüm 10: PHP ile Veritabanı Uygulamaları

CSRF (XSRF, Cross Site Request Forgery Cross Site Reference Forgery ) Nedir? Nasıl Kullanılır? ve Nasıl Korunulur?

Güvenlik Java ve Web Uygulama Güvenliği

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Web Programlama Kursu

9. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ.

JAVASCRIPT JAVASCRIPT DİLİ

ORT3167 İnternet Programcılığı 1 Ders1-2. Öğr. Grv. Aybike ŞİMŞEK

8. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ.

EXISTS VE NOT EXISTS fonksiyonları

SAKLI YORDAM (Stored Procedure) Sibel Somyürek

HSancak Nesne Tabanlı Programlama I Ders Notları

BİL-142 Bilgisayar Programlama II

SESSİON KULLANIMI. .Aşağıdaki Kodları da SessionDevam.asp adıyla kaydedelim. Language=VBScript Codepage="1254"%>

Oturum Öncesi Tanımlı Oturum Kimliği Çerezi Açığı Gökhan

Yukarıdaki örnekte görüldüğü üzere her php komut satırı noktalı virgül (;) ile biter.

Mysql Klası Kullanılarak Yapılan Öğrenci Kayıt Uygulaması

ORACLE DA KÜRSÖRLER. Gerekli sistem değişkenleri

İNTERNET PROGRAMCILIĞI I


SELÇUK ÜNİVERSİTESİ BOZKIR MESLEK YÜKSEKOKULU VERİTABANI-II DERSİ FİNAL SINAVI

-- işareti tek satırlık açıklamalarda kullanılır. Açıklama olarak yazılan satırın önüne konulması yeterlidir.

Web Tasarımı - Yrd. Doç. Devkan Kaleci 1

İnternet Programcılığı Dersi 2.Dönem Ders Notu

İnternet Programcılığı

4 Front Page Sayfası Özellikleri

Python Programlama Dili

PHP, nesne-yönelimli (object-oriented) bir dil olduğu için, nesne oluşturma imkânına ve bunların kullanılmasını sağlayan metodlara da sahiptir.

İLERİ VERİTABANI SİSTEMLERİ SUAT ÜSTKAN

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

KULLANICI TANIMLI FONKSİYONLAR (Devam)

Veritabanı Dersi. Teoriden Pratiğe. Çağıltay N.E., Tokdemir G. Veritabanı Sistemleri Dersi -Bölüm XXV: Web'den Erişim Çağıltay, N., Tokdemir, G.

Veritabanı. SQL (Structured Query Language)

ÖĞRENME FAALİYETİ 1 ÖĞRENME FAALİYETİ 1 1. FORMLAR

Dinamik Kodlama. [X] [X] Yeni Fonksiyon

Daha önce bu işlemin iki tane dosya oluşturduğunu gördük. GecDenTest.aspx dosyasının source kısmında içeriğini inceleyecek olursanız en başta

VISUAL BASIC DE İŞLETİM SİSTEMİ DENETİM KOMUTLARI VE FONKSİYONLARI

İNTERNET PROGRAMCILIĞI HAFTA MYSQL - PHPMYADMIN. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Mysql Nedir.

App İnventor-Pide Sipariş Uygulaması

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

PHP ile İnternet Programlama


PostgreSQL ve PL/pgSQL

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

Mikro Ayarları. Mikro Programının kurulu olduğu veritabanı ve web servisi için bağlantı ayarlarının yapıldığı menüdür.

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

NB Macro Kullanımı Hakkında Genel Bilgiler

KEÖS UYGULAMALARINA YETKİLENDİRME KILAVUZU

Php Programlama Dili MySQL Uygulamaları

İNTERNET PROGRAMCILIĞI DERSİ

Veri Tabanı Tasarım ve Yönetimi

Üst Düzey Programlama

Response : Sunucunun istemciye veri yollamasını

VERİ GÜVENLİĞİ. Web Uygulamaları Güvenliği. Özer Çelik Matematik-Bilgisayar Bölümü

5. Tablo İşlemleri. Bu bölümü bitirdiğinizde,

VERİTABANI Veritabanı Yönetimi

MODÜL 2 HTML İLE GELİŞMİŞ ÖZELLİKLER

Vega Ayarları. Vega Programının kurulu olduğu veritabanı ve web servisi için bağlantı ayarlarının yapıldığı menüdür.

Bir çeşit prosedür. Ancak bu prosedür kendiliğinden çalışır. Çalışması için tabloya veri eklemek, veri silmek, veri değiştirmek yeterlidir.

Web Uygulamaları Mimarileri ve Güvenliği

İNTERNET PROGRAMCILIĞI HAFTA. PHP ile FORM İŞLEMLERİ. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Form Elemanları Kullanımı

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

Print Komutu ile Değişkenleri Yazdırmak

<html> <head> <title>sayfa Başlığı</title> </head> <body> Bu benim ilk sayfam <b>bu metin koyu</b> </body> </html>

Kets DocPlace LOGO Entegrasyonu

yeni_uye_kayit.ascx UserControl sayfamızda, kaydedilmek istenen üye eğer daha önce veritabanımızda kayıtlı ise bunu buldurup kullanıcıyı uyaralım;

ASP.NET 1. DURUM YÖNETİMİ. BLM 318 e-ticaret ve Uyg. Durum Yönetimi Nedir? Durum Yönetimi: Karșılaștırma İÇERİK. Sunucu-taraflı Durum Yönetimi

Web Tasarımının Temelleri

TESİ. indeks. söylenebilir?? bir ilişkidir d) Hiçbiri. veya somutlaştırılmış. düzeyidir? sağlayabilir? sına. d) Hepsi. olabilir? c) Verilerin d) Hepsi

Web Site Tasarımı (Html-Css) (SD0139) Murat KARA 2017

JETSMS XML Mesaj İşlemleri Yardım Dokümanı Tarih Sürüm XML ile Mesaj İşlemleri

Upgrading Internet Technology skills of Information and Communication Technologies (ICT) Professionals

Php 5 ile Filtreleme İşlemleri

Veritabanı Tasarımı. Kullanıcı Erişimini Kontrol Etme

Transkript:

PHP ile İnternet Programlama Doç.Dr. Gazi Üniversitesi Gazi Eğitim Fakültesi Bilgisayar ve Öğretim Teknolojileri Eğitimi Bölümü 5. BÖLÜM: Oturum Yönetimi ve Güvenlik

Sayfaya Yönlendirme PHP sayfamızdan belirli koşullar altında başka bir sayfaya yönlendirme yapmamız gereken durumlarda kullanabileceğimiz bir çok yöntem vardır. Aşağıdaki örnekte bu işlem header() fonksiyonu kullanılarak gerçekleştirilmiştir. <?php ob_start();?> <form action="" method="post"> <p>şifre: <input type="password" name="sifre" ></p> <p><input name="dugme" type="submit" ></p> </form> <?php if(isset($_post["dugme"])){ $sifre=$_post['sifre']; if ($sifre=="m") { header("location: http://localhost/yonlendirme_1/sifre_tamam.html"); } else{header("location: http://localhost/yonlendirme_1/sifre_olmadi.html");}} ob_end_flush();?>

Sayfaya Yönlendirme Örnek kodda yer alan ob_start() ve ob_end_flush() fonksiyonları, Cannot modify header information - headers already sent by hatasını engellemek için kullanılmaktadır. Ancak belirli bir sayfaya şifre denetimli olarak girilmesini sağlayacak kodumuzda önemli güvenlik açıkları bulunmaktadır. Örneğin geçerli şifrenin kod içersinde yer alması bu tür uygulamalarda kabul edilebilir bir yöntem değildir. Kullanıcı adları ve şifreler veritabanı sisteminde bir tablo içersinde saklanırlar. Bir sonraki örneğimiz bu doğrultuda geliştirilmiştir.

Sayfaya Yönlendirme <form action="" method="post"> <table width="250" border="1"> <tr> <td bgcolor="#ffffcc">kullanıcı Adı :</td> <td bgcolor="#33ffff"><input size="20" type="text" name="kln"></td> </tr> <tr> <td bgcolor="#ffffcc">şifre :</td> <td bgcolor="#33ffff"><input size="20" type="password" name="sfr"></td> </tr> <tr> <td colspan="2" bgcolor="#ffcc99"><input name="gonder" type="submit" value="gönder"></td> </tr> </table> </form> <?php function sqlconnect() { $snc1 = mysql_connect("localhost","root",""); $snc2 = mysql_select_db("kullanici"); mysql_query("set NAMES 'latin5'"); // Türkçe harfleri içeren karakter setine geçiliyor. $sncdeger = $snc1 and $snc2; return $sncdeger;} if(isset($_post["gonder"]) ) { if (sqlconnect()){ $kullanici_adi=$_post['kln']; $sifre=$_post['sfr']; $sql="select kln, sfr FROM kln WHERE kln='$kullanici_adi' AND sfr='$sifre'"; $sorgu=mysql_query($sql); if(mysql_num_rows($sorgu)) { echo "<meta http-equiv=\"refresh\" content=\"0; url=tamam.php\">";} else {print "Şifre yanliş girilmiş"; echo "<meta http-equiv=\"refresh\" content=\"2; url=index.php\">";} } }?>

Sayfaya Yönlendirme Bu uygulamamızda kullanıcı tarafından girilen kullanıcı adı ve şifre bilgileri veritabanında yer alan kln adlı bir tablodaki kayıtlarla karşılaştırılarak kontrol edilmekte, ancak eşleşme sağlandığı durumda tamam.php sayfasına yönlendirme yapılmaktadır. Aksi durumda şifrenin yanlış girildiği bildirimi yapılarak index.php sayfası tekrar yüklenmektedir. tamam.php sayfasının içeriği ise aşağıdaki gibidir. <?php echo "TAMAM";?>

Sayfaya Yönlendirme Bu örnekte ise yönlendirme işlemi meta etiketi kullanılarak gerçekleştirilmiştir. Veritabanı denetimi, bir kullanıcının internet tarayıcısının adres çubuğuna doğrudan tamam.php dosyasının adresini yazarak ulaşmasını engelleyemez. Bunu kontrol edebilmek için, tamam.php dosyası üzerinde ikinci bir kullanıcı denetimi gerçekleştirilmelidir. Bunun için ise kullanıcı adı ve/veya şifre bilgilerinin tamam.php dosyasına aktarılması gerekir. Bu aktarma işleminin en güvenilir yolu, oturum yönetimi ile sağlanmaktadır.

Sonraki slaytta yer alan örnekte, ilk olarak bir kullanıcı oturumu (session) başlatılmıştır. Bu durum, oturum süresince kullanıcı tarafından girilen kullanıcı adı bilgisinin bir oturum değişkeninde saklanabilmesi ve dolayısıyla başka sayfalara aktarılabilmesi olanağını sağlamıştır.

<? session_start();?> <form action="" method="post"> <table width="250" border="1"> <tr> <td bgcolor="#ffffcc">kullanıcı Adı :</td> <td bgcolor="#33ffff"><input size="20" type="text" name="kln"></td> </tr> <tr> <td bgcolor="#ffffcc">şifre :</td> <td bgcolor="#33ffff"><input size="20" type="password" name="sfr"></td> </tr> <tr> <td colspan="2" bgcolor="#ffcc99"><input name="gonder" type="submit" value="gönder"></td> </tr> </table> </form>

<?php function sqlconnect() { $snc1 = mysql_connect("localhost","root",""); $snc2 = mysql_select_db("kullanici"); mysql_query("set NAMES 'latin5'"); // Türkçe harfleri içeren karakter setine geçiliyor. $sncdeger = $snc1 and $snc2; return $sncdeger; } if(isset($_post["gonder"]) ) { if (sqlconnect()) { $kullanici_adi=$_post['kln']; $sifre=$_post['sfr']; $sql="select kln, sfr FROM kln WHERE kln='$kullanici_adi' AND sfr='$sifre'"; $sorgu=mysql_query($sql);

if(mysql_num_rows($sorgu)) { $_SESSION['username'] = $kullanici_adi; // kullanıcı adı istemci tarafındaki session dosyasına aktarılıyor. echo "<meta http-equiv=\"refresh\" content=\"0; url=tamam.php\">"; } else { session_unset(); // session dosyasındaki değerler siliniyor. print "Şifre yanliş girilmiş"; echo "<meta http-equiv=\"refresh\" content=\"2; url=index.php\">"; } } }?>

$_SESSION['username'] adlı değişkende saklanan kullanıcı adı, aşağıda içeriği verilen tamam.php dosyasında veritabanından tekrar denetlenmiştir. Dolayısıyla adres çubuğuna doğrudan tamam.php dosyasının adresinin yazılması suretiyle sisteme izinsiz giriş yapılması engellenmiştir. <?php session_start(); mysql_connect("localhost","root",""); mysql_select_db("kullanici"); mysql_query("set NAMES 'latin5'"); $sql="select kln, sfr FROM kln WHERE kln='".$_session["username"]."'"; $sorgu=mysql_query($sql); if(session_is_registered("username") and mysql_num_rows($sorgu)) { echo "TAMAM"; // Kullanıcı adı doğruysa yapılacak işlemler burada olacak. }else{echo "YETKİSİZ KULLANICI!";} session_destroy();?>

Son örneğimizde, SQL-injection olarak adlandırılan, kötü amaçlı kullanıcıların sisteme giriş yapmak amacıyla kullandıkları tekniğe karşı alınacak basit önlemler üzerinde durulmuştur.

SQL Injection Nedir? PHP için meta karakter olarak adlandırılan bazı karakterler, kritik bir önem arz ederler. Örneğin \ karakteri gibi. Bu karakterlerden en önemlisi de programatik yapılarla sabit metinleri, yani text ve stringleri birbirlerinden ayırmaya yarayan (tek tırnak) karakteridir. Kullanıcı adı ve/veya şifre girişlerinin yapıldığı metin kutularına bu karakterin özelliğinin kullanıldığı SQL cümleleri girilerek, daha sonra programımız tarafından gerçekleştirilecek SQL sorgulamasının sonuçları her durumda geri döndürmesi sağlanabilir.

Örneğin, SELECT * FROM kullanici WHERE kln = '' OR ''='' AND sifre = '' OR ''='' biçimindeki bir sorgulamanın sonucu her durumda doğru (true) olacaktır. Dolayısıyla kullanıcı tablosundaki bütün kullanıcıları getirecektir. Bunu ise kullanıcı adı ve şifre alanlarına sırasıyla ' OR ''=' ve ' OR ''=' girerek sağlayabiliriz.

Bu durumdan addslashes adlı basit bir PHP fonksiyonunu doğru bir biçimde kullanarak korunabiliriz. Yapmamız gereken ilk olarak, kullanıcı tarafından girilen ve formdan gönderilen kullanıcı adı ve şifre verilerine, SQL sorgulamasına sokmadan önce addslashes fonksiyonu ile \ karakterlerini eklemektir. Bu fonksiyon kullanıcı adı ve şifre içersinde yer alan tek tırnak karakterlerinden önce \ meta karakterini eklemek suretiyle bu karakterleri etkisiz hale getirmektedir.

Aşağıda bu anlatılanların gösterildiği örnek bir kod parçası verilmiştir: $kullanici_adi=addslashes(trim($_post['kln'])); $sifre=addslashes(trim($_post['sfr'])); $sql="select kln_kodu, sifre FROM kullanici_profili WHERE kln_kodu='$kullanici_adi' AND sifre='$sifre'"; $sorgu=mysql_query($sql); if(mysql_num_rows($sorgu)) { $_SESSION['username'] = $kullanici_adi; }