anpera.net
http://anpera.homeip.net/phpbb3/

Einbauanleitung zum txtfile Cachesystem by Eli für Silienta
http://anpera.homeip.net/phpbb3/viewtopic.php?f=43&t=3848
Seite 1 von 3

Autor:  Rikkarda [ Sa 28 Jul, 2007 20:59 ]
Betreff des Beitrags:  Einbauanleitung zum txtfile Cachesystem by Eli für Silienta

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]
180-mal heruntergeladen
Dateikommentar: Anleitung für das txtfile Auslagerungssystem der outputs zum entlasten der Datenbank
cache.rar [1.74 KIB]
132-mal heruntergeladen

Autor:  Eliwood [ Sa 28 Jul, 2007 21:09 ]
Betreff des Beitrags: 

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=''')

Autor:  Varius [ So 29 Jul, 2007 01:44 ]
Betreff des Beitrags: 

mal versuchen ich danke Euch beiden

:wink:

Autor:  dragonslayer [ So 29 Jul, 2007 13:51 ]
Betreff des Beitrags:  Ganz fiese böse Sicherheitslücke

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...

Autor:  Eliwood [ So 29 Jul, 2007 13:54 ]
Betreff des Beitrags:  Re: Ganz fiese böse Sicherheitslücke

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.

Autor:  Auric [ So 29 Jul, 2007 14:54 ]
Betreff des Beitrags: 

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)

Autor:  Kamui [ So 29 Jul, 2007 15:33 ]
Betreff des Beitrags: 

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.

Autor:  Rikkarda [ So 29 Jul, 2007 15:43 ]
Betreff des Beitrags: 

ich edit oben mal rein

Autor:  dragonslayer [ So 29 Jul, 2007 16:03 ]
Betreff des Beitrags: 

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...

Autor:  Eliwood [ So 29 Jul, 2007 17:04 ]
Betreff des Beitrags: 

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.

Autor:  Garlant [ So 29 Jul, 2007 21:55 ]
Betreff des Beitrags: 

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

Autor:  Kamui [ Di 31 Jul, 2007 00:19 ]
Betreff des Beitrags: 

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.

Autor:  Auric [ Di 31 Jul, 2007 11:19 ]
Betreff des Beitrags: 

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?

Autor:  -DoM [ Di 31 Jul, 2007 13:30 ]
Betreff des Beitrags: 

file_put_contents() gibts erst seit PHP5....
Und Silienta, lief zumindest damals, auf PHP4

Autor:  Rikkarda [ Di 31 Jul, 2007 14:20 ]
Betreff des Beitrags: 

-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^^

Autor:  Auric [ So 05 Aug, 2007 22:20 ]
Betreff des Beitrags: 

Ich wusste doch, das ich irgendwas übersehen hate... ;-)

Das erklärt natürlich einiges

Autor:  Linus [ Mi 03 Okt, 2007 19:52 ]
Betreff des Beitrags: 

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^^

Autor:  Linus [ So 23 Dez, 2007 01:39 ]
Betreff des Beitrags: 

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 :(

Autor:  Rikkarda [ Sa 29 Dez, 2007 18:03 ]
Betreff des Beitrags: 

rofl du postest am 23. und erwartest dicke resonanz? sry ich hab 3 Kinder rl + Weihnachten inkl Winterferien?

Autor:  Linus [ So 30 Dez, 2007 02:02 ]
Betreff des Beitrags: 

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 ...

Seite 1 von 3 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/