Emin bir insan bir PHP komut dosyası URL'den sonuçlarını görmek değil yapmak nasıl?

8 Cevap

Emin bir insan bir PHP komut dosyası URL'den sonuçlarını görmek değil yapmak nasıl?

AJAX arama yaparken bir sitenin kaynağını görüntülerken Son zamanlarda, ben tarayıcıda bağlantıyı takip etmeye çalıştı

www.site.com/script.php?query=value

Bunun yerine ben görmek için beklenen sonuç alma, ben sadece komut o sayfayı görmek gerektiğini belirten bir mesaj gördüm.

Nasıl sadece bir komut dosyası erişmek için izin için bir komut dosyası kısıtlamak?

GÜNCELLEME:

Burada sayfası DEMO page

8 Cevap

php ile kontrol ve sayfa ajax denir yalnızca sonuçları görüntüleyebilirsiniz

function isAjax() {
    return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'));
}

if(isAjax()) {
    // display content
} else {
    // not ajax, dont show
    echo 'Invalid Request';
}

Kısa cevap: bunu yapamazsınız.

Uzun cevap: HTTP isteği özel başlık değerlerini gerektiren zor bunu yapabilirsiniz (uygulama / json için Kabul ayarı ortak bir tanesidir). Sunucu tarafında sadece başlık beklediğiniz değere ayarlanmış olduğundan emin olmak için kontrol edin. Düzenli kullanıcılar söz ve komut sadece iyi çalışır mesajı alacak, böylece bu bunu yapacaktır. Elbette gelişmiş kullanıcıların kolayca böylece güvenlik için ona güvenmeyin sınırlama bu tür etrafında çalışmak mümkün olacak.

Sen yapamazsın. Bir insan her zaman isteği parodi edebilirsiniz. Eğer bir insan kazara sayfada bitmiyor emin olmak için, bir post değişkeni ile isteğinizi gönderebilirsiniz.

One possible solution is to check the HTTP Request for it's origin. Another solution is to send a "password" with every request. Take a look into this tutorial how to do this.

Ama% 100 güvenli asla, sadece mümkün davetsiz misafirleri için daha zor hale getirir.

Tim belirtildiği gibi, bu komut neredeyse kesinlikle (doğal, Firebug net panelinden bulundu) rpc.php her isteğiyle gönderilen bu istek başlığında, arıyor:

X-Requested-With    : XMLHttpRequest

Çapraz tarayıcı uyumluluğu gibi, setRequestHeader method activex ve XMLHttpRequest bağlantıları hem de kullanılabilir görünüyor yüzden bu tüm modern tarayıcılarda çalışması gerekir.

AJAX ile komut arama yapıyorsanız bir AJAX çağrısı aslında sayfası soran tarayıcınıza benzer, çünkü o böylece erişilebilir ama herkes için erişilebilir sadece komut değil, sizin için erişilebilir olmalıdır.

Aslında PHP ile veya başka yollarla çağrıldı ise, "belki" erişilebilirlik azaltmak için Apache kuralları veya PHP komut dosyası kullanabilirsiniz.

Sen 'görünümü' script ile php oturum içine gizli bir değer ayarlamak ve ajax komut ile bunu kontrol edebilir.

  • Request 'index.php' with the browser.
  • PHP builds the page, saves a key into the session, sends the content back to the browser.
  • The browser gets the page content and makes some ajax request to your site.
  • Those ajax scripts also have access to the same session your main page did, which allows you to check for a key.

Bu, yalnızca kimliği doğrulanmış tarayıcılar ajax isteklerini yapmak için izin verir sigortalanır.

Ajax isteği olsa oturumuna yazabiliyor olmak güvenmiyoruz. Birçok istekleri aynı anda memnun olma ile, sonuncusu içinde geri oturum depolama yazılı sonuncusu olacaktır.

http://us.php.net/manual/en/book.session.php

Açık kaynak kodlu uygulamaların bir çok her php dosyasının üstüne bu bir varyasyonu kullanır:

if (!defined('SOMETHING')) {
    die('only scripts have direct access');
}

Sonra index.php onlar SOMETHING tanımlar:

define("SOMETHING", "access granted.");

edit: Ben bu btw iyi bir yaklaşım olduğunu söylemiyorum

edit2: Ben bir ajax isteği olmanın bölümü cevapsız görünüyor. Ben bu durumda bu bir çözüm değildir katılıyorum.