Nedir bu php kodu ile yanlış, hata yok 2 almaya devam?

4 Cevap php
<?php 
session_start();
// After user logged in
session_regenerate_id();
$_SESSION['logged_in'] = 1;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['agent'] = $_SERVER['HTTP_USER_AGENT'];


// Session Checking 
function session_check(){
    if(isset($_SESSION['logged_in']) && !empty($_SESSION['logged_in'])){
         if(isset($_SESSION['ip']) && !empty($_SESSION['ip']) && ($_SESSION['ip'] == $_SERVER['REMOTE_ADDR'])){
            if(isset($_SESSION['agent']) && !empty($_SESSION['agent']) && ($_SESSION['agent'] == $_SERVER['HTTP_USER_AGENT'])){ 
                return true;
            } else {
                echo "Not allowed to view this page. Error no: 3. You will be redrected to login page in few seconds";
                header('Refresh: 3; url=./login.php');
            }   
        } else {
            echo "Not allowed to view this page. Error no: 2. You will be redirected to login page in few seconds";
            header('Refresh: 3; url=./login.php');
        }
    } else {
        echo "You are not allowed to view this page. Error no: 1. You will be redirected to login page in few seconds";
        header('Refresh: 3; url=./login.php');
        return false;
    }
}

Ve ben çalıştırdığınızda hata no2 almaya devam:

if(session_check()){ echo "something";}

Ben dinamik IP kullanıyorum diye mi?

Is my code good enough to protect session hijacking?

Ben ($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) hariç tutarsanız, mükemmel çalışıyor.

Important Question:

Anti oturum kaçırma yöntemleri nelerdir? Bizimle paylaşabilir miyim? IP denetimi, kullanıcı aracısı denetimi veya muhtemelen diğer yöntemleri kullanarak?

4 Cevap

Evet, dinamik IP adresi olarak en kısa sürede IP adresi değişiklikleri gibi bu kodun bir kullanıcı olarak günlüğe neden olur. Siz oturum güvenliği kontrol etmek için IP adresini kullanarak olmamalıdır. Kullanıcı aracısı zaten kendi başına yeterli olmalı var kontrol edin.

İşte oturum güvenliği üzerinde büyük bir yazıdır: http://phpsec.org/projects/guide/4.html. Dibe yakın size md5 karma kullanarak kullanıcı aracısı onay bile daha güvenli hale nasıl gösterir. Ayrıca burada IP adreslerini ilgili bir alıntıdır:

Bu HTTP seviyesinde yer alarak faaliyetlerini karşılamak için değildir düşük seviye protokoller, çünkü, IP adresi gibi, TCP / IP düzeyinde, herhangi bir şey güvenmek akılsızca. Tek bir kullanıcı potansiyel her istek için farklı bir IP adresine sahip olabilir, ve birden çok kullanıcı potansiyel aynı IP adresine sahip olabilir.

Ben değişkenlerin ayarı ve kontrolü arasında daha fazla oluyor var sayıyorum. Bu soruna neden olan şey muhtemelen, ancak bize herhangi bir hata mesajı ya da neden olabilecek herhangi bir kod göremiyorum ne zaman neden ne olabilir söylemek için zordur. Oturum [ip] gerçekte ne olduğunu yankılanan denemek ve burada yayınlayacağız.

Çıktı tamponlama kullanmak sürece başlık için bir yazma vermeden önce bir şey yankı olamaz. Ben yerine session_check işlevi içinde başlığını koyarak, yerine bir durum kodu döndürür öneririz. D: Sonuçta, o) (session_check_redirect değil, session_check adlı

PHP manual on header() Gönderen

Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.

Ben kodu ile yanlış görmüyorum. Belirtildiği gibi, session_check() içerdikleri görmek için başında hem $_SERVER ve $_SESSION içeriğini var_dumping deneyin.

Dinamik IP kullanmak bile, bu iki istekleri (Eğer ağ kablosunu prizden veya wifi kartınızı çıkardığınızda genellikle değişir) arasında değiştirmek gerekir.

Sizin yöntem, oturum gaspına karşı yardımcı olabilir, ancak saldırganın kullanıcı olarak aynı ortak IP adresi arkasında olduğunda işe yaramaz.

Web güvenliği en iyi uygulama için OWASP önerileri okumanızı öneririz.