WebWork Magazin - Webseiten erstellen lassen, Online Medien, html

Webhoster, Webhosting Provider und Domain registrieren

Home | Registrieren | Einloggen | Suchen | Aktuelles | GSL-Webservice | Suleitec Webhosting
Reparatur-Forum | Elektro forum | Ersatzteilshop Haushalt und Elektronik



Im Homepage und Webhosting-Forum --- Nur bestimmte Variablen zulassen - Wie ??

Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.

Forum » PHP & MySQL » Nur bestimmte Variablen zulassen - Wie ?? - 21 Nov 2024 Antworten
im Forum für Webhosting Homepage gefunden:
Nur bestimmte Variablen zulassen - Wie ??
dee123
Otto-Normal-Poster
Threadstarter




Beiträge: 63

Kontrollierte Variablenübergabe von einem script zum nächsten ist mein Problem. Ich will meine Seite ja nur sicher vor Hackern machen.
ich lese also die übergebene Varialbe mit $_get ein, vergleiche diese mit "konstanten"
in der form

1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17:
$var = $_Get['var'];
switch ($var)
{
case 0:
   if ($var == home.php) {include ($var)}
   break;
case 1:
   if ($var == news.php) {include ($var)}
   break;
.
.
.
.
case 323454:
   if ($var == wasweißich.php) {include ($var)}
   break;
}


Aber das scheint mir extrem unkomfortabel zu sein. Es kann doch nicht sein, daß ich - um auf Nummer Sicher zu gehen - den Inhalt von $var wirklich mit allen denkbaren zu includenden Dateien vergleichen muss. Da muss es doch was einfacheres geben. Und das ist mein Problem: WAS IST EINFACHER ALS DAS ??

---
Meine alte Signatur gefiel mir nicht mehr. Darum hab ich jetzt eine neue.

Diese Nachricht wurde geändert von: dee123
  Profil   Website   Editieren   Zitieren
languitar
Foren-Team




Beiträge: 2795

Achso, du wilslt nur den Inhalt einer Variable kontrollieren, in der ein Seitenname steht?

Dann kannst du dir ein Array machen: $sites = array('home.php', 'foo,php', ...); und dann mit in_array(); überprüfen, ob der Inhalt der übergeben wird halt in dieser Liste enthalten ist. Wenn ja includen, wenn nicht halt Fehlermeldung.

  Profil   Editieren   Zitieren
dee123
Otto-Normal-Poster
Threadstarter




Beiträge: 63

Hi languitar,
wäre das auch eine Möglichkeit, oder isses zu unsicher ??


1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18:

$verz=opendir ('.');
while ($file = readdir ($verz)) 

{  
$end = split("[.]", $file);
if ($end[1] == "php" || $end[1] == "html" || $end[1] == "pdf") 
{ 
$inc = $end[0].".".$end[1]."
";
include ($inc);
}

}

closedir($verz); 


Ich hab nämlich eine ungemeine Anzahl von Dateien, die includiert werden. und die alle in ein Array zu schreiben, da sind sicherlich Fehler vorprogammiert.

---
Meine alte Signatur gefiel mir nicht mehr. Darum hab ich jetzt eine neue.

Diese Nachricht wurde geändert von: dee123
  Profil   Website   Editieren   Zitieren
languitar
Foren-Team




Beiträge: 2795

Das funktioniert solange deine dateien nur einen Punkt im Namen haben, wenn du daran halt die Abfrage mit dem inarray anknüpfst geht das. So machst du ja gar keine Abfrage.

  Profil   Editieren   Zitieren
languitar
Foren-Team




Beiträge: 2795

http://de2.php.net/inarray

Lässt halt alle deine Dateien mit der Schleife in das Array schreiben...

  Profil   Editieren   Zitieren
Lewi
Quasselstrippe




Beiträge: 287

Wobei du bei 'hunderten' zu inkludierenden Dateien vielleicht mal dein System überdenken und ggf. auf eine Template-Engine wie smarty (smarty.php.net) umstellen solltest. Dann hast du auch (fast) keinen Sicherheits-Stress mehr.

---
Lewi = ehemals the_doc

  Profil   Website   Editieren   Zitieren
dee123
Otto-Normal-Poster
Threadstarter




Beiträge: 63

