Funksjonen "system" disablet

Regulæruttrykk, objektorientering, samt problemstillinger omkring optimalisering og sikkerhet.

Funksjonen "system" disablet

Innlegg ingeva » 04.08.2013 19:00

Jeg har et script som er avhengig av system-funksjonen:

system("mysqldump -ubrukernavn -ppassord database");
Scriptet startes med et wget-kall (shell-script):

wget "http://domene/databasedump.php?u=bruker&p=passord&d=database" -Odatabase.sql

Jeg får en feilmelding fra php fordi funksjonen er disablet av sikkerhetsgrunner. Funksjonen "ini_set" er også disablet.
Dermed er det ikke mulig å fjerne "system" fra listen over blokkerte funksjoner. Jeg har ikke adgang til systemets php.ini siden dette ligger på et webhotell.

Hvis noen vil fortelle meg at dette er en sikkerhetsrisiko, kan jeg legge til at jeg har lagt inn en ekstra sikkerhetskode som vil gjøre hacking svært vanskelig.
Er det en enkel måte å løse dette på, eller må jeg krangle med webhotellet for å fjerne denne begrensningen?
"If you're staying with Microsoft you're getting more and more overwhelmed to update and change your whole IT infrastructure." Peter Hofmann . . . . Se her.
Brukerens avatar
ingeva
Seniormedlem
 
Innlegg: 1078
Registrert: 24.01.2011 6:48
Bosted: Sandvika

Re: Funksjonen "system" disablet

Innlegg adeneo » 04.08.2013 19:27

Dersom hosten har deaktivert både muligheten til å endre instillingene i php.ini og system() og exec() så er det nok en grunn til det, og jeg kommer ikke på noen andre måter å aktivere dette på dersom hosten har gjort jobben sin skikkelig.

Det er en grunn til at de gjør dette, det finnes ferdige "exploits" (tusenvis av de) som utnytter svakheten i disse funksjonene, og det eneste sikre er ofte å deaktivere i stedet.
Dersom du kan overtale hosten din til at din løsning er sikker nok, så burde det vel være mulig å få aktivert disse funksjonene igjen, men jeg kan ikke helt forstå hvorfor du må bruke wget når det finnes andre alternativer for å hente data og lagre filer direkte i PHP ?
adeneo
Medlem
 
Innlegg: 628
Registrert: 08.04.2011 21:09

Re: Funksjonen "system" disablet

Innlegg ingeva » 04.08.2013 19:40

adeneo skrev:Dersom du kan overtale hosten din til at din løsning er sikker nok, så burde det vel være mulig å få aktivert disse funksjonene igjen, men jeg kan ikke helt forstå hvorfor du må bruke wget når det finnes andre alternativer for å hente data og lagre filer direkte i PHP ?

Jeg skjønner at det er en grunn, men det er jo andre alternativer jeg spør etter .... :)
Jeg skulle kanskje ha spurt under SQL og databaser, for det er jo først og fremst det det dreier seg om her. Hvordan kan jeg kjøre en mysqldump fra min lokale server, hvis jeg ikke får utført system-funksjonen på webserveren?
Merk at dette skal skje automatisk, så phpMyAdmin etc. er ikke aktuelt.

Problemet med å endre dette på webserveren er kanskje at det må gjøres for alle brukere, og da skjønner jeg jo webhotellets syn på sikkerhets-spørsmålet - selv om jeg bare har sett dette på denne ene serveren. Andre er tydeligvis mindre paranoide.
"If you're staying with Microsoft you're getting more and more overwhelmed to update and change your whole IT infrastructure." Peter Hofmann . . . . Se her.
Brukerens avatar
ingeva
Seniormedlem
 
Innlegg: 1078
Registrert: 24.01.2011 6:48
Bosted: Sandvika

Re: Funksjonen "system" disablet

Innlegg Matsemann » 04.08.2013 20:12

ingeva skrev:Hvis noen vil fortelle meg at dette er en sikkerhetsrisiko, kan jeg legge til at jeg har lagt inn en ekstra sikkerhetskode som vil gjøre hacking svært vanskelig.

Problemet er ikke nødvendigvis hvilken skade brukerne dine kan gjøre, men hva du med vilje kan gjøre med denne tilgangen.
Men dette bør ikke være noe problem å gjøre via php/sql.
Du kan bruke spørringene "Show tables", så iterere over alle tabellene og kalle "show create table <tablename>" for å hente ut kode for å generere hver enkelt tabell.
Og så også kjøre en "select * from <tablename>" for å hente ut alt. Vil du ha det på mysql-dump form kan du jo for hver rad skrive ut "insert into <tabelename> values(implode(",", $raden))", så blir det til sql-statements du kan kjøre.

