PHP kodu kalktı?

4 Cevap

Tüm HI

PHP Version 5.2.11 Koşu ve biz söyledi konum bir site verilen oldum (muhtemelen 4) önceki bir sürümü üzerinde çalışan oldu.

Biz birkaç sayfa MySQL çalışmıyor güncelleme formları bir grup var, bir tek sorun var. Güncelleştirme komut kullanılan değişkenler elden önce php yerde tanımlı olmamak nerede sorundur. örn.

UPDATE users SET FirstName='$form_firstname'WHERE UserID='$id'"

Şimdi biz bunu değiştirmek eğer ..

$form_firstname = $_POST['form_firstname'];
UPDATE users SET FirstName='$form_firstname'WHERE UserID='$id'"

daha sonra güncelleme çalışır. Biz her güncelleme tablosunda tanımlanan her bir değişken için bu yapabilirdi ama bu biz bu değişkenleri oluşturan bu yerde bazı Onaylanmayan koduna bakıyoruz daha önce çalışmış olması gerekir gibi görülmektedir düşünüyorum. Ben herhangi baktım

import_request_variables

nada ama ifadeler.

Herkes bu neden olacak yeni bir sunucu varsayılan olarak kapalı olacak ya da bu değişken bir yerde ilan etmek var bir şey düşünebiliyor musunuz?

Cheers muchly

4 Cevap

Bu register_globals. DO NOT bunu kullanın; Bir gaping security hole olduğunu.

Başka yerlerde de belirtildiği gibi, onun özgün kod register_globals açık - çünkü çok kötü bir uygulama olduğu.

Hızlı bir hack olarak (global kapsamda) her sayfanın üstündeki bazı kod ekleyebilirsiniz:

extract($_GET); extract($_POST);

Hangi ... ama bir komut ile komut dosyası olarak çok aynı etkiye sahiptir. Eğer kodu doğru yeniden uygulamak süre Ama SADECE çalışan site tutmak için. Bu kod ile tek sorun olmadığını unutmayın - SQL deyimleri içine yapıştırma denetlenmeyen kullanıcı girişi AFET için bir reçetedir.

Siz kodu olarak yeniden yapılmalıdır ....

$form_firstname = mysql_real_escape_string($_POST['form_firstname'], $db_handle);
$id = mysql_real_escape_string($_POST['id'], $db_handle);
$qry="UPDATE users SET FirstName='$form_firstname'WHERE UserID='$id'";

C.

i ciddi bir şey için kullanan kalmayız. Bu kod saldırılara, enjeksiyon ve kesmek her türlü açıktır. Senin için iki cevap var. Hızlı ve kirli: register_globals açın. Alternatif: sıfırdan uygulamayı yeniden yazabilir veya daha iyi bir tane bulmak için birini bulmak.

Ben php.ini de resister_global = ayarlamak gerekir düşünüyorum