Seite 2 von 4

Verfasst: 08.10.2008 14:28
von Dave
DanielHeinrich hat geschrieben:
Dave hat geschrieben: Was du noch ändern könntest wären deine sql querys nach der Coding Guide: http://wiki.phpbb.com/Database_Abstract ... #sql_query
Mhh... Ich denke ich kann das gerne nochmal überarbeiten - wobei mich dieser Guide doch ein bischen verwirrt hat da selbst die Autoren des Forums sich nicht immer daran halten.
Leider. Aber nur weil alle von ner Brücke springen heißt es ja nicht das wir auch mit machen müßen. Das Problem das es irgendwie überall in phpBB anders gemacht wird is schon da. Aber du hast sowas wie '\'.((int)&int))'\'' gemacht. und sowas geht ja schöner ;).
DanielHeinrich hat geschrieben:
Dave hat geschrieben: Was du wichtiges noch vergessen hast is das:

Code: Alles auswählen

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
	exit;
}
Mhkey, werde ich einfügen - auch wenn der sicherheitstechnische Aspekt dieses Codes (und damit vermutlich auch der Grund für seine Existenz) in den von mir mitgegebenen Dateien noch nicht ganz klar ist.
Wofür das is? Damit du die Datei nur aufrufen kannst im phpBB... das heißt über die dateien im root verzeichnis. Sollte man die direkt aufrufen kommt ne nette Fehlermeldung. Hat halt sicherheitsrelevante aspekte.

Verfasst: 08.10.2008 16:03
von DanielHeinrich
Hi!
Dave hat geschrieben:[Wofür das is? Damit du die Datei nur aufrufen kannst im phpBB... das heißt über die dateien im root verzeichnis. Sollte man die direkt aufrufen kommt ne nette Fehlermeldung. Hat halt sicherheitsrelevante aspekte.
Das mag jetzt eventuell komisch klingen, aber - seien wir doch mal ehrlich:
Wenn irgendjemand die von mir mitgegebenen Dateien _direkt_ aufruft, was bekommt er? Genau. Eine weisse Seite. Warum dieses? ganz einfach: die Sprach-Dateien enthalten lediglich Code zum erstellen bzw. erweitern des $lang-Arrays.
Und die Dateien mit den Modul-Klassen? Nunja, effektiv wird doch erst die gesamte Datei geparst und dann das ganze ausgeführt. Ergo: Diese Zeilen sorgen lediglich dafür dass die Dateien größer werden und damit (unwesentlich) mehr Zeit für das parsen selbiger benötigt wird da keinerlei Aktionen beim direkten Aufruf dieser Dateien erfolgt.
Daher die Frage:
Inwiefern erhöht dieser Code die Sicherheit meiner Skripte?
(Tut mir leid wenn ich an dieser Stelle ein bissel schwer von Begriff bin aber irgendwie verstehe ich das noch nicht so ganz)

bis bald

Daniel Heinrich

edit:
was mir gerade auffält:
Es erscheint eine Fehlermeldung beim Aufruf von exit???

Verfasst: 08.10.2008 17:22
von Dave
Fehlermeldung bei exit;? eigentlich nciht...

Und das hat schon nen sinn... Viele exploids in der vergangenheit waren nur der fehler dass das mit dem exit; fehlte. So konnte man dann andere scripte ausführen. Und ich glaube kaum das du irgendwas an Zeitunterschied merkst. Geschweige denn das deine Festplatte von den Zeilen voll wird :D

Verfasst: 08.10.2008 17:33
von MartectX
DanielHeinrich hat geschrieben:Es erscheint eine Fehlermeldung beim Aufruf von exit???
Nein, aber Du könntest auch sowas nettes machen wie

Code: Alles auswählen

if (!defined('IN_PHPBB'))
{
   die('Die, haxx0r, die!!');
}

Verfasst: 08.10.2008 17:37
von DanielHeinrich
das mit der Zeit war eher scherzhaft gemeint.

Dennoch sehe ich keinen Weg wie du die von mir geschriebenen Dateien nutzen könntest um ein anderes Script unrechtmäßig auszuführen.

Klar man könnte nun argumentieren dass durch diesen "Schutz" der Code nur durch phpBB genutzt werden kann. Nunja - Wenn der Nutzer dieser Mod meint die enthaltenen Dateien in eigenen Skripten nutzen zu können/müssen wird ihn dieser Code kaum davon abhalten. Und jeder "Angreifer" der die der Mod beiligenden Dateien direkt aufruft wird genauso ohne diesen vor einer weißen Seite stehen wie mit.
Effektiv sehe ich da also zwei Möglichkeiten für den Angreifer:
1) Er findet eine Schwachstelle im Code der die Funktionen dieser Dateien nutzt und nutzt diese aus. Dann hilft dieser von dir geschriebene Code allerdings wenig.
2) Damit die dem Mod beiliegenden Dateien _irgendetwas_ tun/ausführen(vom Geladenwerden durch den Classloader von php einmal abgesehen) müsste der User die Dateien so abgeändert haben dass schon beim Laden Code ausgeführt wird - DAS ist auch der einzige Grund den ich im Moment sehe warum man den von dir geschriebenen Code brauchen können sollte.

