[php] SafeMode detecteren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Willem2
  • Registratie: Oktober 2000
  • Laatst online: 05-09 07:32

Willem2

Ω is futile

Topicstarter
Hoe doe ik dit? Als ik puur kijk naar wat er in phpinfo() / php.ini staat ben je er namelijk niet altijd.

Je kunt in Apache bv. het volgende opgeven voor bv. virtuele servers:

php_admin_value safe_mode 1
php_admin_value open_basedir /home/userxx/html

Dan draait PHP dus wel degelijk in SafeMode, alleen phpinfo() zal je vertellen van niet. Valt dit te detecteren (behalve trial&error)?

en nee, ik houd niet van voetbal... :)


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

En je kan met bepaalde functies (ini_get oid) inlezen of een bepaalde setting gezet is. Heb je daar niks aan?

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

phpinfo zou wel de juiste gegevens weer moet geven. Je hebt namelijk de "global (master)" en de local settings. Die laatste zouden voor een virtual host de juiste waarden moeten geven.

Probeer anders de 2 php_admin_value directives binnen een <Directory /pad/naar/jouw/www/dir> te zetten. Misschien dat phpinfo ze dan wel goed weergeeft.

En ik neem aan dat phpinfo dezelfde instructies gebruikt als ini_get...

[ Voor 3% gewijzigd door drm op 25-11-2002 09:02 . Reden: HTML :/ ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Willem2
  • Registratie: Oktober 2000
  • Laatst online: 05-09 07:32

Willem2

Ω is futile

Topicstarter
ini_get doet idd de truc!:

if ( ini_get(safe_mode) ) echo "SafeMode On";
else echo "SafeMode Off";

werkt als een zonnetje! :)

tnx guys!

en nee, ik houd niet van voetbal... :)


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Willem2 schreef op 25 november 2002 @ 18:30:
if ( ini_get(safe_mode) ) echo "SafeMode On";

werkt als een zonnetje! :)

als je safe_mode nou vervangt door 'safe_mode' (mind the quotes) dan doet je code het ook nog eens met error_reporting op E_ALL.

reden: zet eens bovenaan je script:
code:
1
define ( 'safe_mode', 'spefnek' );

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Willem2
  • Registratie: Oktober 2000
  • Laatst online: 05-09 07:32

Willem2

Ω is futile

Topicstarter
code:
1
define ( 'safe_mode', 'spefnek' );


doet helemaal niets bij mij? (de rest van de code doet het dus goed).

uit de manual:
ini_get(): Returns the value of the configuration option on success

en define is geen config option value; of wel?

en nee, ik houd niet van voetbal... :)


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

't gaat erom dat je string literals moet quoten. Zet voor de gein maar 's
code:
1
error_reporting ( E_ALL );
bovenaan in je code
Dan zal je bij de aanroep
code:
1
ini_get ( safe_mode );
een waarschuwing in de trant van
Warning: constant safe_mode not defined. Assuming 'safe_mode' instead
krijgen. En dat is dus omdat een ongequote string eerst opgezocht wordt in de constanten tabel, en het eigenlijk dus ook een constante moet zijn.

Waarom werkt 't dan wel, zonder error_reporting op E_ALL?
Heeft te maken met backward compatibility. In PHP versies voor PHP4 was het gewoon indexen van vectoren (named arrays) zo aan te spreken:
code:
1
2
3
4
5
$array = array (
   'woei' => 'ja'
);

echo $array[woei];

Per PHP4 is het "Verplicht" om te quoten. 't Staat ook in de manual:
http://www.php.net/manual...guage.types.array.foo-bar

Dat geldt dus niet alleen voor indexen in arrays maar des te meer voor "gewone" strings.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1