[php] przrobka na register_globals=off

0

napisalem oprogramowanie, ktore w calosci powstalo i bylo testowane na apachu z PHP Version 4.1.1
dopiero niedawno doszlo do mnie, ze szanujace sie servery maja ustawione register_globals na off
w zwiazku z ta nieprzyjemna dla mnie wiescia mam 2 pytania:

  1. dlaczego tak jest, ze ustawiaja sobie na off
  2. jaki mam przyjac schemat postepowania, zeby szybko i bezbolesnie przerobic moj sors?
0
  1. dlaczego tak jest, ze ustawiaja sobie na off

Bo bezpieczniej i wygodniej niekiedy.

  1. jaki mam przyjac schemat postepowania, zeby szybko i bezbolesnie przerobic moj sors?

Łopatologiczny, tzn, przeanalizować kod i go zmienić.

0

Łopatologiczny, tzn, przeanalizować kod i go zmienić.

ok tylko jakie zasady panuja przy register_globals na off?

zmienilem w apachu w php.ini i juz sie nie moge zalogowac bo pewnie $_SESSION['login'] i $_SESSION['password'] nie dzialaja...

co mam pozmieniac?
do czego w r_g na off nie mam dostepu teraz? czego nie widac?

0

zmienne przesyłane metodami GET, POST, SESSION, COOKIE i czymś tam jeszce przy włączonym register_globals były ładowane jako $zmienna, a przy wyłączonej tej funkcji musisz ręcznie odwoływać się do odpowiednich tablic superglobalnych ($_GET, $_POST itd.) $_SESSION to właśnie prawidłowy sposób przyjmowania danych i powinno działać wszystko OK.

0

PHP posiada możliwość ustawienia w pliku konfiguracyjnym php.ini dyrektywy register_globals. Jest ona odpowiedzialna za rejestrowanie danych otrzymanych z formularzy, ciastek, sesji czy serwera jako zmienne globalne. Oznacza to, że jeśli dyrektywa register_globals została ustawiona na on to wszystkie zmienne przekazane do skryptu dostępne są w postaci $nazwa_zmiennej, bez potrzeby stosowania żadnych tablic. Wydaje się to wygodniejsze i łatwiejsze, lecz powoduje pewne niebezpieczeństwo. Mianowicie używając zmiennych globalnych nie można stwierdzić, czy dana wartość pochodzi z sesji czy może została podana w URLu metodą GET. Przy źle napisanych skryptach można tak obchodzić zabezpieczenia.

W związku z powyższym, używanie odpowiednich tablic jest mocno zalecane. Ostatnio twórcy PHP dodali do tego jeszcze jeden powód. Począwszy od wersji 4.2.0, dyrektywa register_globals jest domyślnie wyłączona. Tak więc pisząc skrypt dla nieznanego serwera trzeba się liczyć z ewentualnością braku dostępu do zmiennych globalnych.

no spoko, ale ja mam teraz kod na register_globals=on napisany i .... mi nie dziala jak zmienie register_globals=off
dlatego napiszcie po prostu gdzie mam ingerowac zeby mi dzialal skrypt? (przyklad kodu ktory bedzie hcodzil pod r_g na on a nie bedzie chodzil na r_g na off) zebym mial jasnosc jak to poprawiac bo nie mam pojecia

0

To jest bardzo proste ? wszystkie zmienne które wysyłałeś metodą post zamieniasz na $_POST[?nazwa_zmiennej?]

Np.

<form action="?cośtam.php?" method="?post?"> <input type="?text?" name="?zmienna?"> <input type="?submit?"> </form>

wysyłając ten formularz używałeś $zmienna a teraz musisz użyć $_POST[?zmienna?].

Tak samo z geta używasz tablicy $_GET[], ciasteczka zapisujesz jako $_COOKIE[], a zmienne z sesji jako $_SESSION

Czeka cię kupa roboty, musisz wszystko ręcznie po poprawiać :/

0