Solltest du also auf Punkt 2 ansteuern verstehe ich mittlerweile deinen Gedankengang. Wenn nicht: Bitte erkläre ihn mir da ich mich vor allem in Punkto Sicherheit immer verbessern will.

danke schon mal und bis bald

Daniel Heinrich

edit:
MartectX hat geschrieben:
DanielHeinrich hat geschrieben:Es erscheint eine Fehlermeldung beim Aufruf von exit???
Nein, aber Du könntest auch sowas nettes machen wie

Code: Alles auswählen

if (!defined('IN_PHPBB'))
{
   die('Die, haxx0r, die!!');
}
ich weiss - klar ;-)
ich wollte lediglich auf den Lapsus im Code von Dave hinweisen bei dem er meint dass da " ne nette Fehlermeldung" kommt.

Verfasst: 08.10.2008 19:30
von Dave
Is jetzt nicht aus nem phpBB3 aber als kleines Beispiel:

Code: Alles auswählen

language/lang_english/lang_xyz.php?phpbb_root_path=
Und nach dem = machst du nen kleines feines script was aufgerufen wird und schon biste aufm server ;). Gibt es auch mit

Code: Alles auswählen

include/function_xyz.php?phpbb_root_path=
Auch wenn du nun sagst das es bei dir nicht geht. Stell dir vor einer bearbeitet deinen Mod baut eine solche lücke ein und genau du hast sie schon vorher mit den paar Zeilen code verhindert :D

Verfasst: 08.10.2008 20:20
von DanielHeinrich
Ok - ich denke wir meinen ungefähr beide dasselbe, von daher denke ich einfach mal dass ich das jetzt verstanden habe.

bis dann und danke

Daniel Heinrich

Verfasst: 08.10.2008 20:55
von Dave
Wenigstens etwas :D

Was mir noch einfällt: Damit du nen bißchen an performance bekommst:

Code: Alles auswählen

    $sql = 'SELECT forum_id 
		FROM ' . FORUM_SELECTION_TABLE . '
		WHERE user_id = ' . (int) $user->data['user_id'];
    $subqery_result=$db->sql_query($sql, 300);
(z.B. für 5min) Damit hast du das ergebnis vom query im cache. Hat halt den vorteil das du nicht immer das query ausführen mußt bei jedem aufrufen der seite.
Der nachteil is bisher (habe leider nix anderes gefunden) das auch nach dem updaten der cache weiter besteht. function destroy($var_name, $table = '') in der acm klasse bringt da wohl wenig im nur ein query zu killen. Da müßest du dann immer den ganzen cache für alle User killen. Wobei es vieleicht was bringt da man sowas ja nicht alle 2min ändert.

Naja... War ja nur ne idee :D


MfG
Dave

Verfasst: 11.10.2008 14:21
von DanielHeinrich
Update - neue Version: 2.0.5 STABLE
So, habe nun den Code noch einmal überarbeitet, ausserdem noch eine fehlende Template-Anweisung hinzugefügt.

Des weiteren hat sich die Addresse der Zip-Datei geändert (das habe ich schon im ersten Post korrigiert) und ich habe einen prepatched-Ordner hinzugefügt der die schon vorgepatchten Dateien für die aktuelle Version enthält(weniger Arbeit für diejenigen die ein neues Forum aufsetzen^^)

Ich denke mein Mod sollte nun endlich soweit sein dass er endlich vom BETA- ind den STABLE-Status wechselt.

bis bald

Daniel Heinrich

Achja - wegen dem Query-Cache: Ich nutze den zwar an einigen Stellen, hatte mich aber an anderen bewusst dagegen entschieden ;-)

Verfasst: 15.10.2008 11:58
von Drakeman
Hallo Daniel,

zuerst einmal ist das eine klasse Arbeit. Ich hab vor jedem Respekt, der so etwas kann.

Der MOD an sich läuft eigentlich, die auftauchenden Probleme haben bei mir wohl eher etwas mit den Einstellungen zu tun. Folgendes Problem habe ich und hoffe, daß du mir da weiterhelfen kannst:

Wenn jetzt ein registrierter ins Forum kommt sieht er keine Foren. Ich denke mal, daß dies an der Default-Einstellung der Foren liegt mit der ich so meine Probleme habe, denn ich weiß ehrlich gesagt nicht, wie ich das einstellen soll. Ich hoffe mal, daß du mir da weiterhelfen kannst.

Gruß
Drakeman