Endret: Kjapp googling på det jeg skrev ga meg noen som har implementert ca. det samme https://github.com/clouddueling/mysqldump-php
Master i Datateknikk, NTNU
Brukerens avatar
Matsemann
Moderator
 
Innlegg: 2133
Registrert: 05.02.2005 19:13

Re: Funksjonen "system" disablet

Innlegg ingeva » 04.08.2013 22:41

Matsemann skrev:Endret: Kjapp googling på det jeg skrev ga meg noen som har implementert ca. det samme https://github.com/clouddueling/mysqldump-php

Noe av problemet er at min kunnskap om programmatisk bruk av databaser er på et minimum, og det forekommer meg at det som må gjøres for å få dette til ikke står i noe rimelig forhold til resultatet.
Det var derfor jeg antydet ønsket om en enkel løsning.
Jeg skal likevel se på dette, og vurdere om det er verd noen større innsats.
"If you're staying with Microsoft you're getting more and more overwhelmed to update and change your whole IT infrastructure." Peter Hofmann . . . . Se her.
Brukerens avatar
ingeva
Seniormedlem
 
Innlegg: 1078
Registrert: 24.01.2011 6:48
Bosted: Sandvika

Re: Funksjonen "system" disablet

Innlegg ZnigeN » 05.08.2013 18:31

Forslaget fra Matsemann er bra og er nok det beste å gå for.
Du kan evt gå gjennom denne guiden som jeg syns er veldig godt forklart: http://campstamba.com/2010/12/create-yo ... rce-files/
Resultatet blir likt; "nesten-mysqldump" uten bruk av system()
Brukerens avatar
ZnigeN
Medlem
 
Innlegg: 938
Registrert: 13.07.2005 1:30
Bosted: Grimstad

Re: Funksjonen "system" disablet

Innlegg ingeva » 05.08.2013 20:14

ZnigeN skrev:Forslaget fra Matsemann er bra og er nok det beste å gå for.
Du kan evt gå gjennom denne guiden som jeg syns er veldig godt forklart: http://campstamba.com/2010/12/create-yo ... rce-files/
Resultatet blir likt; "nesten-mysqldump" uten bruk av system()

OK, takk!
Dette er velegnet til litt trening med MySQL databaser. Jeg har snust litt på det før, men syns det er omstendelig.
I mitt virke har jeg aldri hatt bruk for databaser, så jeg føler meg nokså grønn på området.

Men jeg får ta det som en utfordring. Jeg liker utfordringer! :)

Jeg kan kjøre og teste dette lokalt uten å ødelegge noe.
"If you're staying with Microsoft you're getting more and more overwhelmed to update and change your whole IT infrastructure." Peter Hofmann . . . . Se her.
Brukerens avatar
ingeva
Seniormedlem
 
Innlegg: 1078
Registrert: 24.01.2011 6:48
Bosted: Sandvika

Re: Funksjonen "system" disablet

Innlegg ingeva » 06.08.2013 11:47

ingeva skrev:Jeg kan kjøre og teste dette lokalt uten å ødelegge noe.

Ja, da har jeg gjort det.

Koden er egentlig ganske grei, bortsett fra at den er skrevet for en eldre php-variant, og vil ikke virke
ved neste oppgradering. Kanskje ikke noe stort problem. Backupen ser bra ut og lastes helt greit inn igjen,
men selv om SQL-filen ser helt OK og fullstendig ut, så blir alle artiklene (Dette er et Joomla! CMS-system) avkortet. Det er bare omtrent første avsnitt, og bare en del av overskrifter etc. som kommer frem.

Så da vet jeg ikke om det er verd bryet for denne ene websiden. For alle de andre fungerer det greit med mysqldump, og backup kan tas helt automatisk. Jeg får også oppdatert automatisk på min lokale webserver.

Jeg tar vare på koden, kanskje jeg kan få bruk for det en gang, men jeg syns ikke det er nok å vinne på å gå videre med det i denne omgang. Jeg har andre ting jeg må prioritere.

