

Php De Güvenlik.Oturum Çalmayı Engellemek İçin Bir Makele Ancak Yorumlayamadım.
-
Açık Oturum Bilgileri
Web sayfası birden fazla sayfanın bulunduğu bir sunucuda bulunduruluyorsa tek başına bir tek sunucuda (dedicated server) bulunması durumundan daha fazla riske sahiptir.Paylaşılan sunucuların en büyük riski oturum bilgilerinin ortak bir yerde saklanmasıdır. Ön tanımlı olarak PHP oturum bilgilerini /tmp altında doslayarda tutuyor. Ön tanımlı değerlerin her zaman saldırganların için ilk baktıkları yer olduğuna dikkat edilmelidir. Oturum dosyalarına sadece web sunucusu ulaşabilir :$ ls /tmp
total 12
-rw------- 1 nobOdy nobOdy 123 May 21 12:34 sess_dc8417803c0f12c5b2e39477dc371462
-rw------- 1 nobOdy nobOdy 123 May 21 12:34 sess_46c83b9ae5e506b8ceb6c37dc9a3f66e
-rw------- 1 nobOdy nobOdy 123 May 21 12:34 sess_9c57839c6c7a6ebd1cb45f7569d1ccfc
$
Tabiki bir PHP kodu sayesinde bu dosyalara kolayca ulaşılabilir.php.ini dosyasındaki safe_mode belirteci bu ve buna benzer durumları engeller. Fakat saldırganlar farklı programlama dilleri kullanarak oturum bilgilerine ulaşmaya çalışabilirler.Bunun için şöyle bir çözüm uygulanabilir. Herkesin kullandığı yerler oturum kayıt etmek için kullanılmamalıdır. Veritabanaı, ki sadece sizin hesabınız tarafından ulaşılacaktır, oturum bilgilerinin kaydı için kullanılabilir. Bu session_set_save_handler() fonksiyonu kullanılarak yapılabilir.Oturum bilgilerinin veritabanında tutulmasını sağlayan bir PHP örneği :<?php
session_set_save_handler(’open’, ’close’, ’read’, ’write’, ’destroy’, ’clean’);
function open()
{global $_sess_db;if ($sess_db = mysql_connect(’127.0.0.1’, ’myuser’, ’mypass’)){return mysql_select_db(’sessions’, $_sess_db);}return false;}
function close()
{global $_sess_db;return mysql_close($_sess_db);}
function read($id)
{global $_sess_db;$sql = "SELECT dataFROM sessions
WHERE id = ’$id’";
if ($result = mysql_query($sql, $_sess_db)){$record = mysql_fetch_assoc($result);return $record[’data’];}return false;}
function write($id, $data)
{global $_sess_db;$access = time();$data = mysql_escape_string($data);$sql = "REPLACEINTO sessions
VALUES (’$id’, ’$access’, ’$data’)";
return mysql_query($sql, $_sess_db);}
function destroy($id)
{global $_sess_db;$sql = "DELETEFROM sessions
WHERE id = ’$id’";
return mysql_query($sql, $_sess_db);}
function clean($max)
{global $_sess_db;$old = time() - $max;$sql = "delete from sessions where access < ’$old’";return mysql_query($sql, $_sess_db);}
?>
Bu kod veritabanında sessions adında ve aşağıdaki yapıda bir tablo olmasını gerektirir. Tablo :mysql> DESCRIBE sessions;
+--------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+------------------+------+-----+---------+-------+
| id | varchar(32) | | PRI | | |
| access | int(10) unsigned | YES | | NULL | |
| data | text | YES | | NULL | |
+--------+------------------+------+-----+---------+-------+
Bu tablo aşağıdaki SQL komutu ile oluşturulabilir :CREATE TABLE sessions
(
id varchar(32) NOT NULL,access int(10) unsigned,data text,PRIMARY KEY (id));
Oturum bilgileri veritabanında saklandığında oturum güvenliği veritabanı güvenliğine bırakılmış olur.
// arkadaşlar lütfen yardım edin :S bir türlü çıkamadım işin içinde adam güzel anlatmış diyeceksiniz evet ama hala oturtamadım.
yada yeni php versiyonlarında bu açık kapatılmışmıdır.
-
adım açıklaması bir den fazla kişiye host luk yapan bir firma session bilgilerini bi yerde toplar ancak bi komutla bunlara ulaşılabilir diyo.
Daha sonrada sizin session unuzla panelinize ulaşabilir diyo tarzından bi ifade.. Ben bunu kendi yaptığım siteye entegre etmek istiyorum ama yapamıyorum.
Birazdaha amatör biri olarak bana bunu açıklayabilecek bi arkadaş bekliyorum...
-
Diyor ki;
"Sessionlar default olarak /tmp klasöründe bulunurlar. Buraya da saldırganlar bazı yollarla erişebilirler vs. O yüzden sessionları db de tutmak daha akıllıca" demiş.
Bu kadar kasmaya gerek yok bence.
session_save pathı htaccess ile değiştirmek yeterli olucaktır.
php_value session.save_path "/home/dizin"