folder Tahribat.com Forumları
linefolder Asp - Php - Cgi - Perl
linefolder Php De Güvenlik.Oturum Çalmayı Engellemek İçin Bir Makele Ancak Yorumlayamadım.



Php De Güvenlik.Oturum Çalmayı Engellemek İçin Bir Makele Ancak Yorumlayamadım.

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    PHP-SEO Developer
    Erdem
    Erdem's avatar
    Kayıt Tarihi: 04/Haziran/2002
    Erkek

    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 data
                FROM   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 = "REPLACE
                INTO    sessions
                VALUES  (’$id’, ’$access’, ’$data’)";
     
        return mysql_query($sql, $_sess_db);
    }
     
    function destroy($id)
    {
        global $_sess_db;
     
        $sql = "DELETE
                FROM   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.


    Php for SEO nun ardından Php for Gcode (CNC)
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    PHP-SEO Developer
    Erdem
    Erdem's avatar
    Kayıt Tarihi: 04/Haziran/2002
    Erkek

    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...


    Php for SEO nun ardından Php for Gcode (CNC)
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    risperdal
    risperdal's avatar
    Kayıt Tarihi: 13/Haziran/2006
    Erkek

    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"


    Özgür iradeydi şeytanım.
Toplam Hit: 1060 Toplam Mesaj: 3