Takk for all hjelp og velvilje!
"If you're staying with Microsoft you're getting more and more overwhelmed to update and change your whole IT infrastructure." Peter Hofmann . . . . Se her.
Brukerens avatar
ingeva
Seniormedlem
 
Innlegg: 1078
Registrert: 24.01.2011 6:48
Bosted: Sandvika

Re: Funksjonen "system" disablet

Innlegg adeneo » 06.08.2013 12:58

ingeva skrev:...(Dette er et Joomla! CMS-system) ....


Det finnes jo tusenvis av plugins for Joomla som enkelt tar backup av databasen ?

http://extensions.joomla.org/extensions ... ckup/15682
adeneo
Medlem
 
Innlegg: 628
Registrert: 08.04.2011 21:09

Re: Funksjonen "system" disablet

Innlegg ingeva » 06.08.2013 13:44

adeneo skrev:
ingeva skrev:...(Dette er et Joomla! CMS-system) ....

Det finnes jo tusenvis av plugins for Joomla som enkelt tar backup av databasen ?
http://extensions.joomla.org/extensions ... ckup/15682

Jada, men jeg ville ha en felles løsning, ikke bare for Joomla, og backupen skal hentes til min egen PC (lokalt), og ikke lagres på serveren. Backup og restore skal gå helautomatisk. Dette fungerer nå på alle webhotellene unntatt ett, men det er også det minst viktige.
"If you're staying with Microsoft you're getting more and more overwhelmed to update and change your whole IT infrastructure." Peter Hofmann . . . . Se her.
Brukerens avatar
ingeva
Seniormedlem
 
Innlegg: 1078
Registrert: 24.01.2011 6:48
Bosted: Sandvika

Re: Funksjonen "system" disablet

Innlegg ingeva » 12.08.2013 13:28

ingeva skrev:Jada, men jeg ville ha en felles løsning, ikke bare for Joomla, og backupen skal hentes til min egen PC (lokalt), og ikke lagres på serveren. Backup og restore skal gå helautomatisk. Dette fungerer nå på alle webhotellene unntatt ett, men det er også det minst viktige.

Jeg tok fatt på problemet igjen siden jeg hadde problemer med en servers egen backup, som gikk helt i frø.
Jeg tok utgangspunkt i dette:

http://stackoverflow.com/questions/1266 ... -footprint

som beskrev en metode som vil være brukbar også med neste versjon av php.
Litt småfikling, bla. for å få norske tegn, ga meg det jeg trengte.

Istedenfor å skrive til fil, forandret jeg slutten på scriptet slik:

Kode: Merk alt
$mysqli->close();

//   Send the file
header("content-type:application/gzip");
echo gzencode($return,9);
?>

og får dermed filen (database.sql.gz) lagret på min egen PC uten å få veien om en fil på serveren.

Det "verste" er at det faktisk virker også - og er utrolig raskt! :)

Jeg kjører et bash-script med cron som sørger for å hente backup regelmessig. Det oppdaterer også databasen lokalt.
"If you're staying with Microsoft you're getting more and more overwhelmed to update and change your whole IT infrastructure." Peter Hofmann . . . . Se her.
Brukerens avatar
ingeva
Seniormedlem
 
Innlegg: 1078
Registrert: 24.01.2011 6:48
Bosted: Sandvika

Re: Funksjonen "system" disablet

Innlegg Matsemann » 12.08.2013 16:48

Bra du fant en god løsning på det. ;)
Master i Datateknikk, NTNU
Brukerens avatar
Matsemann
Moderator
 
Innlegg: 2133
Registrert: 05.02.2005 19:13

Re: Funksjonen "system" disablet

Innlegg ingeva » 12.08.2013 18:21

Matsemann skrev:Bra du fant en god løsning på det. ;)

Ja, men det var en glipp der, så her er en korreksjon:

Kode: Merk alt
$mysqli->close();

//   Send the file
header("Content-Type: application/x-gzip");
header("Content-Encoding: identity");
echo gzencode($return,9,FORCE_GZIP);
?>

Da går det bedre nå etternavnet på filen er ".gz".
"If you're staying with Microsoft you're getting more and more overwhelmed to update and change your whole IT infrastructure." Peter Hofmann . . . . Se her.
Brukerens avatar
ingeva
Seniormedlem
 
Innlegg: 1078
Registrert: 24.01.2011 6:48
Bosted: Sandvika


Gå til Avansert PHP

Hvem er i forumet

Brukere som leser i dette forumet: Ingen registrerte brukere og 4 gjester