PHP form simge kullanım ve taşıma

2 Cevap php

PHP bir oturum açma komut dosyası üzerinde çalışan bir acemi değilim. Bu şimdiye kadar sahip şeklidir belirteç ifadedir:

$_SESSION["form_token"] = md5(rand(time (), true)) ;

Deyimi kullanıcı o / o giriş istediğini gösterir hemen sonra verilir.

Benim sınırlı anlayış belirteçleri amacı zaman benzersiz bir noktada eşsiz bir kullanıcıyı tanımlamak ve form belirteç bilgilerini gizlemek olmasıdır.

Sonra her şey bulanık olur. İşte benim 3 açık sorular şunlardır:

  1. Ne zaman güvenlik amaçlı formu belirteci "kontrol" için en iyi zaman nedir?

  2. Bunu nasıl kontrol edebilirim?

  3. Ne zaman, eğer hiç, ben formu belirteci "yok" mı? (IOW, biçim belirteci kullanıcıya dışarı açıncaya kadar "aktif" kalmak istiyorsunuz?

2 Cevap

Eğer çalıştığınız ne yapmak gerek yoktur. Eğer session_start PHP ile bir oturum başlattığınızda () benzersiz bir SessionId zaten sizin için oluşturulur. Sen not formunda bu koyarak olmalıdır. Varsayılan olarak çerezler aracılığıyla işlenir. Ya Sessionıd kontrol etmek gerek yine sizin için işlenir ki, vardır.

Siz kullanıcı kimlik doğrulaması ve doğrulanmış kimliğini (örneğin, $ _SESSION ['user_id'] OTURUM = $ userId depolama sorumludur. Bir kullanıcı, session_destroy ile oturumu yok günlükleri varsa.

Sen () sitenizdeki tüm sayfalar için first şeylerden biridir session_start sağlamalıdır.

Burada temel bir örnek:

<?php
session_start(); // starts new or resumes existing session
session_regenerate_id(true); // regenerates SESSIONID to prevent hijacking

function login($username, $password)
{
    $user = new User();
    if ($user->login($username, $password)) {
        $_SESSION['user_id'] = $user->getId();
        return true;
    }
    return false;
}

function logout()
{
    session_destroy();
}

function isLoggedIn()
{
    return isset($_SESSION['user_id']);
}

function generateFormHash($salt)
{
    $hash = md5(mt_rand(1,1000000) . $salt);
    $_SESSION['csrf_hash'] = $hash
    return $hash;
}

function isValidFormHash($hash)
{
    return $_SESSION['csrf_hash'] === $hash;
}

Düzenleme: Ben orijinal soruyu yanlış. Ben formu üreten sağlamalarının ve doğrulamak için yukarıdaki ilgili yöntemleri ekledi;

Lütfen aşağıdaki kaynaklara bakın:

Bu CSRF saldırıları önlemek için

http://en.wikipedia.org/wiki/Cross-site_request_forgery

Bir kötü niyetli site teorik bir formu görüntülemek verebilecek uygulamanıza mesaj var. Form bir veri ihlali veya bazı istenmeyen eylemi neden yönergelerini içerebilir. kullanıcı kullanıcı zaten bir formu belirteç formu sitenizde değil, bazı diğer site tarafından oluşturulan sağlayan oturum çünkü app kabul edeceğini formu göndererek içine aldatmış olabilir.

HTTP_REFERER kontrol genellikle yeterince iyi, ama değil gibi komple bir çözüm (örneğin https yönlendirme dize göndermek olmaz) olduğunu.

Eğer gerçekten bir belirteç ile her türlü güvenliğini sağlamak istiyorsanız, bunu site genelindeki çalışması yapacak) (emitToken () ve checkToken gibi bazı konfor fonksiyonlarını oluşturabilirsiniz.

bazı örnekler:

http://phpsec.org/projects/guide/2.html

http://www.rodsdot.com/php/CSRF_Form_Protection.php