PHP Ajax algılama ve emin istekte kendi web sitesine oldu

7 Cevap php

I use my PHP backend to detect Ajax like this: $_SERVER['HTTP_X_REQUESTED_WITH']. This gives me a reliable detection, making sure the request is Ajaxed.

Nasıl istek benim kendi etki alanından gelen, ve bir dış etki / robot emin olabilirim?

www.example.com/ajax?true herkes bir Ajax arama yapmak ve bilgi kesmek için izin verebilir.

Ben normalde benim web sitesine girdiğinde herkesin oturumları yapmak, ve sonra Ajax aramalara izin .. ama bu da sahte olabilir olabilir.

Hatta bu günlerde, önemli mi?

7 Cevap

Sen HTTP_REFERRER kontrol edebilirsiniz, ancak tüm tarayıcılar ayarlayın. Sadece alan çerez erişimi olan - en iyi yolu geri sunucuya Document.cookie partı JavaScript tarafta ajax aramalar için bir sarıcı yazmaktır. Siz php AJAX çağrı tanımlama bilgisi ile istek başlıklarına çerez karşılaştırabilirsiniz.

Cevap olarak, "bile önemi var, bu gün" - Evet, öyle! Read this.

Let Denetleyicisi

  • erişim belirteci oluşturmak
  • Daha sonra karşılaştırma için oturumunda depolamak

Sizin View

  • JS değişken olarak erişim belirteci beyan
  • Her isteği ile belirteci gönderin

Geri Controller

  • HTTP_X_REQUESTED_WITH doğrulamak
  • belirteci doğrulamak

Check these security guidelines from OpenAjax.
Also, read the article on codinghorror.com Annie linked.

Regarding your last question: "Does it even matter, in these days?" This is a case by case question. If the ajax request is doing something that does not require security (e.g. loading latest stock quotes) then it really doesn't matter IMHO. If the request is loading information that should be secured (e.g. returning identifying information or doing something on the server) then you should treat it as such.

Şey bir ajax isteği olduğunda ben şahsen bilmek sunucu değişkenleri kullanmayın. Bunun yerine sadece ajax çağrısı için bir sorgu parametresini eklerseniz (örneğin, http://domain.com/?ajax=true). Ben ajax arama sabitlemek için gerekiyorsa o zaman ben (istemci hem de sunucu kullanarak) normal bir sayfa isteği güvence olarak aynı yöntemleri kullanmak istiyorsunuz. Lucas Umman işaret ettiği gibi, istemci tarafında herhangi bir şey sahte olabilir. Alt çizgi sitenize veya veritabanından geliyor düşünmek bile herhangi bir isteği güvenmiyorum. Her zaman mantra "filtre giriş - çıkış kaçış" izleyin.

David Walsh, bir iyi vardır solution

/* decide what the content should be up here .... */
$content = get_content(); //generic function;

/* AJAX check  */
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    /* special ajax here */
    die($content);
}

/* not ajax, do more.... */

$_SERVER['HTTP_REFERER'] edin. Bu birçok durumda çalışacaktır, ama tamamen güvenli çözüm için karışık olmamalıdır.

Gerçekten, bunu yapmak için en güvenli yolu olarak önerilen bu tanımlama olabildiğince hazırlanmış olamaz gibi, sunucu tarafı oturumları kullanmaktır.

Verilen, birileri hala bir oturum kimliği kaçırmak olabilir, ama aynı zamanda kendi oturumunda kullanıcının IP adresini saklamak ve her istek üzerine kontrol ederseniz, kaçırma eylemiyle bir sürü ot olabilir. Aynı LAN veya vekaleten sadece birisi kaçırmak olabilir.

Başka bir metot söz - çerezler, javascript, http referer - güvensiz olduğunu ve her zaman, dövme kaçırıldı ve kötü niyetle oluşturulmuş, sahte olma şüphe edilmelidir istemci tarafında veri bağlıdır.

@ Jonathan Sampson - Ben bu yüzden bu çözüm sanmıyorum ... BurpSuite gibi bir şey isteği yakalamak ve HTTP_REFERER değiştirebilirsiniz. Ben de bir komut dosyası w / kıvırmak bunu yapabilirsiniz.