Hallo Nochmal,
Dank an languitar für den "in_array" Tip.
habs jetzt so versucht:
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21:
$var_in = $_GET['var'];
$n = 0;
$verz=opendir ('.');

while ($file = readdir ($verz))
{  
	$end = split("[.]", $file);
	if ($end[1] == "php" || $end[1] == "html" || $end[1] == "pdf") 
		{ 
			$inc = $end[0].".".$end[1];
			$array[$n] = $inc;
			$n = $n + 1;
		}

}
closedir($verz);

if (in_array ($var_in, $array)) 
	{
		include ($var_in);
	}


Hoffe, das es so in Ordnung ist.

---
Meine alte Signatur gefiel mir nicht mehr. Darum hab ich jetzt eine neue.

  Profil   Website   Editieren   Zitieren
languitar
Foren-Team




Beiträge: 2795

Das müsste so funktionieren, ich würde nur noch einen Else-Part einbauen, mit einer Fehlermeldung und in der While-Schleife musst du das Array nicht explizit durchnumerieren. Das macht PHP auch alleine. $array[] = 'dateiname' würde schon reichen. Damit könntest du dir die Zählvariable sparen.

  Profil   Editieren   Zitieren
raiserle
Mausakrobat




Beiträge: 172

tzzz....
wer sendet schon die include per get....
sowas macht absolut kein sinn.... wenn du das als lösung hast, solltest
mal dein script überdenken

---
Irren is Menschlich

Wer andern eine Grube gräbt,
sollte darüber nachdenken,
ob sie tief genug ist!!!!

Kameradschaft ist, wenn der
Kamerad schafft !!!!

  Profil   Editieren   Zitieren
TeX
Otto-Normal-Poster




Beiträge: 51

Jop, halt ich auch für schwachsinn, aber wenn Du das so brauchst dann lass die Datei auf existenz prüfen in einem festen Pfad wo keine Verzeichnisrechte ala 777 drauf sind, dann kann der hacker da nichts machen, weil er keine Dateien dahin bekommt.

Ich habe sowas in der Art für nen Portal mal gemacht:

index.php?func=reg - das wird per Link aufgerufen

Ich hab dann nur ne Prüfung dadrin, ob die Datei vorkommt:

1:
if(file_exists("php/".$_GET[func].".php")){include("php/".$_GET[func].".php");}


---
Ankauf leere Toner | Ankauf leere Tonerkartuschen

  Profil   E-Mail   Website   Editieren   Zitieren
subjective
Forenheld




Beiträge: 844

Für die Strings (Arrayschlüssel) fehlen die Quotes und es ist unsicher. Man kann nämlich einfach mit "../../" aus dem Verzeichnis php rausgehen. Bei dieser Variante sollte die $_GET['func']-Variable so behandelt werden, das nur der Teil ab dem letzten / genutzt wird.

Besser ist jedoch ein Whitelist-Array mit allen erlauben Werten. dee123 baut dieses Array ja jetzt durch das einlesen des Verzeichnisses auf. Performancemäßig eventuell nicht gerade toll, aber dafür sicher.

---
Weaverslave

  Profil   Website   Editieren   Zitieren
raiserle
Mausakrobat




Beiträge: 172



nunja, nen listing zu machen, welche dateien wirklich in einem verzeichnis liegen
ist ja nun nicht so performance raubend...
er wird ja nicht unzälige dateien dort drin haben...

letztendlich, sollte man vorher drüber nachdenken, wie man was löst,
um genau sowas zu vermeiden

was auch noch gehen würde, da die abfrage schneller ist....
mach dir doch ne tabelle und lass über nen script, alle dateien eintragen, die du
(brauchst) --> spinn spinn.....
könntest jetz noch nen md5 aus dem dateinamen generieren und diesen dann
benutzen, um den wirklichen dateinamen aus dem sql[array] zu lesen

dürfte bei vielen dateien der schnellste und sicherste weg sein.....

---
Irren is Menschlich

Wer andern eine Grube gräbt,
sollte darüber nachdenken,
ob sie tief genug ist!!!!

Kameradschaft ist, wenn der
Kamerad schafft !!!!

  Profil   Editieren   Zitieren
dee123
Otto-Normal-Poster
Threadstarter




Beiträge: 63