zawsze przy formularzach korzystam z $_POST['cos], $_GET[] oraz $_SESSION
jednak mi nie dziala.. przekleje kod, moze ktos na cos wpadnei:

<?

include 'functions.php';
include 'consts.php';

include_once("session_start.php");
require_once("smarty\smarty.class.php");

$smarty=new Smarty;

if((($_SESSION['login']==$g_login) && ($_SESSION['password']==$g_password)) || ($_POST['login']==$g_login) && ($_POST['password']==$g_password)){
	$smarty_display="c:\apache\php\pear\smarty/templates\index.tpl";
	$smarty_template_dir="c:\apache\php\pear\smarty/templates/";
	$smarty_compile_dir="c:\apache\php\pear\smarty/templates_c/";
}
else{
	if(isset($_POST['login'])){
		$smarty->assign('msg',"Błędny login lub hasło!");
	}
	if(isset($_POST['password'])){
		$smarty->assign('msg',"Błędny login lub hasło!");
	}
	$smarty_display="c:\apache\php\pear\smarty/templates\auth.tpl";
	$smarty_template_dir="c:\apache\php\pear\smarty/templates";
	$smarty_compile_dir="c:\apache\php\pear\smarty/templates_c";
}

switch ($mod){

	case 9:
		logoff();
		$smarty_display="c:\apache\php\pear\smarty/templates\auth.tpl";
		break;

	case 1:
		if($_GET['action']=="1"){
 			logAdmin($_POST['login'],$_POST['password']);
 		}
		getLogin();
		getMyDate();
		break;

	case 2:
		if(($_GET['action']=="2")){
      	addContent();
		}
		else if(($_GET['action']=="3")){
			showContentForm($_GET['id']);
		}
		else if(($_GET['action']=="4")){
			modifyContent($_POST['id']);
		}
		else if(($_GET['action']=="5")){
      	deleteContentForm($_GET['id']);
		}
		else if(($_GET['action']=="6")){
			deleteContent($_GET['id']);
		}
		showContent();
		break;

	case 3:
		if($_GET['action']=="1"){
			showNews();
		}
		if($_GET['action']=="3"){
      	addNews($_POST['topic'],$_POST['body']);
      	showNews();
		}
		if($_GET['action']=="4"){
			modifyNewsForm($_GET['id']);
		}
		if($_GET['action']=="5"){
			modifyNewsId($_POST['id']);
			showNews();
		}
		if($_GET['action']=="6"){
			showNewsToDelete($_GET['id']);
		}
		if($_GET['action']=="7"){
			deleteNewsId($_GET['id']);
			showNews();
		}
		break;

	case 4:
		if(($_GET['action']=="1")){
      	showPhotos();
		}
		if(($_GET['action']=="3")){
   		addPhoto();
   		showPhotos();
		}
		if(($_GET['action']=="4")){
			modifyPhotoForm($_GET['id']);
		}
		if(($_GET['action']=="5")){
			modifyPhoto($_POST['id']);                          	
			showPhotos();
		}
		if(($_GET['action']=="6")){
			showPhotoToDelete($_GET['id']);
		}
		if(($_GET['action']=="7")){
			deletePhoto($_GET['id']);
			showPhotos();
		}
		break;

	case 5:
		if(($_GET['action']=="1")){
      	showDealers();
		}
		if(($_GET['action']=="2")){
      	showDealersWoj($_GET['woj']);
		}
		if(($_GET['action']=="3")){
			preAddDealer($_GET['woj']);
		}
		if(($_GET['action']=="4")){
			addDealer();
			showDealers();
		}
		if(($_GET['action']=="5")){
			showDealerTomodify($_GET['id']);
		}
		if(($_GET['action']=="6")){
			modifyDealer($_POST['id']);
			showDealers();
		}
		if(($_GET['action']=="7")){
			showDealerToDelete($_GET['id']);
		}
		if(($_GET['action']=='8')){
			deleteDealer($_GET['id']);
			showDealers();
		}
		break;

	case 6:
		if($_GET['action']==1){
			showStats();
		}
		if($_GET['action']==3){
			resetStats();
		}
		getmyDate();
		break;

	default:
		getMyDate();
		getLogin();
}

$smarty->assign('mod',$_GET['mod']);
$smarty->assign('action',$_GET['action']);
$smarty->template_dir=$smarty_template_dir;
$smarty->compile_dir=$smarty_compile_dir;
//$smarty->debugging=true;
$smarty->display($smarty_display);

function logAdmin($login,$password){
	$_SESSION['login']=$login;
	$_SESSION['password']=$password;
}

?>

form logowania to method post i action="?mod=logowanie&akcja=submit" <-klasycznie

juz na samym poczatki jednak nie loguje
probowalem echowac $_SESSION['login'] ale nic tam nie ma

p.S. nie komentujce, ze w nie powinieniem przetrzymywac loginu i hasla w tablkicy $_SESSION -> wiem o tym :D

0

probowalem echowac $_SESSION['login'] ale nic tam nie ma

a $HTTP_SESSION_VARS['login'] tez nic nie wyswietla ?

0

a $HTTP_SESSION_VARS['login'] tez nic nie wyswietla ?

tez nie :/

0

switch ($mod)

</span> a mialo byc $_GET['mod'] - >JA DEBIL!

0

Do przerobek z register_globals=on warto zainteresowac sie funkcja extract

0

wszystko sie szczesliwie skonczylo
CMS gotowy
teraz to ja moge odpowiadac na pytania odnoscie smartow i budowy cms'a
:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1