PHP ile web sitesi güvenlik sorusu?

6 Cevap php

Demek, "index.htm" ve "routines.php" var.

"Index.htm" sonunda JS (AJAX) kullanarak "routines.php" diyoruz olacaktır.

Yani, benim soru, nasıl "routines.php" isteği dışında değil aynı yerel sunucudan geldi ve doğrulamak edebilir mi? Ben PHP seviyesinde veya HTTP düzeyinde kontrol edebilirsiniz global bir değişken var mı?

Edit 1: AJAX kullanımı

6 Cevap

Gerçekten sorunun bir parçası değil gibi Ajax bölümü hakkında unutabilir. Cross Site Request sahteciliğine (CSRF) ve CSRF belirteçleri hakkında okumalısınız. Bazı bağlantılar:

Başka bir soru ile soru cevap: nasıl bir tarayıcı kullanarak) (GetData çağırmak istiyorsunuz?

(Yani: hayır endişelenmenize gerek.)

Çağrı JavaScript yapılmış ise (yani, istemci üzerinde), gerçekten Referer (sic) kontrol bile, kesinlikle index.htm bir isteği taklit birinin önlemek için bir şey yapamaz başlık.

Istek sunucu tarafında yapılmış ise, anahtarın bir tür kullanabilirsiniz.

Siz tabii ki de istemci tarafında bir anahtar üretebilir, ancak bu güvenlik önlemi index.htm bir isteği simüle etmek için herkes tarafından taklit edilebilir.

Eğer bir oturum anahtarı kullanabilirsiniz:

index.htm

<?php

$_SESSION['safe_key'] = true;

?>
javascript code here

routines.php

<?php
if (!isset($_SESSION['safe_key'])) {
   die('from outside');
}

function getdata() { ... }
?>

Temelde ne olur index.htm bir oturum güvenli bir anahtar oluşturulur denir durumdur. Oturumlar sadece serverside edilir. Güvenli anahtar yoksa routines.php olarak, kod index.htm adlı değildi. Eğer var, kodu çalıştırın.

Diğerleri belirttiği gibi, bu özgün özellikleri verilen oldukça zor olacaktır. Ancak, değiştirebilirsiniz eğer index.htm index.php olmak ve index.htm, ayrıca oturum yönetimi için ek simgeler koymak gibi (bu çıkışı aynı içeriğe sahip örneğin Çerezler - evet onlar da parodi :) ve belirteçleri eşleşmiyor getdata() için çağrıyı reddetmek kolay biliyorum.

HTTP_REFERER sunucu değişkeni kullanın:

echo $_SERVER['HTTP_REFERER']

Isteği istediğiniz sunucudan gelirse bu ile biliyorsunuz.