Bir PHP sayfası doğrudan erişimi engellemek

11 Cevap php

Nasıl benim kullanıcılar ajax içindir sadece aramaları doğrudan sayfalarına erişmesini engellemek mi?

Anahtar olmadan erişim işleme alınmayacaktır ise ajax arama sırasında bir tuşa geçen, bir çözüm gibi görünüyor. Ama hayır, anahtarı imal etmek de kolaydır? Kaynağı Görüntüle Curse ...

p / s: webserver olarak Apache kullanma.

EDIT: neden cevap vermek, benim index.php jQuery UI sekmeleri var ve bu sekmelerin içinde doğrudan erişilebilir eğer çalışmaz komut ile biçimleridir. Bir kullanıcı Bilmiyorum, bunu neden isteyeyim, ben sadece doğrulama komut vermeden formları doğrudan erişimi engelleyerek daha kullanıcı dostu olurdu rakam.

11 Cevap

As others have said, Ajax request can be emulated be creating the proper headers. If you want to have a basic check to see if the request is an Ajax request you can use:

 if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
     //Request identified as ajax request
 }

Ancak bu çek senin güvenliğini temel asla. Bu neye ihtiyacınız olup olmadığını sayfasına direkt girişler ortadan kaldıracaktır.

Onlar AJAX ile erişiyor garanti hiçbir yolu yoktur. Doğrudan erişim ve AJAX hem de erişim istemcisi gelen, bu nedenle kolayca sahte olabilir.

Neden zaten bunu yapmak istiyorsun?

PHP kodu çok güvenli değil, çünkü ise, PHP kodu daha güvenli hale getirmek. (AJAX PHP dosyası için kullanıcı kimliği geçerse Örneğin, bu doğru kullanıcı kimliği olduğundan emin olmak için PHP dosyasındaki kod yazmak.)

Eğer şeyleri yanlış şekilde gidiyor olabilir gibi geliyor. AJAX çağrı sadece kongre tarafından tepki kullanıcıya gösterimi için uygun değil, sadece standart bir sayfa isteği gibi.

O hala, ancak, bir istemci isteği ve müşteri tepkisini görmek edebilmek için bu yüzden mutlu olmalı. Bu şekilde bir "anahtar" kullanarak erişimi obfuscating tek şey zorlaştırmak için hizmet vermektedir.

Aslında görünüm kaynağının "laneti" gizlilik üzerinden güvenlik karşı mücadelede küçük bir silah olduğunu söyleyebilirim.

Yani bu yapmak isteyen için ne sebep var?

Tarayıcı, normal isteği veya ajax ya sayfanızı arayacak, o birisi elle arayabilirsiniz. Gerçekten normal ve ajax istekleri arasında iyi tanımlanmış bir fark kadar, sunucu-istemci ve iletişim geçtikçe yok.

Ortak case "Bu istek ajax tarafından yapıldı" diyor sunucuya bir başlık geçmektir. Eğer prototip kullanarak yapıyorsanız, otomatik http başlık "X-istenen-Birlikte" için "XMLHttpRequest" ve aynı zamanda prototip versiyonu da dahil olmak üzere diğer bazı başlıkları ayarlar. ("RequestHeaders" de http://www.prototypejs.org/api/ajax/options daha bakın)

Ekle: Eğer başka bir AJAX kütüphanesini kullanarak konum muhtemelen kendi başlık ekleyebilirsiniz. Bu, sunucu tarafında isteği ne tür bilmek için kullanışlı ve bir ajax sayfa tarayıcıda talep olacağını zaman basit vakalarını önlemek içindir. Yapamazsın, çünkü herkesin isteğinizi korumak değildir.

COOKIE'LER güvenli değildir ... $ _SESSION deneyin. Bu oldukça fazla aslında sahte olamaz çapraz sayfa güvenebilirsiniz birkaç şeyden biri bu. Tabii, bu denetim bırakır aslında asla, Çünkü.

teşekkürler, ben kullanmak olsa

define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');

if(IS_AJAX) {
    //Request identified as ajax request
}

şerefe!

Bu konuda emin değilim ama belki bir yönlendirme başlığı denetlemez? AJAX çağrıları (en azından çabuk ben sadece benim sistemde yaptım testi olarak) yaparken ben, birisi elle url yazdığınız takdirde, bir yönlendirme başlığı yok diye düşünüyorum.

Bu olsa kontrol kötü bir yoldur. Yönlendirme nedenlerle bir sürü için boş olabilir. Eğer bir kamu hizmeti ya da bir şey olarak web hizmetini kullanarak insanları durdurmaya çalışıyor?

Lütfen düzenleme yorumları okuduktan sonra, formları url ajax form url olup olmadığını görmek için window.location kontrol edemeyeceğiniz, ajax çağrıları yoluyla yüklenen edilecektir. Bu ise, document.location yoluyla sağ sayfasına gidin

Bu kesinlikle .. bir şey güvenliğini sağlamak için kullanışlı değildir ama sayfa ajax tarafından talep değilse diyelim ki bir tam sayfa oluşturulan bir php sayfası var istiyorsa bu kullanım olabileceğini düşünüyorum ama sadece döndü gerekli parçası oluşturmak ajax kullanılan zaman .. Bu yapmak için izin verecek sitenizde olmayan ajax dostu yüzden bir linke tıklayın ve yorumların bir kutu yüklemek gerekiyordu ama onlar hala sayfaya gönderir ajax yok derseniz sonra yorumları gösteren bir tam sayfa olarak oluşturulur.

Ajax.php aracılığıyla index.php ve ajax istekleri aracılığıyla doğrudan talepleri geçmek ve daha sonra kullanıcının doğrudan herhangi bir başka kaynak dosyaya göz izin vermeyin - index.php ve ajax.php ihtiyaç duydukları kod eklemek için uygun mantığı sahip olduğunuzdan emin olun .

Senaryoyu çağıran javascript dosyasında:

var url = "http://website.com/ajax.php?say=hello+world";
xmlHttp.open("GET", url, true);
xmlHttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

sonra php dosyası ajax.php içinde:

if($_SERVER['HTTP_X_REQUESTED_WITH'] != "XMLHttpRequest") {
    header("Location: http://website.com");
    die();
}

Geeks hala geçerli oturumu tespit edildiğinde yürütme biter başlığını dövme ama benim senaryonun kalanı seans gerektirir tarafından ajax.php komut arayabilir. Onlar ajax script yönlendiriliyorsunuz sona erdi çünkü tekrar giriş için ana siteye süresi dolmuş hybridauth oturumları ile insanları yönlendirmek için çalışmak için bu gerekli.