[php] Cronjob beveiligen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
Ik heb een cronjob waarvan ik niet wil dat mensen hem vanuit hun browser kunnen aanroepen.

Normaal gesproken kan je dit soort bestanden in /private zetten, maar ik niet. Omdat mijn host php als module heeft geinstalleerd kan ik in de command line van de job alleen naar bestanden wijzen in /httpdocs. (omdat het path moet beginnen met http://....)

Nu heb ik een beetje lopen kutten met chmod, maar als ik het bestanden bescherm van de buitenwereld kan de cronjob zelf ook niet meer worden uitgevoerd.

Een oplossing is om een .htaccess bestand in de map te zetten maar dat soort oplossingen vind ik veel te omslachtig.

Iemand een idee?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Dit bovenaan je script zetten?
PHP:
1
2
3
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
  die();
}


Overigens in de .htaccess oplossing veel netter en bovendien ook juist veel minder omslachtig dan dit. :X

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
Eigenlijk vind ik die .htaccess optie ook mooier. Maar ik heb slecht nieuws, de cronjob verteld me dat hij geen toegang heeft opeens ;)

Jouw optie lijkt me ook wel goed, maar kan je precies uitleggen wat deze code doet?
PHP:
1
if ($_SERVER['REQUEST_METHOD'] == 'GET') {

Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
Ik heb nu daarvoor ook een oplossing gevonden:

plak
-auth=username:password
achter het commando

Acties:
  • 0 Henk 'm!

  • Rodyman
  • Registratie: November 2001
  • Laatst online: 08-06-2024

Rodyman

chillend

Je kunt ook je cronjob in een beveiligde directory zetten (htaccess) en dan met behulp van het volgende stukje code de cronjob aanroepen:

wget --http-user=<USERNAME> --http-passwd=<PASSWORD> http://www.server.com/secure/cronjob.php

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

verytallman schreef op woensdag 19 april 2006 @ 19:25:
Eigenlijk vind ik die .htaccess optie ook mooier. Maar ik heb slecht nieuws, de cronjob verteld me dat hij geen toegang heeft opeens ;)

Jouw optie lijkt me ook wel goed, maar kan je precies uitleggen wat deze code doet?
PHP:
1
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
REQUEST_METHOD is een header die door de webserver gezet wordt. Als je je PHP-script via Apache serveert dan zul je altijd een REQUEST_METHOD hebben. Wanneer je via de commandline (en dus ook met behulp van een cronjob) een PHP-script draait is je webserver er niet bij betrokken en wordt die header niet gegenereerd.

Overigens is dit completer:
PHP:
1
2
3
4
if (isset($_SERVER['REQUEST_METHOD']) &&
     in_array($_SERVER['REQUEST_METHOD'], array('GET', 'POST', 'HEAD'))) {
  die();
}

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • JayVee
  • Registratie: Mei 2002
  • Laatst online: 31-08 10:22

JayVee

shibby++!

Ik heb dit ooit gebruikt:
PHP:
1
2
3
4
if (!isset($_SERVER['SHELL'])) {
    echo 'Dit script werkt alleen via CLI';
    exit;
}

Ik weet niet of het 100% veilig is, aangezien het niet gedocumenteerd is op php.net

ASCII stupid question, get a stupid ANSI!


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Rodyman schreef op woensdag 19 april 2006 @ 19:31:
Je kunt ook je cronjob in een beveiligde directory zetten (htaccess) en dan met behulp van het volgende stukje code de cronjob aanroepen:

wget --http-user=<USERNAME> --http-passwd=<PASSWORD> http://www.server.com/secure/cronjob.php
Lijkt me nuttige info, maar "page not found" ?

March of the Eagles


Acties:
  • 0 Henk 'm!

Verwijderd

omdat die url een voorbeeld was, geen link naar een document met meer info

Acties:
  • 0 Henk 'm!

  • Rodyman
  • Registratie: November 2001
  • Laatst online: 08-06-2024

Rodyman

chillend

Precies, ik bedoelde natuurlijk dat je dit als cronjob zou kunnen maken:
code:
1
wget --http-user=<USERNAME> --http-passwd=<PASSWORD> http://www.server.com/secure/cronjob.php

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Beetje een rare oplossing om je http daemon extern te gaan benaderen als je al shelltoegang hebt op de lokale host, niet? ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Waarschijnlijk kan het niet anders omdat de host php enkel door apache uit laat voeren. Dan ben je inderdaad aangewezen op het gebruik van wget (en heb je dus weinig aan de request method oplossing die -NMe- gaf)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Hmm, idd. Stom van me. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Icey
  • Registratie: November 2001
  • Laatst online: 17-09 16:46
Kijk naar een ipadres? Of zeg ik nu iets doms.. Die server zal toch altijd hetzelfde ipadres hebben (dan ga ik dus uit van het feit dat je iets als wget gebruikt).


PHP:
1
2
3
4
5
6
<?php
if($_SERVER['REMOTE_ADDR'] == 'ipadres webserver')
{
// doe iets
}
?>

[ Voor 8% gewijzigd door Icey op 19-04-2006 23:04 ]


Acties:
  • 0 Henk 'm!

  • Stoppel
  • Registratie: Januari 2006
  • Laatst online: 20-09 15:35

Stoppel

een diedudabist

Hmmm koppel je dan je code niet teveel met de server?
Stel dat je code naar een nieuwe server verhuist (met nieuw ip) of stel dat je meerdere servers gebruikt en dan m.b.v. een loadbalancer je traffic verdeelt.

Hard een ip adres erin zetten lijkt mij niet de juiste weg. IMHO

Beauty is in the eye of the beholder


Acties:
  • 0 Henk 'm!

  • Brons
  • Registratie: April 2002
  • Laatst online: 20-09 11:57

Brons

Fail!

Misschien kan je het koppelen aan het adres. Dus als je host een cluster heeft staan kan je het altijd nog controleren op *.hostbedrijf.ext.

Volgens mij is er trouwens geen perfecte manier om dit te beveiligen, omdat je dit het beste gewoon buiten de webserver kan doen.

My 2 cents.

Acties:
  • 0 Henk 'm!

  • vakantieman
  • Registratie: November 2003
  • Laatst online: 07-08 00:13
Ik gebruik op mijn website het volgende script om te bekijken of het via de browser wordt uitgevoerd. Werkt als een trein:
PHP:
1
2
3
if (!isset($_SERVER["argv"][0])) {
    die("<br><strong>Dit script kan alleen maar gedraaid worden via de command-line.</strong>");
}


Ik hoop dat je er iets mee kunt. ;)

Acties:
  • 0 Henk 'm!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 20:49

DizzyWeb

Ondertiteld

Ik ben bang dat alle oplossingen met $_SERVER["argv"] en $_SERVER['REQUEST_METHOD'] niet gaan werken aangezien de TS aangeeft de cronjob met wget te moeten starten en DUS "via de browser" werkt.

Ik denk dat een .htaccess toch de simpelste oplossing is.

Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
Zoals ik hierboven al aangaf heb ik de htaccess oplossing gekozen.
Uiteindelijk vind ik die nog netter dan een PHP oplossing. Ook omdat ik nu zelf ook de optie heb de cronjob handmatig aan te roepen via de browser.

Allen bedankt !

[ Voor 5% gewijzigd door verytallman op 21-04-2006 09:48 ]


Acties:
  • 0 Henk 'm!

  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 19-09 16:51

LauPro

Prof Mierenneuke®

Waarom niet php_sapi_name() gebruiken?

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


Acties:
  • 0 Henk 'm!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 20:49

DizzyWeb

Ondertiteld

Zie mijn post hierboven ;)
Pagina: 1