anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Di 19 Mär, 2024 09:03

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 50 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
BeitragVerfasst: Sa 28 Jul, 2007 20:59 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 28 Aug, 2004 18:48
Beiträge: 1712
Anleitung für die Auslagerung von $session['user']['output'] in txt.files
zum immensen entlasten der Datenbank geeignet.
das System wurde damals von Eliwood für Silienta gemacht und lange getestet
bitte beachtet, dass die txt.files beim löschen/verfallen von Chars nicht automatisch
gelöscht werden, da wir dafür eine routine haben. ggf. müsst ihr da selber
noch ein wenig dran "arbeiten" oder den dazugehörigen Ordner ab und an mal löschen


Contact:
http://www.silienta-logd.de
Rikkarda@silienta-logd.de
icq: 212076731
anpera Nick: Rikkarda
Entwicklerforum: http://www.dai-clan.de/SiliForum/wbb2/index.php



Es ist möglich, dass in Euren Logds noch andere Datein geändert werden müssen, als die in Silienta,
daher ist diese Einbauanleitung ohne eine Garantie auf vollständigkeit und muss von Euch nötig
kontrolliert werden, ob alle Bereiche geändert wurden. Als suchhilfe eben $session['output'] = $session['user']['output'];
suchen und ggf. ersetzen

1. Schritt:
Im Rootverzeichnis des Logd-Ordners muss folgender Ordner erstellt werden:
Ordnername:
cache
Rechtesetzung für den Ordner: 777


2. Schritt:
Änderungen in folgenden Datein nötig daher MACHT ein BACKUP dieser Datein BEVOR ihr ändert:

common.php
repnav.php (falls vorhanden)
login.php
user.php
userfunc.php bzw. die Datei, in der IHR die function saveuser liegen habt


3. Schritt:
Dann fangen wir mal an:


common.php


suche:

$this->bbcode_second_pass_code('', '$session['output'] = $session['user']['output'];')