ich hab es jetzt so gelöst:
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21:
$var_in = $_GET['var'];
$array_file = array();
$dir=opendir (".");
while ($file = readdir ($dir)) 
	{  
	$end = split("[.]", $file);
	if ($end[1] == "php" || $end[1] == "html" || $end[1] == "pdf") 
	{ 
		$inc = $end[0].".".$end[1];
		array_push ($array_file, $inc);
	}
	}
	closedir($dir); 
if (isset ($var_in) && in_array ($var_in, $array_file))
	{
	include ($var_in);;
	}
	else
	{
	include ("Home.php");
	}

Achja, @TEX: Schwachsinn ist, wenn du nach einer existierenden Datei fragst ( if(file_exists...) wenn doch alle dateien per readdir ins Array geschrieben worden.

---
Meine alte Signatur gefiel mir nicht mehr. Darum hab ich jetzt eine neue.

  Profil   Website   Editieren   Zitieren
TeX
Otto-Normal-Poster




Beiträge: 51

Naja den ganzen Quatsch könntest Du Dir durch 2 Zeilen Code sparen.

Wenn Du das so machen willst haste genau das Prob was "subjective" beschrieben hat:

1:
$_GET['var']="http://domain/bot.php";


Wenn ich nun mein Verzeichnis da wo mein BOT liegt für durchsuchen freigebe, naja n8.

1: 
2: 
3: 
4:
$_GET[var] ab den letzten / auslesen;
if(file_exists("php/".$_GET[var].".php")){include("php/".$_GET[var].".php");}


Du könntest noch die erlaubten Endungen in nen Array speichern, aber diese Möglichkeit sollte wohl die schnellste sein, da nur eine Datei geprüft wird.

---
Ankauf leere Toner | Ankauf leere Tonerkartuschen

  Profil   E-Mail   Website   Editieren   Zitieren
subjective
Forenheld




Beiträge: 844

Es gibt bei jeder Art von Escaping/Absicherung die nur auf Zeichen gibt eine potentielle Möglichkeit sie zu umgehen. Daher ist die Whitelist eine deutlich bessere Idee.

Soweit ich es jedoch sehe ist die aktuelle Lösung sicher. Es wird eine Liste der Dateien in einem bestimmten Verzeichnis aufgebaut. Nur wenn die Datei in diesem Array vorhanden ist, wird sie eingebunden.

Elegant kann eine Lösung, welche GET-Param statt Dateinamen nutzt, nie sein.

---
Weaverslave

  Profil   Website   Editieren   Zitieren
Seite 1 | 2 | 3  

Antworten
Forum » PHP & MySQL » Nur bestimmte Variablen zulassen - Wie ??

Aktuelle Beiträge zur Hilfe im Forum für Homepage - Nur bestimmte Variablen zulassen - Wie ?? im Forum Homepage Hosting AntwortenLetztes Posting
Cybersicherheit für Unternehmen
in "PHP & MySQL"
3 18.11.2024 14:05 von Gaswer
Wirtschaftslage in der Ukraine
in "PHP & MySQL"
3 22.10.2024 15:04 von Gaswer
Rangliste (Ohne Mysql) (Kompliziertes Ordner System)
in "PHP & MySQL"
3 19.07.2021 06:00 von newtopblog
kleines problem mit phpadmin
in "PHP & MySQL"
5 11.04.2021 22:22 von Zavylon
Counter mit PHP
in "PHP & MySQL"
4 22.03.2021 16:29 von Robeni
Fehlermeldung beim Importieren der Datenbank in phpmyadmin
in "PHP & MySQL"
0 02.08.2019 22:14 von iFuchs
CMS für Online Shop
in "PHP & MySQL"
18 26.05.2019 13:29 von raiserle
Regestrierungproblem
in "PHP & MySQL"
3 28.11.2018 13:20 von norbertofahey
PHP Datum ausgeben?
in "PHP & MySQL"
1 19.10.2018 10:04 von Klaus1973
PHP befehl ausführen
in "PHP & MySQL"
11 16.08.2018 09:08 von Klaus1973
Visual Composer selber programmieren?
in "PHP & MySQL"
0 22.01.2017 23:45 von Redji



Besucher : 8126515    Heute : 433     Gestern : 463     Online : 219     21.11.2024    13:57      0 Besucher in den letzten 60 Sekunden        
Nach oben