PHP sayfaları görüntülerken yetkisiz kullanıcıların önlemek için düzgün bir yol arıyor

5 Cevap php

Ben, bir if authed { show page } else { show error} her şeyi sarma, diyelim olmadan inceleyen sayfalarından yetkisiz kullanıcıların önlemek için bir yol arıyorum

Benim web sitesi şu anda kurulum gibidir:

index.php

require_once __WEBROOT__ . '/templates/default/header.tmpl';
require_once content('p');
require_once __WEBROOT__ . '/templates/default/footer.tmpl';

content()

function content($GETvar)
{
   $content  = '';
   $root     = __WEBROOT__;
   $location = 'content';
   $files    = scanDirRecursive($root . '/content/');

   if (isset ($_GET[$GETvar]))
   {
      $path = str_replace('\\', '/', $_GET[$GETvar]->toHTML());

      if (in_array("$root/$location/$path", $files))
      {
         $content = "$root/$location/$path";
      }
      else
      {
         $content = $root . '/templates/default/errors/404.php';
      }
   }
   else
   {
      $content = __WEBROOT__ . '/content/home.php';
   }

   return $content;
}

Bu güzel çalışıyor. Ben auth seçenekleri ile etrafında oynarken, ben 'içerik' sayfasının üst kısmında bir 'geri dönüş' olarak attım. Yükleme ancak () (bir kalıbın aksine) inceliğini şablonu tutarak içerik sayfasını engelleyen sona erdiği.

Ben merak ediyorum, bu güvenli mi? Ya da ben göremiyorum ki meydana gelen bir hata var ...

5 Cevap

Ön kontrolör desen kullanın. Bunun yerine bireysel PHP dosyaları gibi tüm sayfalarınızı sahip, tek bir "giriş noktası" var.

Temelde, index.php gibi index.php dosya iş var? P = foo göstermek için ne sayfa tanımlar foo. Bu şekilde, bütün istekleri index.php geçeceği, ve tek bir yerde kontrol tüm erişim içerebilir. Bu yaklaşım ile ortak bir acemi hata - ama keyfi dosyaları da dahil olmak üzere izin için dikkatli olmayı unutmayın.

Ancak, işaret gibi, sen Kek veya Zend gibi çerçeveler bu işi gerçekleştirmek nasıl araştırma isteyebilirsiniz.

Kullanıcı'kimliği, diyelim ki, bir oturum değişkeni ayarlar bir giriş sayfası gerektirir. Sonra her sayfada, yetki kontrol etmek için bir işlev çağırın. Bu sayfa hem de kullanıcıyı gördüğü takdirde Muhtemelen başlığında koymak olabilir.

Hiçbir kullanıcı giriş, ya da sayfa için izin verilmez ise, giriş yönlendirme sayfası-it onlar oturum açmadan istenen sayfasını kullanabilirsiniz söyleyen bir mesaj eklemek için güzel olurdu

Çıkıyor oturum değişkenleri temizlemek gerekir. Ayrıca, oturum zaman aşımı olmak varsa, zaman aşımı sıfırlamaya zamanlarda bir oturum değişkeni damgası kaydedin.

Neden tekerleği yeniden icat etmek? Her php framework bu kodlama az miktarda güvenlik politikası ayarlayabilirsiniz acl modülü bulunuyor var. CakePHP'de ya google acl çerçevesinde bir göz atın ...

Bir onlar tespit değilse, bu {} else {şikayet,} sadece oturum açma sayfasına yönlendirmek oturum, daha sonra ölür () yapmayın;

Ben sadece böyle şeyler için bir özel durum atmak için onu rahat buldum. Orada çeşitli stratejiler vardır, ama bir gibi bir senaryo dahil olabilir:

function show_content()
{
  if( ! $user_is_allowed_to_see_this_content ) {
    throw new Exception('This user may not see this content', 403);
  }

  // Continue on with the content code
}

Varsayılan olarak, bu sadece dışarı hata, ancak istisna atıldığında özellikle ne tanımlamak için set_exception_handler() işlevini kullanabilirsiniz. Bu "ne şeyler yanlış gittiğinde yapmak" Ben şeyler tidier yapar bulmak içerik işleme kodu, ayrı bir yerde mantık.
Tanımlamanızı sağlar

Örneğin:

function custom_exception_handler( Exception $exception ) 
{
  // Log the Exception
  error_log( $exception->getMessage(), 0 );

  // Return the generic "we screwed up" http status code
  header( "HTTP/1.0 500 Internal Server Error" );

  // return some error content
  die("We're sorry.  Something broke.  Please try again.");
}

// Now tell php to use this function to handle un-caught exceptions
set_exception_handler('custom_exception_handler');

Bu tüm mantıksal hata olaylarını işlemek için iyi bir genel amaçlı bir yoldur ve sadece Kimlik doğrulama başarısız değil fazlalaştı. Dosya-bulunamadı istisnalar, doğrulama istisnalar, veritabanı sorgu istisnalar, talep azaltma istisnalar; Bu aynı şekilde ve aynı yerde işlenebilir.