![]() |
Problem mit mysqldump-Nachbau in PHP
Hallo Leute,
ich hab ein Problem mit einem mysqldump-Nachbau in PHP... :( Das Script soll sozusagen mysqldump ersetzen und bringt IMHO auch dieselbe Ausgabe wie mysqldump mit ein paar zusätzlichen Statements. Das Problem liegt bei den 'extended Inserts' - mysqldump's erfolgen beim Import ohne Mucks aber meine verursachen manchmal Warnungen (net so schlimm, aber warum?) und bei einer Tabelle mit über 45000 Datensätzen (PLZ) bricht der Server ein paar mal die Verbindung ab und diese Tabelle ist anschließend leer, alles andere passt... :o Ideen? TIA ~ |
Das Script läuft in ein Timeout und wird nicht ganz abgearbeitet.
In der php.ini kannst du die max. Laufzeit von Scripten bestimmen. Teste nocheinmal Sloter |
Ah, da is ja schon der Übeltäter :D
Ne, es braucht gerade mal ein paar Sekunden, und der Dump ist vollständig... Und die erste Zeile im Script ist set_time_limit(90); Und läuft bei dir... ~ |
Zitat:
2, warum machst ein Timelimit? Regelt doch die php.ini und möchtest du jedesmal dein Script bearbeiten falls die Datensätze größer werden. 3, deshalb ist auch der Fehler schon behoben und die Laufzeit ist korigiert. :D Sloter |
Zitat:
2.) Kanns auch auf 0 setzten -> unendlich - oder machst mir meine eigene php.ini für Mona-Net? :D 3.) ? ... So einfach hätt ich's auch gerne... Ich seh in ferner Zukunft eher das Problem beim Memorylimit als beim Timelimit... Die größte Tabelle hat im Moment 4,5 M (genau die macht das Problem mit den Extended Inserts)... :o -- Am einfachsten wär noch immer ein mysqldump als CronJob (user mysql oder sonstwer), welches vielleicht eine Sekunde für die ganze DB braucht, und die Gschicht wär schon gegessen... |
2,setz ruhig auf Null, sonst bin ich wieder schuld wenn es zu einem Timeout kommt :D ...wird ja eh von der php.ini gesteuert und a eigene griegst net :p
Limit für Memory steht jetzt bei 16 MB,da kannst a Menge wegdumpen bis das Script so viel verbraucht. <Am einfachsten wär noch immer ein mysqldump als CronJob So bist du ja viel Freier wenn ich ein Script in den Cron übernehme und nicht einen einzelnen Befehl. Du kannst zusätzlich noch einiges in die Datei reinpacken oder ändern und brauchst nicht immer mich dazu. Sloter |
-> PM :D
|
FYI: Ok, Problem hat sich im Grunde mal erledigt.
Es lag nicht am Script, sondern an irgendeiner mySQL-Einstellung, sodass ich nicht mit einer Query >45000 DS anlegen konnte... Hab jetzt statt extended die normalen (saulangsamen) INSERTs genommen... ~ |
Sloter:
<Obiwan> Du möchtest PHP im Safe Mode betreiben </Obiwan> Aber Spaß beiseite. PHP ohne Safe Mode bringt einige Sicherheitsrisiken. 1) PHP kann sämtliche Dateien am Server lesen z.B. auch Dateien von anderen Accounts :eek: 2) Diverse Einstellung z.B. das oben genannte Zeitlimit können überschrieben werden. Bei einen guten Script ist es ja kein Problem, allerdings wenn ein Script schlecht programmiert ist kann es die Serverstabilität gefährden. Zitat:
|
<Luke Skywalker>
Ja Meister, aber die dunkle Macht des Fileuploads ist sehr stark </Luke Skywalker> 1, Läßt sich mit Dateirechte recht gut Unterbinden, ist zwar mit etwas handarbeit verbunden aber es geht. Sloter |
Zitat:
Man legt einfach ein /tmp Verzeichnis (777) dort an wo das Script ausgeführt wird. Bei einigen PHP Applikation lässt sich sogar der Name des Safe Mode Upload Verzeichnisses einstellen. Zitat:
Ein harmloses Beispiel: Probiere einmal http://phpsysinfo.sourceforge.net aus. Nettes Script, lief sogar am WCM Server für kurze Zeit. Zeigt Uptime, CPU, Speicher usw. an. Diese Daten werden aber nicht durch PHP übergeben sondern durch öffnen von Systemdateien: /proc/sys/kernel/hostname /proc/version /proc/uptime /proc/loadavg /proc/cpuinfo /proc/pci usw. /proc ist nicht das einzige Verzeichnis das sich öffnen lässt. Ich würde daher so bald als möglich Safe Mode einschalten. Theoretisch (wenn alle Rechte richtig vergeben sind) sollten keine Probleme auftauchen. |
Wenn ein Script sauber programmiert ist, geht auch der Fileupload mit "off",aber es gibt viele Scripten die sind nicht so sauber programmiert.
Nur Safemode auf off ist aber auch zu wenig. Wirklich sicher wird es nur durch vernünftige Datei- und Userrechten, SuEXEC, safe_mode und open_basedir. ;-) chmod 751 webx verhindert auch schon das auslesen weiterer Accounts und unterbindet das wandern im Dateisystem. zB: /www/web1 /www/web2 usw... Sloter |
nur nicht...
|
Zitat:
Zitat:
1) vernünftige Datei- und Userrechten Bringen wenig. Wenn PHP als Teil von Apache läuft, hat es automatisch fast alle Rechte die Apache hat (=fast root). 2) SuEXEC Funktioniert nur im CGI Modus. 3) open_basedir Nach Safe Mode eine weitere brauchbare Einstellung, allerdings nicht wirklich Flexibel. Zitat:
|
<sinnvoll schlecht programmierte Scripte auf virtuellen Accounts zu <betreiben, vor allem wenn sie irgendwelche Dinge uploaden können
Wie willst du ein paar Hundert Accounts überwachen? Soll ich mir jedes Script zuschicken lassen? Ausserdem läuft jeder Virtuelle Accont unter einem eigenen User/Group. Kann man ja schön in der httpd.conf bestimmen. <2) SuEXEC <Funktioniert nur im CGI Modus. PHP als CGI installieren ? ;) <Funktioniert teilweise. Es müssen sämtliche Dateien im Verzeichnis <auf 751 umgestellt werden um nicht ausgelesen zu werden. Daher ist <es keine wirkliche Alternative. Beim letzten Sicherheitscheck den die CT anonym bei Hoster gemacht hat, hat es sich schon als sinnvoll herausgestellt....... @Käptn :hehe: Sloter |
Im Attachment ein Screenshot von meinen gestrigen Versuchen. Oben ohne Safe Mode, unten mit Safe Mode.
Mit einer einzigen Einstellung (in diesem Fall Safe Mode) wird PHP wesentlich sicherer und erlaubt kein öffnen von fremden Dateien. |
Ja ich weiß schon und die CT hat sogar ein schönes Script zum testen verteilt.
Spiel dich ein wenig mit den Dateirechten, dann kannst auch das öffnen diverser Datein verhindern. Sloter |
Ich wollte dir mit diesem Screenshot nur zeigen das man mit einer einzigen Einstellung den Server absichern kann :)
Zitat:
Beispiel: Jemand installiert phpBB2 auf seinen Account und macht chmod 777 config.php wie es empfohlen wird. Die Datei kann damit automatisch von allen Accounts am Server gelesen werden, wobei es egal ist dass das Verzeichnis auf chmod 751 umgestellt wurde. |
Mit 777 kan es die ganze Welt über Browser lesen und beschreiben......
Die 751 verhindern nur das interne Auslesen der datei, und das sehr gut. Sloter |
Zitat:
Eine Konfigurationsdatei wie z.B. config.php kann man selbst bei 777 nicht über den Browser lesen da Username/Passwort in Variabeln gespeichert wird z.B: PHP-Code:
Ich habe in der Zwischenzeit den c't Artikel angesehen. Der Workaround mit chmod 751 ist eigentlich nur für Notfälle: Zitat:
Zitat:
Zitat:
|
Ok nicht mit dem Browser, aber eine eigenes Script mit fopen reinschreiben und ausführen ist möglich.
da wirst du mir zustimmen :D Probier es einmal aus, setze die web1 und web2 auf 751 und versuche dann von web1 auf web2 intern zuzugreifen. Sloter |
Zitat:
Du testest nicht zufälligerweise mit dem c't Script? Dieses Script verwendet wahrscheinlich die opendir() Funktion um das Verzeichnis auszulesen. Probiere es einmal direkt: PHP-Code:
Es muss schon jede einzelne Datei auf 751 umgestellt werden damit sie nicht auslesbar ist. |
Kann es sein das dein VirtualHost keinen eigenen User haben.
Sondern alles unter einem User/Group läuft? Sloter |
Nein, es sind mehrere User vorhanden. Ohne eingeschalteten Safe Mode werden allerdings User/Usergruppen automatisch ignoriert.
Beispielsweise kann man httpd.conf auch mittels <?php readfile("/pfad/httpd.conf"); ?> anzeigen. Da hilft es nicht die entsprechenden Verzeichnisrechte auf Chmod 751 zu ändern. Nur wenn man httpd.conf selber auf 751 umstellt, kann diese Datei nicht mehr über PHP gelesen werden. |
Alle Zeitangaben in WEZ +2. Es ist jetzt 21:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag