Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ PHP _ [php]unserialize

Napisany przez: kyloren 19.09.2020, 07:29:47

Moj kod wyklada tak:

  1. <?php
  2. class User
  3. {
  4. public $username;
  5. public $isAdmin;
  6.  
  7. public function PrintData(){
  8. if ($this->IsAdmin){
  9. http://www.php.net/echo $this->username . " is an admin\n";
  10. }
  11. else {
  12. http://www.php.net/echo $this->username . " is not an admin\n";
  13. }
  14. }
  15. }
  16. //$obj = new User();
  17. //$obj->username='Pawel';
  18. //$obj->IsAdmin=True;
  19. //$obj->PrintData();
  20. //echo serialize($obj);
  21. $obj=http://www.php.net/unserialize($_POST['serial']);
  22. //var_dump($obj);
  23. $obj->PrintData();
  24.  
  25. ?>

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.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)