Napisany przez: kyloren 19.09.2020, 07:29:47
Moj kod wyklada tak:
<?php
class User
{
public $username;
public $isAdmin;
public function PrintData(){
if ($this->IsAdmin){
http://www.php.net/echo $this->username . " is an admin\n";
}
else {
http://www.php.net/echo $this->username . " is not an admin\n";
}
}
}
//$obj = new User();
//$obj->username='Pawel';
//$obj->IsAdmin=True;
//$obj->PrintData();
//echo serialize($obj);
$obj=http://www.php.net/unserialize($_POST['serial']);
//var_dump($obj);
$obj->PrintData();
?>
Przy wyslaniu zadania do serwera: curl -XPOST -d "serial=O:4:"User":2:{s:8:"username";O:8:"ReadFile":1:{s:8:"filename";s:11:"/etc/passwd";}s:7:"IsAdmin";b:1;}" 127.0.0.1/unserialize.php
dostaje blad:
[Sat Sep 19 08:09:52 2020] PHP Notice: unserialize(): Error at offset 0 of 89 bytes in /home/sysagent/php/unserialize.php on line 21
[Sat Sep 19 08:09:52 2020] PHP Fatal error: Uncaught Error: Call to a member function PrintData() on bool in /home/sysagent/php/unserialize.php:23
Stack trace:
#0 {main}
thrown in /home/sysagent/php/unserialize.php on line 23
[Sat Sep 19 08:09:52 2020] 127.0.0.1:43500 [500]: POST /unserialize.php - Uncaught Error: Call to a member function PrintData() on bool in /home/sysagent/php/unserialize.php:23
Stack trace:
#0 {main}
thrown in /home/sysagent/php/unserialize.php on line 23
[Sat Sep 19 08:09:52 2020] 127.0.0.1:43500 Closing
Gdzie lezy blad w moim kodzie?
Napisany przez: viking 19.09.2020, 07:41:45
https://www.php.net/manual/en/class.serializable.php
Napisany przez: kyloren 19.09.2020, 07:57:29
Cytat(viking @ 19.09.2020, 08:41:45 )
https://www.php.net/manual/en/class.serializable.php
Dziekuje, ale chyba dalej nie rozumiem w czym polega problem.
Napisany przez: viking 19.09.2020, 10:48:37
W pliku w którym robisz unserialize masz zdefiniowaną klasę User? Ogólnie to unserilize z post jest niebezpieczne.
Napisany przez: kyloren 19.09.2020, 18:29:55
Cytat(viking @ 19.09.2020, 11:48:37 )
W pliku w którym robisz unserialize masz zdefiniowaną klasę User? Ogólnie to unserilize z post jest niebezpieczne.
Wydaje mi sie w POSTcie wysylam obiekt "User"
curl -XPOST -d "serial=O:4:"
User":2:{s:8:"username";O:8:"ReadFile":1:{s:8:"filename";s:11:"/etc/passwd";}s:7:"IsAdmin";b:1;}" 127.0.0.1/unserialize.php
Tak wiem ze to nie jest niebezpieczne. Chce przetestowac konsekwencje
Napisany przez: viking 19.09.2020, 19:02:18
No tak. Ale wysyłasz properties. Metod nie i nie da się. Żeby odtworzyć php musi wiedzieć jak wygląda te klasa więc musi np być dostępna dla autoloadera.