PHP ile kullanıcılar giriş içerik erişimi kısıtlayın

2 Cevap php

Ben bir lamba kurulum var ve sadece kullanıcılar giriş erişebilirsiniz böylece ben sadece web sayfası (resim, css, video, vb) içeriği korumak için mümkün olmak istiyorum.

Ben. Htaccess ile kolayca yapabilirsiniz biliyoruz. Ancak kimlik doğrulama açılan kullanmak istemiyorum, ve ben oturumları kullanmak ve aynı zamanda çıkış edebilmek için güçlü olmak istiyorum.

Ben mysql ile kimlik doğrulama işi yapmak ve oturumları oluşturmak için php kullanıyorum. Bu harika çalışıyor. Ancak görüntüler, css, javascript vb hala erişilebilir.

How do I allow access to the content only if a valid php session exists?

Ben (auth.php gibi? File = ...) bir php dosyalara iletmek ve orada kontrol oturumu yapılacak mod_rewrite kullanarak rastlamak var. Bu zaten kontrol edilmiş bir sayfa her bir görüntü için oturumu kontrol etmek için verimsiz görünmektedir. Bu kesmek gibi görünüyor ve ben bunu yapmanın temizleyici bir yolu vardır düşünmeye devam.

Setleri dizin için tüm izin ver böylece bir oturum anahtarı ile bir çerez benim oturum veritabanında ve eğer varsa kontrol edebilir mod_session_cookie gibi apache için bir mod var mı?

Alternatif olarak, bu mod_auth_mysql kullanmak değil, aynı zamanda bir php formu değil doğrulama açılır kullanarak oturumlarını ve giriş kullanmak mümkün olacak mümkün mü?

EDIT:

Here is my solution to the problem:

Benim apache yapılandırma dosyası (. Değil htaccess) Ben ekledi:

RewriteLock /var/www/lib/rewrite.lock

<VirtualHost>
    #...
    RewriteEngine on
    RewriteMap sessionValid prg:/var/www/lib/allow.php

    <Directory /var/www/client/*>
            RewriteEngine on

            RewriteCond %{HTTP_COOKIE} !client-cookie=([^;]+)
            RewriteRule .* - [L,R=403]

            RewriteCond %{HTTP_COOKIE} client-cookie=([^;]+)
            RewriteCond ${sessionValid:%1} !valid
            RewriteRule .* - [L,R=403]
    </Directory>
</VirtualHost>

Ve komut allow.php:

#!/usr/bin/php5
<?php
set_time_limit(0);

echo ""; 
$stdin = fopen("php://stdin","r");
$db = mysql_connect(...);  
mysql_select_db(..., $db);
$querypre = "SELECT ID FROM Sessions WHERE ID='";

while (1) {
  $line = trim(fgets($stdin));

  $query = $querypre.mysql_real_escape_string($line)."'";
  $result = mysql_query($query);

  if (mysql_num_rows($result) > 0)
    echo("valid\n");
  else
    echo("0\n");
}

mysql_close($db);
?>

Bu bir cazibe gibi çalışır. Bu Kullanma ve session_set_save_handler Ben php sayfaları ve tüm içeriğin hem güvenli mysql destekli php oturumları kullanmayı başardı. Birisi bu yararlı bulur umuyoruz.

Bazı uyarılar:

  • RewriteMap deyimi bu sanal konağın içinde kullanmak için gidiyoruz eğer sanal konak blok içinde tanımlanmış olması gerekir. Bloğun dışına yerleştirilmesi çalışmaz.
  • Sen RewriteMap tanımlamadan önce üzerinde RewriteRule ayarlanmış olmalıdır veya göz ardı edilecek.
  • RewriteLock sanal konak blokta olamaz.
  • Herhangi bir kabuk gibi, php dosya apache kullanıcı ve ^ M geçersiz hale tarafından çalıştırılabilir olmalıdır
  • RewriteMap ifadeler. Htaccess ama harita kutu kullanın, diğer tablolarda yer olamaz.

2 Cevap

Bunun yerine kaynaklara düz bağlama, görüntüleri hizmet için kontrolör çeşit kullanın.

Örneğin, 'images / bob.jpg' bağlayan aslında bir kaynağa işaret olmaz, ama bir giriş kontrol komut dosyası, ve eğer başarılı, doğru verilerle image / jpeg başlıkları gönderir.

Ben aslında Apache kullanmayın; Ben bir plug-in doğru bir karma URI geçirilen eğer dayalı bir klasöre erişimi kısıtlamak için kullanabileceğiniz içerir lighttpd, kullanın. Temelde, uygulama mantığı ve web sunucusu payı sonra da karma ile geçirilen şimdiki zaman, bir karma oluşturmak için kullanılan gizli bir tuz. Zaman son 5 dakika içinde ise, o zaman erişim sağlar. Değilse karma geçersiz ise, ya, o öyle değil. Ben Apache için benzer bir eklenti anda orada olmadığını görmek için etrafında Googling ediyorum.

Edit: mod_auth_token Apache için aynı şeyi yapmak için görünür.