Ich habe die Objektklasse erfolgreich instanziiert, aber ich kann nicht herausfinden, wie eine Funktion aufgerufen wird. Hier ist mein PHP-Code:Übergeben von GET-Variablen in PHP zum Instanziieren von Klassen und Aufruffunktionen
$obj = new router();
class router{
public function __construct(){
if($_SERVER['REQUEST_METHOD'] == 'GET'){
echo "GET";
$page = 'index';
$funct = 'myfuncempty';
if (!empty ($_GET)){
$page = $_GET['page'];
$funct = $_GET['func'];
}
$obj = new $page(); //instantiating object with get from class
$obj->funct;
}
else{
echo "POST";
}
}
}
class index{
public function __construct(){
echo "hello I'm index";
}
public function myfunc(){
echo "yo";
}
public function myfuncempty(){
echo "empty get";
}
}
class login{
public function __construct(){
echo "hello I'm login";
}
public function loggedin(){
echo "you're logged in";
}
public function loggedinempty(){
echo "its empty";
}
}
Und das ist das HTML-Formular, das ich Variablen über GET übergeben verwenden:
<html>
<head></head>
<body>
<form action="index.php" method="POST"><input type ="text" name="page" id="page" /><input type="submit" /></form>
<form action="index.php" method="GET">Page:<input type="text" name="page" id="page" />Function:<input type="text" name="func" id="func" /><input type= "submit" />
</body>
</html>
Wenn ich Index in für Seite eingeben und MyFunc in für die Funktion, I erhalten diese Antwort:
GEThello I'm login Notice: Undefined property: login::$funct in /home/cr47/public_html/final_project/index.php on line 27
Also, es die ‚Seite‘ richtig und instanziieren das Objekt ist vorbei, aber es nicht richtig ist, die myfunc Funktion aufrufen. Irgendwelche Ideen?
Klaffendes Sicherheitsloch. – ThiefMaster
@ThiefMaster Was, werden Hacker in die Maschine eindringen, ihre eigene kompromittierte Klasse erstellen und sie mit einem $ _GET-Parameter instanziieren? – pp19dd
Die Chancen stehen gut, dass es Klassen in seiner Anwendung oder eingebaute PHP-Klassen gibt, die nicht "sicher" sind, wenn jemand beliebige Methoden aufrufen kann. Auch wenn das Risiko nur moderat ist, ohne dass man Argumente vorbringen kann. Trotzdem können Sie zumindest Fehler verursachen, die dann in eine Logdatei eindringen oder E-Mails an jemanden auslösen können. – ThiefMaster