ersetze mit:
$this->bbcode_second_pass_code('', '
$session['output'] = file_get_contents('./cache/c'.$session['user']['acctid'].'.txt'); //by Eliwood ')


login.php

suche:
$this->bbcode_second_pass_code('', '
$session[output]=$session[user][output];')


ersetze mit:

$this->bbcode_second_pass_code('', '
$session['output'] = file_get_contents('./cache/c'.$session['user']['acctid'].'.txt'); //by Eliwood ')


repnav.php (falls vorhanden) komplett hiermit ersetzen:

$this->bbcode_second_pass_code('', '
<?php
//repnav.php by fly
//Allows Mods to repair navs of badnav-players
// inkl cachefiletxt system by Eliwood for www.silienta-logd.de

require_once "common.php";

page_header("Navs reparieren?");
if ($_GET[op]=="") {
output("Bist Du sicher, dass Du für $_GET[char] die Navs reparieren willst?");
addnav("Ja","repnav.php?op=j&char=$_GET[char]");
addnav("Nein","list.php");


}
else
{
output("Die Navs von $_GET[char] wurde repariert!");
$sql = "UPDATE accounts SET allowednavs='' WHERE login='$_GET[char]'";
db_query($sql);

$sql = 'SELECT acctid FROM `accounts` WHERE `login` = "'.$_GET['char'].'"';
$row = db_fetch_assoc(db_query($sql));
$file = fopen('./cache/c'.$row['acctid'].'.txt','wb');
fwrite($file,'');
fclose($file);

addnav("Kämpferliste","list.php");
}
page_footer();
?>
')


user.php


suche:
$this->bbcode_second_pass_code('', '
if ($_GET[op]=="lasthit")
$output="";
$sql = "SELECT output FROM accounts WHERE acctid=''";
$result = db_query($sql);
$row = db_fetch_assoc($result);
echo str_replace("<iframe src=","<iframe Xsrc=",$row['output']);
exit();')


ersetze mit:
$this->bbcode_second_pass_code('', '
//changes by Eliwood for www.silienta-logd.de geändert für das txtfilesystem
if ($_GET[op]=="lasthit"){
$output = file_get_contents('./cache/c'.$_GET['userid'].'.txt');

echo str_replace("<iframe src=","<iframe X=",$output);
exit();')



suche:
$this->bbcode_second_pass_code('', '
}elseif($_POST[fixnavs]!="")
$sql = "UPDATE accounts SET allowednavs='',output='' WHERE acctid=$_GET[userid]";')


ersetze mit:
$this->bbcode_second_pass_code('', '
//changes by Eliwood for www.silienta-logd.de geändert für das txtfilesystem
}elseif($_POST[fixnavs]!=""){
$sql = "UPDATE accounts SET allowednavs='',output=\"\" WHERE acctid='$_GET[userid]'";
$file = fopen('./cache/c'.$_GET['userid'].'.txt','wb');
fwrite($file,'');
fclose($file);')





userfunc.php bzw. die function saveuser


suche:
$this->bbcode_second_pass_code('', '
$session[user][output]=$session[output];')


ersetze mit:
$this->bbcode_second_pass_code('', '
//changes by Eliwood for www.silienta-logd.de geändert für das txtfilesystem
$file = fopen('./cache/c'.$session['user']['acctid'].'.txt','wb');
fwrite($file,$session['output']);
fclose($file);
chmod('./cache/c'.$session['user']['acctid'].'.txt', 0777);

')




alle Datein speichern und nicht vergessen, dem Ordner Cache die Rechte 777 zu geben.

lg Rikkarda



Download der Anleitung im Anhang möglich


Feedback und evtl. noch zu ändernde Datein hier hinein :)




Edit: in silienta habe ich mit einer .htaccess jetzt den zugriff verboten danke an Dragonslayer fürs melden :) und thx an Eli für die hilfe sie richtig einzustellen:


im Ordner cache:

.htaccess

inhalt:
$this->bbcode_second_pass_code('', '
<Files *>

Deny from all



</Files>')[/code]


Dateianhänge:
Dateikommentar: Anleitung für das txtfile Auslagerungssystem der outputs zum entlasten der Datenbank
inkl. Sicherheitsfix per .htaccess

cache.rar [1.98 KIB]
381-mal heruntergeladen
Dateikommentar: Anleitung für das txtfile Auslagerungssystem der outputs zum entlasten der Datenbank
cache.rar [1.74 KIB]
348-mal heruntergeladen

_________________
~Inaktiv und Abwesend solange Mysql hier Moderatorenrechte hat~


Zuletzt geändert von Rikkarda am So 29 Jul, 2007 15:54, insgesamt 3-mal geändert.
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 28 Jul, 2007 21:09 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Soweit ich das richtig in Erinnerung hab, braucht man noch folgenden Query, um Badnavs zu vermeiden:

$this->bbcode_second_pass_code('', 'UPDATE accounts SET allowednavs='',output='',restorepage=''')


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 29 Jul, 2007 01:44 
Offline
Held
Held

Registriert: Di 18 Jul, 2006 16:03
Beiträge: 294
mal versuchen ich danke Euch beiden

:wink:

_________________
Billig und gut einfach nur zum empfehlen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Ganz fiese böse Sicherheitslücke
BeitragVerfasst: So 29 Jul, 2007 13:51 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 20 Sep, 2004 23:43
Beiträge: 164
Wohnort: Berlin
LoGD: http://www.atrahor.de/source.php
Ich hab lange überlegt ob ich sowas einbauen sollte.
Es hat meiner Meinung nach den Vorteil dass die DB nicht so schnell fragmentiert, aber den großen Nachteil dass die Festplatte ständig rödelt.

Vorteil es in der DB zu lassen: die gesamte Accounts Tabelle liegt früher oder später im RAM, daher sind alle Anfragen direkt im RAM ausgeführt und somit natürlich ultraschnell.

Habt Ihr mal Vergleiche angestellt? Vorher-nachher?

Viel wichtiger ist jedoch, dass da eine ganz fiese böse Sicherheitslücke drin ist, nämlich das Setzen der Berechtigungen auf 777
Demzufolge kann jeder, auch wer nicht angemeldet ist, sich den Output von jemand anders ansehen, nämlich mit
http://server/cache/cacctid.txt.
Ich habs eben mal getestet...klappte leider wunderbar. (man muss nur die acctid erraten, was ja kein Akt ist)

Setzt die Berechtigungen auf 700!!! Damit kann sie nur der Webserver lesen. Gelöscht werden muss es dann natürlich per Skript, aber hey, immerhin besser als das...

_________________
Atrahor.de
http://www.atrahor.de/ci_images.php?id=1


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So 29 Jul, 2007 13:54 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
dragonslayer hat geschrieben:
Ich hab lange überlegt ob ich sowas einbauen sollte.
Es hat meiner Meinung nach den Vorteil dass die DB nicht so schnell fragmentiert, aber den großen Nachteil dass die Festplatte ständig rödelt.

Vorteil es in der DB zu lassen: die gesamte Accounts Tabelle liegt früher oder später im RAM, daher sind alle Anfragen direkt im RAM ausgeführt und somit natürlich ultraschnell.

Habt Ihr mal Vergleiche angestellt? Vorher-nachher?

Viel wichtiger ist jedoch, dass da eine ganz fiese böse Sicherheitslücke drin ist, nämlich das Setzen der Berechtigungen auf 777
Demzufolge kann jeder, auch wer nicht angemeldet ist, sich den Output von jemand anders ansehen, nämlich mit
http://server/cache/cacctid.txt.
Ich habs eben mal getestet...klappte leider wunderbar. (man muss nur die acctid erraten, was ja kein Akt ist)

Setzt die Berechtigungen auf 700!!! Damit kann sie nur der Webserver lesen. Gelöscht werden muss es dann natürlich per Skript, aber hey, immerhin besser als das...


htaccess ist besser:

$this->bbcode_second_pass_code('', '<Files *>

Deny from all

</Files>')

Funktioniert wunderbar.

Edit: Denn sobald FTP und PHP unter verschiedenen Benutzern laufen (Was ziemlich leicht passieren kann!), können nicht gegenseitig die Dateien löschen. Am einfachsten wäre es, Gruppe & Unbekannten nur Schreibrechte zu gewähren, damit man auf jeden Fall in die Datei schreiben kann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 29 Jul, 2007 14:54 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
apachemod suexec und dann einen entsprechenden user anlegen, wenn man diese Möglichkeit hat. Darüber sollte es am sichersten sein.

Alternativ könnte man sich auch per
[php]echo shell_exec("whoami");[/php]
den aktuellen User ausgeben lassen und den ordner mit den cachefiles auf ihn anpassen oder ihn zumindest der dateigruppe hinzufügen

(alles so nur unter UNIX/Linux)

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 29 Jul, 2007 15:33 
Offline
Großmeister
Großmeister

Registriert: Fr 21 Jul, 2006 00:00
Beiträge: 416
Und vor allem sollte man dazu sagen das, dass ganze nur unter Linux/UNIX funktioniert ansonsten müsste man per Hand jeder Datei die Rechte geben da chmod unter Windows keine wirkung hat.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 29 Jul, 2007 15:43 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 28 Aug, 2004 18:48
Beiträge: 1712
ich edit oben mal rein

_________________
~Inaktiv und Abwesend solange Mysql hier Moderatorenrechte hat~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 29 Jul, 2007 16:03 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mo 20 Sep, 2004 23:43
Beiträge: 164
Wohnort: Berlin
LoGD: http://www.atrahor.de/source.php
Wie schon erwähnt wurde, das ist alle *nix/Apache spezifisch.

Ne andere Idee:
Speichern der Inhalte in einer .php Datei. Die wird eh geparsed
1. Möglichkeit Am Anfang steht:
[php]<?
if(!isset($_SESSION['user'])) die ('cheater')
?>
Hierhinter kommt der normale output.
[/php]

Somit müssen keine Änderungen am lotgdcode gemacht werden.

zweite Möglichkeit in der php datei steht drin
[php]
$output = 'hier der ganze output kram'
[/php]
Dann müsste allerdings das System etwas umgebaut werden, aber wäre von außen unsichtbar...

_________________
Atrahor.de
http://www.atrahor.de/ci_images.php?id=1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 29 Jul, 2007 17:04 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Htaccess ist, ja, Apachespezifisch. Aber andere Webserver müssten sowas eigentlich auch haben, und ich wage zu behaupten, dass niemand anders was anderes hat ^^

Andere Idee: Ausserhalb des Webroots speichern. (~/www/cache, z.B., sofern man dort Zugriffsrechte hat)

Edit: Halt. Nicht Apache-Spezifisch sondern verfügbar für alle NCSA-Kompatible Webserver.


Zuletzt geändert von Eliwood am Di 31 Jul, 2007 16:06, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 29 Jul, 2007 21:55 
Offline
Meister
Meister
Benutzeravatar

Registriert: Mo 21 Feb, 2005 17:26
Beiträge: 323
Wohnort: Köln
Wie wäre es denn mit einem verschlüsselten file-namen?
Die Zeit&acctid nehmen und per md5 verschlüsseln. Den Hash auf die gewünschte länge kürzen und in der db speichern, den hash zu identifizierung der File verwenden.

+ Unbekannter filename (wer wird schon ein hash erraten können?)
+ Funktioniert für alle

- Ein Tabellenfeld benötigt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di 31 Jul, 2007 00:19 
Offline
Großmeister
Großmeister

Registriert: Fr 21 Jul, 2006 00:00
Beiträge: 416
Hmm zu Garlants Vorschlag noch eine kleine Sicherheit. Man sollte es wenn schon den Namen des Files aus microtime und der acctid zusammensetzen und das per md5 verschlüsseln.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di 31 Jul, 2007 11:19 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
Mal ne Frage an Eliwood: Warum verwendest du einserseitz file_get_contents aber dann nicht file_put_contents? Wozu der aufwand mit dem file-handler?

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di 31 Jul, 2007 13:30 
Offline
Freak
Freak
Benutzeravatar

Registriert: Mi 06 Jul, 2005 19:10
Beiträge: 543
Wohnort: Bremen
Geschlecht: Männlich
LoGD: http://my-logd.com/motwd
file_put_contents() gibts erst seit PHP5....
Und Silienta, lief zumindest damals, auf PHP4

_________________
Das schwarze Schaf der LotGD-Community, 2. platzierter, beim Giga.de Homepage-Award 2007 und 1. platzierter beim German Web Award 2008.
PC-ACTION meint: "Sehr gut" für MotWD!
Mind of the White Dragon => http://my-logd.com/motwd


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di 31 Jul, 2007 14:20 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 28 Aug, 2004 18:48
Beiträge: 1712
-DoM hat geschrieben:
file_put_contents() gibts erst seit PHP5....
Und Silienta, lief zumindest damals, auf PHP4


und läuft auch jetzt noch ein paar wochen auf php4^^

_________________
~Inaktiv und Abwesend solange Mysql hier Moderatorenrechte hat~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 05 Aug, 2007 22:20 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
Ich wusste doch, das ich irgendwas übersehen hate... ;-)

Das erklärt natürlich einiges

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi 03 Okt, 2007 19:52 
Offline
Meister
Meister
Benutzeravatar

Registriert: Mo 05 Feb, 2007 12:33
Beiträge: 375
Wohnort: Hattingen
Geschlecht: Männlich
LoGD: http://www.alvion-logd.de/logd/
Eliwood hat geschrieben:
Soweit ich das richtig in Erinnerung hab, braucht man noch folgenden Query, um Badnavs zu vermeiden:

$this->bbcode_second_pass_code('', 'UPDATE accounts SET allowednavs='',output='',restorepage=''')


bei mir kommt beim dem ersten mal einloggen zunächst mal eine Fehlermeldung:
Warning: file_get_contents(./cache/c1259.txt) [function.file-get-contents]: failed to open stream: No such file or directory in /home/a/alvion-logd.de/public_html/logd/login.php on line 46

Da die Datei deren Inhalt gelesen werden soll zunächst noch nicht vorhanden ist, dann läufts easy ... das passiert allerdings auch wenn sich jemand einen neuen Char erstellt. aber ansonsten läufts gut und ist eine geniale Idee^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 23 Dez, 2007 01:39 
Offline
Meister
Meister
Benutzeravatar

Registriert: Mo 05 Feb, 2007 12:33
Beiträge: 375
Wohnort: Hattingen
Geschlecht: Männlich
LoGD: http://www.alvion-logd.de/logd/
Spieler löschen ihren Account, werden per User-Editor gelöscht oder die setnewday.php schlägt bei jenen zu die zu lange nicht mehr online waren. Doch die Cache-Dateien bleiben bestehen. Ich hab mir dazu ein kleines Tool einfallen lassen um mit den unnützen Dateien aufzuräumen:

[snip] ... [/snip]

Ich hoffe das jemand es nützlich findet. Kritik oder Lob wäre sehr willkommen^^

Na, da meine Beiträge hier anscheinen eh niemanden interessieren werd ich es wohl besser wieder rausnehmen :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 29 Dez, 2007 18:03 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 28 Aug, 2004 18:48
Beiträge: 1712
rofl du postest am 23. und erwartest dicke resonanz? sry ich hab 3 Kinder rl + Weihnachten inkl Winterferien?

_________________
~Inaktiv und Abwesend solange Mysql hier Moderatorenrechte hat~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 30 Dez, 2007 02:02 
Offline
Meister
Meister
Benutzeravatar

Registriert: Mo 05 Feb, 2007 12:33
Beiträge: 375
Wohnort: Hattingen
Geschlecht: Männlich
LoGD: http://www.alvion-logd.de/logd/
Rikkarda hat geschrieben:
rofl du postest am 23. und erwartest dicke resonanz? sry ich hab 3 Kinder rl + Weihnachten inkl Winterferien?


Ist ja nicht so das ich Resonaz ausgerechnet von dir erwartet hätte, und ist auch nicht so das hier an den Feiertagen nichts los gewesen wäre ... und es passiert mir auch nicht zu ersten mal das meine Beiträge ohne jegliche Resonanz bleiben bzw. meine Fragen unbeantwortet und ohne jeglichen Kommentar bleiben (siehe zB: Doppelpost, sorry dafür ;))

Und langsam fragt man sich denn schon woran es liegt ... ob man schlecht riecht oder ob es am Schmutz unter den Fingernägeln liegt ...


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 50 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
cron
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum