PHP:-veri GET otomatik değişkenler olarak ilan ediliyor

5 Cevap php

Bu kodu alın:

<?php
if (isset($_POST['action']) && !empty($_POST['action'])) {
    $action = $_POST['action'];
}

if ($action) {
    echo $action;
}
else { 
    echo 'No variable';
}
?>

And then access the file with ?action=test Is there any way of preventing $action from automatically being declared by the GET? Other than of course adding

&& !isset($_GET['action'])

Neden değişken benim için ilan edilecek istersiniz?

5 Cevap

register_globals ayarı için php.ini kontrol edin. Eğer onu istiyorsan, muhtemelen.

Neden değişken benim için ilan edilecek istersiniz?

You don't. Bu korkunç bir güvenlik riski bulunuyor. Bu Çevre yapar, GET, POST, Çerez ve Sunucu değişkenleri küresel (PHP manual). Bu PHP reserved variables bir avuç vardır.

Suçlu php.ini register_globals gibi görünüyor. Bunu kapatmak gerekir. Onu üzerinde olması da büyük bir güvenlik riski bulunuyor.

Eğer hosting konum ve php.ini değiştirmek değil eğer, ini_set() register_globals kapatmak için kullanabilirsiniz.

if you don't have access to the php.ini, a ini_set('register_globals', false) in the phpscript won't work (variables are already declared) An .htaccess with:

Kapalı register_globals php_flag

bazen yardımcı olabilir

Sen tüm değişkenler PHP.INI olarak PHP log-düzeyini çevirerek düzgün ilan olup olmadığını test edebilirsiniz

error_reporting  =  E_ALL

Sizin kod parçacığı artık bir bildirim oluşturmak gerekir.

Php tarihinin bir noktada onlar büyük bir güvenlik tehlikesi olduğu varsayılan olarak register_globals kapatmak için tartışmalı bir karar. Bu kimseye, kodunuzda değişkenlerini enjekte düşünülemez sonuçları oluşturmak için potansiyel verir! Bu "özellik" bile PHP6 çıkartılır

Eğer temas kapatmak için yönetici olduğunu fark ederseniz.