Was sagt Ihr zu meinem Forum? Sicherheit?
Andreas
- php
Hallo!
habe mal zum Spaß ein eigenes kleines mysql/PHP Forum geschrieben.
Wollte nur mal hören was Ihr dazu sagt, auch(und vor allem) Sicherheitstechnisch. Für Ausgabe verwende ich meist nur htmlentities(), oder den PHP-Highlighter ;-)
Das ganze funktioniert so, das man beim ersten mal seine Daten beim Posting eingeben muß, diese werden in der DB und in der Session gespeichert. Solange man auf der Seite bleibt, bleiben die Daten gespeichert. Man wird per mail benachrichtigt, wenn eine Antwort eingegangen ist. und in dieser mail ist ein Link mit der UserID, so dass auch ohne Cookies sie Daten wieder da sind.
Cookies sind abgeschaltet.
Code-Highlighting:
alles was zwischen <??>, [c][/c], ``, <highlight></highlight> steht wird vom PHP Highlighter bearbeitet. Die <??> habe ich aus der Ausgabe entfernt.
Das wars eigentlich schon, ich unterscheide nur, ob man einfach ein posting zu einem Thema schreibt, oder ob man auf eins Antwortet. Alle Postings werden sowohl in Baum-Ansicht(Danke Henryk Plötz für http://selfaktuell.teamone.de/artikel/phpasp/php-forum/index.htm) als auch in Board-Ansicht.
Ach ja, Links(http://) werden noch anklickbar.
Jetzt wollte ich nur mal von Euch wissen, was Ihr davon haltet, oder was Ihr anders machen würdet, oder wie es sicherheitstechnisch aussieht(habe das erste mal Register Globals Off verwendet, das war nicht leicht!)
Ach ja, der Link: [http://forum.knet-systems.de]
Man beachte auch:
http://validator.w3.org/check?uri=http://forum.knet-systems.de/index.php
Und das trotz Sessions trans-sid ;-)
Viele Grüße
Andreas
Hi,
schaut ansich wirklich gut aus.
Nur hast du bei eMail die <script> abfrage nicht drin, was JavaScripts erlauben würde. Und ich hab das grad mal auf wilde "<" "" ">" "<script>" und sonstige Konstruktionen getestet und da ist das Forum gerade in die Knie gegangen. Man kann jetzt z.B. keinen neuen Beitrag mehr posten.
Du solltest noch etwas Zeit in die Überprüfung von Inhalten und Sonderzeichen investieren.
Gruß
ueps
Hallo!
Nur hast du bei eMail die <script> abfrage nicht drin, was JavaScripts erlauben würde. Und ich hab das grad mal auf wilde "<" "" ">" "<script>" und sonstige Konstruktionen getestet und da ist das Forum gerade in die Knie gegangen. Man kann jetzt z.B. keinen neuen Beitrag mehr posten.
Was meinst Du mit <script> - Abfrage? ich dachte mit htmlentities() bei der Ausgabe wäre das OK?!
Ich verstehe das einfach nicht. Warum geht das in die Knie? Man kann ja neu posten, nur bekommt immer einen 500er. Ich weiß nicht ob Du das warst, oder ich. Wie soll Javascript einen 500er Serverfehler verursachen? Und wieso immer wieder?
Das Problem hatt eich schon öfter. Immer beim Abschicken eines Postings. Am Ende ist de Beitrag immer in die DB geschrieben wirden, auch korrekt(!!!!!)
In den Error-Logs des Apache würde bei PHP wohl nichts stehen hat man mir gesagt?!
Viele Grüße
Andreas
Hi
Was meinst Du mit <script> - Abfrage? ich dachte mit htmlentities() bei der Ausgabe wäre das OK?!
Hm, ich weiß nicht was htmlentities genau macht, aber wenn ich bei eMail folgende Angabe mache kann ich javascript ausführen:
"> <script>code</script>
Ich würde alle " -> in " umwandel lassen und alle
< > in < bzw. >
Dann hast du das Problem nimmer.
Ich verstehe das einfach nicht. Warum geht das in die Knie? Man kann ja neu posten, nur bekommt immer einen 500er. Ich weiß nicht ob Du das warst, oder ich. Wie soll Javascript einen 500er Serverfehler verursachen? Und wieso immer wieder?
Bei meinem Verusch konnte ich nacher nicht mehr neu Posten, musste vorher alles nochmal neu laden, dann gings wieder.
Aber es wurde auch ein alter Beitrag von mir einfach überschrieben.
Ich denke wenn du das oben genannte beachtest dürfte das nicht mehr passieren.
Gruß
ueps
Hi
moin
Was meinst Du mit <script> - Abfrage? ich dachte mit htmlentities() bei der Ausgabe wäre das OK?!
nein, definitiv nicht
Hm, ich weiß nicht was htmlentities genau macht, aber wenn ich bei eMail folgende Angabe mache kann ich javascript ausführen:
"> <script>code</script>
Ich würde alle " -> in " umwandel lassen und alle
< > in < bzw. >
es geht auch einfacher: strip_tags($string); und gut is.
Dann hast du das Problem nimmer.
ja, dann net ;)
Gruß
ueps
Fabian
Hi!
Was meinst Du mit <script> - Abfrage? ich dachte mit htmlentities() bei der Ausgabe wäre das OK?!
nein, definitiv nicht
sicher? beim Namen hat es doch auch nicht funktioniert, oder? Jetzt müßte es nicht merh funktionieren, leider habe ich Eure Javascript gelöscht, könntest Du nochmal kurz...
es geht auch einfacher: strip_tags($string); und gut is.
ich denke das htmlentities das sehr wohl macht, da werden die Tags nur nicht entfernt, sondern entschärft, indem sie kodiert werden!
Grüße und auch Dir vielen Dank!
Andreas
Hi!
moin
Was meinst Du mit <script> - Abfrage? ich dachte mit htmlentities() bei der Ausgabe wäre das OK?!
ja, natürlich ist das okay: aber die ausgabe des codes sieht dann doch recht seltsam aus.
nein, definitiv nicht
sicher? beim Namen hat es doch auch nicht funktioniert, oder? Jetzt müßte es nicht merh funktionieren, leider habe ich Eure Javascript gelöscht, könntest Du nochmal kurz...
es geht auch einfacher: strip_tags($string); und gut is.
ich denke das htmlentities das sehr wohl macht, da werden die Tags nur nicht entfernt, sondern entschärft, indem sie kodiert werden!
eben. sie werden dann im posting _angezeigt_, und das ist nicht im sinne deines forums, schätze ich. wenn jemand daherkommt und sich sagt: "och, da pack ich ein bild rein", aber die html-entities benutzt werden, so wirst du dann mitten in seinem posting ein schönes <img> finden, und das ist sicherlich nicht die ideale situation, oder?
mit strip_tags(); wird da dann gar nix mehr stehen, das sieht dann wenigstens nach forum aus, nicht nach quelltext ;)
Grüße und auch Dir vielen Dank!
Andreas
Fabian
Hi!
Da hast Du zwar Recht, aber wenn jemand sowas macht hat er böse Absichten, dann kann man das wenigstens direkt sehen, und im titel kann doch sowas mal vorkommen, das man sowas schrfeiben will, oder?
Hast Du getestet ob es mit htmlentities() denn jetzt sicher ist?
Sollte es doch, oder?
Grüße
Andreas
Hallo nochmal!
Hat jemand ne Idee, wie ich testen kann, ob jemand sowas böses versucht, also bösen Code in email oder name zu schreiben - um dem dann eine Fehlermeldung auszugeben, so dass sowas erst gar nicht aufgenommen wird? Das wäre die schönste Lösung, nur wie kann ich das sicherstellen?
Grüße
Andreas
Hallo nochmal!
mahlzeit *mussgleichzumessen,deswegenwirddiespostingkürzeralssosnt*
Hat jemand ne Idee, wie ich testen kann, ob jemand sowas böses versucht, also bösen Code in email oder name zu schreiben - um dem dann eine Fehlermeldung auszugeben, so dass sowas erst gar nicht aufgenommen wird? Das wäre die schönste Lösung, nur wie kann ich das sicherstellen?
grundsätzlich nicht.
du kannst html/javascript-code nicht auf qaulität/inhalt überprüfen, sofern du nicht ein megabytegroßes posix-monster haben willst.
somit bist du auf der sicheren seite, wenn du alles rausfilterst, wie auch immer.
tipp: strip_tags(); gibt nen fehler, wenn der code der "gestript" wird nicht valide ist. dahin könnte man also was machen, aber ich bin sicher, befriedigend wäre das nicht.
aber, zusammenfassend gesagt ist es mir wichtiger, dass der code nicht druchkommt, als das ich weiß, dass da welcher war ;=)
Grüße
Andreas
Fabian
Hallo!
grundsätzlich nicht.
schade ;-)
du kannst html/javascript-code nicht auf qaulität/inhalt überprüfen, sofern du nicht ein megabytegroßes posix-monster haben willst.
Das will ich gar nicht.
somit bist du auf der sicheren seite, wenn du alles rausfilterst, wie auch immer.
Das würde ich dann zusätzlich machen, klar. Aber da es sich ja nur um die Felder name und email handelt, sollte man doch einfach ein paar Zeichen prüfen können, die notwendig seind, aber garantiert in keinem (normalen;-)Namen und keiner email-Adresse vorkommen!
Nicht falsch verstehen, ich gebe das auf alle fälle geschützt aus, aber ich würde gerne ganz auffällige "Angriffe" direkt abblocken, um nicht so komische Sachen im Forum stehen zu haben.
Ich weiß jetzt nicht, was ales in einer emailadresse vorkommen daf, aber doch sicher kein <>:"'\ oder?
Und sowas sollte cuh in keinem Namen vorkommen, also könnte ich alle Anfragen, in denen deise zeichen in Namen und email stehen direkt abblocken. Klar ist das nicht sicher, ich wüßte ´zar nicht, wie man ohne diese Zeichen noch was andrichten will, woll aber nichst riskieren, udn gebe dqas dann pber htmlentities aus, strip-tags macht mir ein wenig Angst, da es am Struing "herumdoktert", und so evtl Schen entfernt oder verfälscht, die so nicht sein sollten.
tipp: strip_tags(); gibt nen fehler, wenn der code der "gestript" wird nicht valide ist. dahin könnte man also was machen, aber ich bin sicher, befriedigend wäre das nicht.
Ja, wie gesat, hinterher kommt der Fehler, obwolh eigentlich nichst nötig ist, und schwupp kann man nicht posten!
aber, zusammenfassend gesagt ist es mir wichtiger, dass der code nicht druchkommt, als das ich weiß, dass da welcher war ;=)
Ja, das stimmt, aber mit meiner Überlegung käme ich gleichzeitig mit htmlentities asu, und hätte kein "häßlichen" Postings!
Grüße
Andreas
Moin!
Klar ist das nicht sicher, ich wüßte ´zar nicht, wie man ohne diese Zeichen noch was andrichten will, woll aber nichst riskieren, udn gebe dqas dann pber htmlentities aus, strip-tags macht mir ein wenig Angst, da es am Struing "herumdoktert", und so evtl Schen entfernt oder verfälscht, die so nicht sein sollten.
Diese Angst ist berechtigt...
"Hallo, ich suche ein Spiel, bei dem die Spielerzahl < 4 und der Preis möglichst nicht > 30 EUR ist."
Nur mal so als Beispiel. Strip_tags() könnte daraus machen (ich habs nicht selbst getestet):
"Hallo, ich suche ein Spiel, bei dem die Spielerzahl 30 EUR ist."
Haha, was ham wir alle gelacht jetzt, oder? :) Ist jedenfalls nicht die richtige Vorgehensweise, htmlentities() sind da viel besser geeignet.
- Sven Rautenberg
Moin!
mahlzeit
Klar ist das nicht sicher, ich wüßte ´zar nicht, wie man ohne diese Zeichen noch was andrichten will, woll aber nichst riskieren, udn gebe dqas dann pber htmlentities aus, strip-tags macht mir ein wenig Angst, da es am Struing "herumdoktert", und so evtl Schen entfernt oder verfälscht, die so nicht sein sollten.
Diese Angst ist berechtigt...
IMHO nicht.
"Hallo, ich suche ein Spiel, bei dem die Spielerzahl < 4 und der Preis möglichst nicht > 30 EUR ist."
Nur mal so als Beispiel. Strip_tags() könnte daraus machen (ich habs nicht selbst getestet):
eben: entweder es gibt ne fehlermeldung (insofern kann nichts von wegen "...Spielerzahl 30 EUR ist." rauskommen.), oder es passiert nix, das geht als gültig durch.
das ist IMHO das positive daran: entweder es geht oder eben _nicht_
"Hallo, ich suche ein Spiel, bei dem die Spielerzahl 30 EUR ist."
Haha, was ham wir alle gelacht jetzt, oder? :) Ist jedenfalls nicht die richtige Vorgehensweise, htmlentities() sind da viel besser geeignet.
- Sven Rautenberg
Fabian
Hallo!
Diese Angst ist berechtigt...
IMHO nicht.
Sven hat mal wieder 100% Recht(und mein Gefühl hat mich nicht getäuscht;-)
Beweis: http://forum.knet-systems.de/thread.php?id=191
und wenn Du mir nicht glaubst:
http://forum.knet-systems.de, auf der Startseite gehts nur durch htmlentities()!
Grüße
Andreas
Hallo!
hi
Diese Angst ist berechtigt...
IMHO nicht.
Sven hat mal wieder 100% Recht(und mein Gefühl hat mich nicht getäuscht;-)
okay, wenn das so ist, dann muss ich _mein_ forum eben umschreiben...
und wenn Du mir nicht glaubst:
http://forum.knet-systems.de, auf der Startseite gehts nur durch htmlentities()!
ja, ich sehs
Grüße
Andreas
Fabian
Moin!
Diese Angst ist berechtigt...
IMHO nicht.
Schon, daß man die Angst durch einen simplen Test bestätigen oder widerlegen kann, nicht? :)
"Hallo, ich suche ein Spiel, bei dem die Spielerzahl < 4 und der Preis möglichst nicht > 30 EUR ist."
Nur mal so als Beispiel. Strip_tags() könnte daraus machen (ich habs nicht selbst getestet):
eben: entweder es gibt ne fehlermeldung (insofern kann nichts von wegen "...Spielerzahl 30 EUR ist." rauskommen.), oder es passiert nix, das geht als gültig durch.
Das Problem ist: Die Funktion arbeitet entsprechend meiner Vermutung! Es wird der Text zwischen "<" und ">" gelöscht.
Schlimmer noch: Wenn man das zweite Zeichen ">" umdreht und zu einem "<" macht, wird gleich alles gelöscht, was hinter dem ersten "<" steht - OHNE Fehlermeldung!
das ist IMHO das positive daran: entweder es geht oder eben _nicht_
Im Beispiel gehts - und das ist schlecht!
- Sven Rautenberg
Moin!
moin
Diese Angst ist berechtigt...
IMHO nicht.
Schon, daß man die Angst durch einen simplen Test bestätigen oder widerlegen kann, nicht? :)
ja :(
"Hallo, ich suche ein Spiel, bei dem die Spielerzahl < 4 und der Preis möglichst nicht > 30 EUR ist."
Nur mal so als Beispiel. Strip_tags() könnte daraus machen (ich habs nicht selbst getestet):
eben: entweder es gibt ne fehlermeldung (insofern kann nichts von wegen "...Spielerzahl 30 EUR ist." rauskommen.), oder es passiert nix, das geht als gültig durch.
Das Problem ist: Die Funktion arbeitet entsprechend meiner Vermutung! Es wird der Text zwischen "<" und ">" gelöscht.
Schlimmer noch: Wenn man das zweite Zeichen ">" umdreht und zu einem "<" macht, wird gleich alles gelöscht, was hinter dem ersten "<" steht - OHNE Fehlermeldung!
das ist IMHO das positive daran: entweder es geht oder eben _nicht_
Im Beispiel gehts - und das ist schlecht!
ja.
du hast mir damit gut arbeit verschafft, da ich mein forum (release war für morgen geplant) komplett überarbeiten darf, was natürlich nicht unbedigt schlimm ist, da es rein privater natur ist und ich deshalb (hierbei) keine termine einhalten muss.
deshalb danke für den hinweis, ich hätte es sonst so gelassen, schätze ich :)
insofern: danke, ich habe das echt nicht gewusst!
aber ne ganz andere frage: ist es der aufwand wert, für einen ersatz von strip_tags() und auch htmlentities() eine ganz große funktion zu schreiben, die über reguläre ausdrücke alles, was in die richtung geht rausfiltert, und zwar so, dass wir alle damit leben können,dass heißt das HTML, JS & Co. gefiltert werden, dass von dir gebrachte beispiel aber nicht ?
- Sven Rautenberg
Fabian
Hi!
du hast mir damit gut arbeit verschafft, da ich mein forum (release war für morgen geplant) komplett überarbeiten darf, was natürlich nicht unbedigt schlimm ist, da es rein privater natur ist und ich deshalb (hierbei) keine termine einhalten muss.
Da bin ich aber mal gespannt ;-)
aber ne ganz andere frage: ist es der aufwand wert, für einen ersatz von strip_tags() und auch htmlentities() eine ganz große funktion zu schreiben, die über reguläre ausdrücke alles, was in die richtung geht rausfiltert, und zwar so, dass wir alle damit leben können,dass heißt das HTML, JS & Co. gefiltert werden, dass von dir gebrachte beispiel aber nicht ?
ich denke, alle Leute die sowas vielleicht hinbekämen werden Dir raten es zu lassen und die in PHP implementierten Funktionen zu verwenden ;-)
Das ist doch viel zu komplex!
Grüße
Andreas
Hi!
hi
du hast mir damit gut arbeit verschafft, da ich mein forum (release war für morgen geplant) komplett überarbeiten darf, was natürlich nicht unbedigt schlimm ist, da es rein privater natur ist und ich deshalb (hierbei) keine termine einhalten muss.
Da bin ich aber mal gespannt ;-)
und ich bin vor allem darauf gespannt, was _ihr_ davon haltet... *schon jetzt beine schlacker*
aber ne ganz andere frage: ist es der aufwand wert, für einen ersatz von strip_tags() und auch htmlentities() eine ganz große funktion zu schreiben, die über reguläre ausdrücke alles, was in die richtung geht rausfiltert, und zwar so, dass wir alle damit leben können,dass heißt das HTML, JS & Co. gefiltert werden, dass von dir gebrachte beispiel aber nicht ?
ich denke, alle Leute die sowas vielleicht hinbekämen werden Dir raten es zu lassen und die in PHP implementierten Funktionen zu verwenden ;-)
ja, da magst du recht haben. war auch nur ne frage ;=)
Das ist doch viel zu komplex!
das sowieso, aber das ist grundsätzlich kein grund, es zu lassen, oder?
ich meine, wenn eine praktikable bibliothek dabei rauskommt hat sich das doch gelohnt oder?
Grüße
Andreas
Fabian
Hi!
Das ist doch viel zu komplex!
das sowieso, aber das ist grundsätzlich kein grund, es zu lassen, oder?
doch!
ich meine, wenn eine praktikable bibliothek dabei rauskommt hat sich das doch gelohnt oder?
aber es wird ikmer eine potentielle Sicherheitslücke bleiben!
Grüße
Andreas
Hi!
hi
Das ist doch viel zu komplex!
das sowieso, aber das ist grundsätzlich kein grund, es zu lassen, oder?
doch!
hier sind wir an einem punkt, wo man sich entscheiden muss: fortschritt oder stagnation.
mit einer einstellung wie: "das ist zu kompliziert" gäbe es heute keine computer, kein internet etc.
ich meine nur, einen versuch ist es doch wert. wenn es nicht geht kann man es immer noch lassen. wenn aber was brauchbares dabie rauskommt, was _deinen und meinen_ ansprüchen genügt, so ist das fortschritt.
ich meine, wenn eine praktikable bibliothek dabei rauskommt hat sich das doch gelohnt oder?
aber es wird ikmer eine potentielle Sicherheitslücke bleiben!
natürlich. es gibt auch die möglichkeit, dass du auf die straße gehst und du wirst von nem laster umgemäht.
Grüße
Andreas
Fabian
PS: ich will dich hier nicht beleidigen oder persönlich angreifen. ich möchte einen kernpunkt der menschlichen evolution klarmachen:
"geht nicht gibt's nicht"
Moin!
Das ist doch viel zu komplex!
das sowieso, aber das ist grundsätzlich kein grund, es zu lassen, oder?
ich meine, wenn eine praktikable bibliothek dabei rauskommt hat sich das doch gelohnt oder?
Ich würde davon abraten, zu versuchen, HTML herauszufiltern.
Aber nur du kannst die Frage beantworten. Denn: Was gibt dein Forumsbesucher ein? HTML-Text? Wohl eher kaum, sondern eher Plain Text.
Wenn der eingegebene Text aber "Plain Text" ist, dann enthält er per Definition keine HTML-Tags, sondern ggf. größer/kleiner-Zeichen und Buchstaben dazwischen. Wie willst du jemals wissen, daß ein b zwischen "<" und ">" das HTML-Tag für "boldface" ist? Könnte das nicht auch ein Schreibfehler sein und "<bg>" meinen, eine typische Schreibweise für "big grin", die sehr gerne in ... hm, wie heißen die Dinger eigentlich? Nennen wir sie Komparatorenwinkel ;) ... also, die sehr gerne in Komparatorenwinkel gesetzt werden.
Dein Problem ist also: Du mußt die Bedeutung des Textes erkennen. Nun haben aber Computer so ihre Probleme damit, Bedeutungen erkennen zu können. Sie haben ja keinen Verstand.
Und dann ist da noch ein Gegenargument, welches auch hier im Forum zieht: Was ist, wenn ein hilfloser (und wenn dein Forum nicht paßt, auch hilflos verirrter) Teilnehmer eine Frage zu HTML stellen möchte? Wäre dumm, wenn dann entweder seine Tags alle ausgeführt würden, oder gelöscht.
Du siehst: Die Antwort auf deine Frage hängt ganz davon ab, welche Bedeutung du der Benutzereingabe gibst, ob du den Text eher als normalen Text ansiehst (dann kannst du keine HTML-Tags herausfiltern, weil "<" ein im Text vorkommendes Zeichen ist), oder ob du den Text als HTML-Text ansiehst (dann mußt du den Besuchern klarmachen, daß sie die Zeichen "<", ">" und "&" als HTML-Entities eingegeben müssen: "<", ">" und "&" - nicht wirklich komfortabel, oder?).
- Sven Rautenberg
Hallo!
Hm, ich weiß nicht was htmlentities genau macht, aber wenn ich bei eMail folgende Angabe mache kann ich javascript ausführen:
"> <script>code</script>
Probier nochmal, jetzt haste keine Chance mehr! Hatte nämlich aus irgendeinem Grund ausgerechnet bei email Vergessen htmlentities zu verwenden ;-)
Ich würde alle " -> in " umwandel lassen und alle
< > in < bzw. >
Ja, gerade macht doch htmlentities(),oder?
Dann hast du das Problem nimmer.
Bei meinem Verusch konnte ich nacher nicht mehr neu Posten, musste vorher alles nochmal neu laden, dann gings wieder.
War das der 500er? De2r ist jetzt weg, lag an falschen Mailadressen, wodurch mail() einen 500er verurscht hat!
Aber es wurde auch ein alter Beitrag von mir einfach überschrieben.
Woe überschieben? Ich habe von Hand die Javascripte rausgenommen, um zu testen ob das was damit zu tun hatte - hatte es aber nicht. Waren die mailadressen! Probier es bitte nochmal ;-)(ich kenne mich mit Javascript nichtt genug aus, um schaden anrichten zu können ;-))
Viele Grüße und vielen Dank für Deine Hilfe!
Grüße
Andreas
PS: So, wer kennt noch Sicherheitslücken?
Moin
PS: So, wer kennt noch Sicherheitslücken?
Sicherheitslücken erkennt man nicht durch das Benutzen des Forums, sondern durch Analyse des Quelltextes.
Ok, Herr Guninski wird beim Finden der Sicherheitslücken im IE wahrscheinlich keinen Quelltext vorliegen haben und trotzdem welche finden, aber dann hat er sehr intensiv herumprobiert, außerdem kennt er alle vorhergehenden Lücken und hat außerdem verstanden, wie das Programm grundsätzlich funktioniert.
Wenn du hier im Forum aber einfach nach der Sicherheit fragst, dann muß man das Innenleben einer Black Box raten. Natürlich ist die Tatsache, daß niemand weiß, welche Variablen du benutzt, ein potentieller Vorteil - aber sicher ist das nicht, denn man könnte ja auch richtig raten. Sicher ist dein Forum dann, wenn man trotz Kenntnis des Quelltextes nichts anderes als das vorgesehene damit machen kann.
Die wichtigsten Fehlerquellen hast du ja schon entdeckt: register_globals=on, Formularwerte, Usereingaben. Nicht erwähnt hast du (was auch kritisch beäugt werden sollte) include()s mit variablen Dateien (wo kommen die Werte her, kann man die verändern?). Und natürlich: Ist die Programmlogik eindeutig abweisend, wenn's um Fehlerbehandlung und Zurückweisung nicht authentifizierter Benutzer geht, oder läuft das Script noch irgendwie weiter? (vgl. http://forum.de.selfhtml.org/archiv/2002/6/15268/#m85650)
- Sven Rautenberg
Hallo!
Sicherheitslücken erkennt man nicht durch das Benutzen des Forums, sondern durch Analyse des Quelltextes.
OK, dann
Die wichtigsten Fehlerquellen hast du ja schon entdeckt: register_globals=on, Formularwerte, Usereingaben. Nicht erwähnt hast du (was auch kritisch beäugt werden sollte) include()s mit variablen Dateien (wo kommen die Werte her, kann man die verändern?). Und natürlich: Ist die Programmlogik eindeutig abweisend, wenn's um Fehlerbehandlung und Zurückweisung nicht authentifizierter Benutzer geht, oder läuft das Script noch irgendwie weiter? (vgl. http://forum.de.selfhtml.org/archiv/2002/6/15268/#m85650)
Nun, register _globals ist wie gesagt Off, und Usereingaben behandle ich jetzt vor der Ausgabe alle mit htmlentities() oder mit dem PHP-Highlighter.
Das mit den Benutzern ist in der tat ein Problem, denn das wichtigste an allem ist und bleibt, das es so einfach wei möglich zu bedienen sein soll, und das man sich nicht einloggen muß. Zur Zeit ist es ohne weiters möglich, die Daten eines anderen Benutzers anzuzeigen und zu verändern. Das kann man einfach dirch probieren der USerIDs machen, Wenn Du z.B. in dei Adressleiste des Browsers eingibst http://...&UID=7...
loggst Du Dich als "Hans Wurst" ein, hast also so die Daten, und wenn Du die änderst und ein Posting abschickst, werden die alten überschrieben.
Das ist schlecht, aber ich will keinen Login-mechanismus. Ich dachte da, ich könnte die Sicherheit erhöhen, wenn ich die Mailadresse und/oder den Namen mit in dem Link speichere, am besten als md5(), damit der link nicht zu lang wird, wäre es schon sicherer. Vielleicht sollte ich einfach das überschreiben verhindern, aber irgendwie muß man sich einloggen, wenn man das vollends verhindern will.
Hier habe ich mal den Quellcode, es fehlern alle <??>, fand das schöner vor allem da ja auch andere Programmiersprachen gehighlightet werden sollen, und das würde sehr verwirren.
http://forum.knet-systems.de/thread.php?id=176
mit
http://forum.knet-systems.de/thread.php?id=176&UID=7 wärst Du als "Hans Wurst" eingeloggt ;-)
Grüße
Andreas
PS: Was sagst Du zu validem xhtml 1.0 ???? Du bist doch einer der größten Befürworter hier!
Viele Grüße
Andreas
so ists richtig, aus Versehen falsch ID genommen ;-)
http://forum.knet-systems.de/thread.php?id=190
mit http://forum.knet-systems.de/thread.php?id=190&UID=7 wärst Du als "Hans Wurst" eingeloggt ;-)
Grüße
Andreas
so ists richtig, aus Versehen falsch ID genommen ;-)
mit http://forum.knet-systems.de/thread.php?id=190&UID=7 wärst Du als "Hans Wurst" eingeloggt ;-)
So wie ich das sehe, läuft dein Forum genauso, wie dieses hier: Man gibt den gewünschten Usernamen und Mail-Adresse ein, das Forum übernimmt die einfach, und entsprechend wird der Eintrag gespeichert.
Was ich nicht sehe (weils vermutlich noch fehlt), ist die Möglichkeit, sich anzumelden und regulär zu seiner User-ID zu kommen.
So, die entscheidende Frage ist aber: Ist es für dich wichtig, daß angemeldete User nicht einfach gefakt werden können. Diese Überlegung ist auch für das neue Selfforum im Gange - ich weiß nicht, was da der Stand ist, vermute aber mal, daß man sich am System mit Username und Paßwort anmelden _kann_, wenn man das möchte (weil es dann auch reichlich tolle Features gibt), und dadurch ja eine Authentifizierung von Postings möglich wäre. Faker könnten als solche schnell erkannt werden, sofern eine derartige Info mit angezeigt wird.
Ansonsten: Ein schönes Forum hast du da schon. Ein paar Dinge (siehe oben) fehlen noch, aber insgesamt hat es ein recht gutes Aussehen.
Was zu bemängeln wäre: Du zeigst die Diskussionsbeiträge in umgekehrter Reihenfolge an, das neueste zuerst. Dadurch kann man die Beiträge aber kaum nacheinander lesen, weil man vor allem bei längeren Texten erstmal hochscrollen muß zum Anfang, sich dann runterarbeitet, dann wieder hochscrollen zum Anfang des nächsten Beitrages, wieder runterarbeiten...
Man erwartet einfach die Fortsetzung einer Diskussion entlang des natürlichen Leseflusses. Also das neueste ganz nach unten.
Der Validator geht gerade nicht - aber Validität ist kein Luxus, sondern elementarer Bestandteil jeder Seite. Muß also nur dann erwähnt werden, wenn sie fehlt. Daß du es hingekriegt hast, trotzt PHP-Sessions valide & in die URL einzufügen, ist nochmal eine Bemerkung wert - wie hast du das geschafft?
- Sven Rautenberg
Yo nochmal!
Was ich unbedingt ergänzen wollte: htmlentities() ist kein Allheilmittel.
Du verwendest es zum Beispiel auch zum generieren von URL-Parametern (Auszug vom Ende des Quelltextes):
<a href=" echo basename($PHPSELF)."?id=$id&PID=".htmlentities($postings["ID"]); #verfassen">antworten</a>
In diesem Falle würden htmlentities() aber nicht weit genug gehen. Du solltest hier mit urlencode()/rawurlencode() arbeiten - damit kriegst du den String in jedem Fall durch den Validator ;) und auch durch jeden Browser. Denn gewisse Zeichen sind als URL-Parameter einfach verboten - und es sind nicht die Zeichen, die htmlentities() ersetzt, sondern noch viele andere. Fragezeichen, Leerzeichen und &-Zeichen zum Beispiel, aber auch Slashes.
- Sven Rautenberg
Hallo!
So wie ich das sehe, läuft dein Forum genauso, wie dieses hier: Man gibt den gewünschten Usernamen und Mail-Adresse ein, das Forum übernimmt die einfach, und entsprechend wird der Eintrag gespeichert.
Genau, mit dem Unterschied das die Daten gespeichert werden, und ggfs drauf zugegriffen wird.
Was ich nicht sehe (weils vermutlich noch fehlt), ist die Möglichkeit, sich anzumelden und regulär zu seiner User-ID zu kommen.
Ich weiß nicht ob ich das überhaupt will. Im Augenblick funktioniert das so, wenn man in das erste Posting seine mailadresse eingibt, wird man eingeloggt, die DB wird nach der email-Adresse durchsucht, und wenn neu, dann wird der User angelegt, wenn bekannt werde halt dei entsprechendne Daten in der Sessin registriert. Außerdem bekommt man immer eine email, wenn eine Antwort in einem Thread, in dem man mal gepostet hat eingeht. In dieser Mail steht ein Link, in dem die UID übergeben wird, also wird man direkt eingelogt!
Genauso wenn Du jemanden "einlädst", Du brauchst immer nur die mailadresse einzugeben(!), nach dieser wird die DB durchsucht, wenn bekannt wird der User per mail eingeladen, mit entsprechendem Link mit UID.
3. Möglichkeit wäre noch eine url mit UID in den Favoriten zuregistrieren, mal schaun ob das sinnvoll ist.
Ich weiß nicht, ob ich jetzt überhaupt noch einen extra Login brauche.
So, die entscheidende Frage ist aber: Ist es für dich wichtig, daß angemeldete User nicht einfach gefakt werden können. Diese Überlegung ist auch für das neue Selfforum im Gange - ich weiß nicht, was da der Stand ist, vermute aber mal, daß man sich am System mit Username und Paßwort anmelden _kann_, wenn man das möchte (weil es dann auch reichlich tolle Features gibt), und dadurch ja eine Authentifizierung von Postings möglich wäre. Faker könnten als solche schnell erkannt werden, sofern eine derartige Info mit angezeigt wird.
Ja, das ist in der Tat ein Problem, außerdem speichere ich bei den Threads nicht den Namen des Autors, sondern nur seine UID; un dwenn daran jeman rumfummelt steht in jedem Posting was falsches! Daher werde ich die Daten auch noch bei den Postings speichern.
Verhindern kann man das nur über Login mir Passwort - wie auch immer man das macht. Aber darauf will ich grundsätzlich verzichten (evtl will ich die Möglichkeit für private Diskussion schaffen, dann wahlweise nur unsichtbar/htaccess/eigener Mechanismus).
Aber wenn ich überlege, hier könnte das doch auch jemand machen, und wie oft passiert das?
ich werde wohl den Weg gehen, nicht nur dei UID in die Links zu schreiben, sondern auch md5($email.$name);
Dann müßte man sich schon wieder Arbeit machen und das lohnt nicht für sowas.
Wobei mir gerade einfällt, es kann ja jeder eine mailadresse eingeben und ist auch eingeloggt!? Da ist es wieder - je einfacher, desto unsicherer. Und da die mailadressen in den Postings stehen, ist das nicht wirklich schwer ;-)
Ansonsten: Ein schönes Forum hast du da schon. Ein paar Dinge (siehe oben) fehlen noch, aber insgesamt hat es ein recht gutes Aussehen.
Danke Dir!
Was zu bemängeln wäre: Du zeigst die Diskussionsbeiträge in umgekehrter Reihenfolge an, das neueste zuerst. Dadurch kann man die Beiträge aber kaum nacheinander lesen, weil man vor allem bei längeren Texten erstmal hochscrollen muß zum Anfang, sich dann runterarbeitet, dann wieder hochscrollen zum Anfang des nächsten Beitrages, wieder runterarbeiten...
Das werde ich berücksichtigen.
Man erwartet einfach die Fortsetzung einer Diskussion entlang des natürlichen Leseflusses. Also das neueste ganz nach unten.
OK.
Der Validator geht gerade nicht - aber Validität ist kein Luxus, sondern elementarer Bestandteil jeder Seite. Muß also nur dann erwähnt werden, wenn sie fehlt. Daß du es hingekriegt hast, trotzt PHP-Sessions valide & in die URL einzufügen, ist nochmal eine Bemerkung wert - wie hast du das geschafft?
;-) soll das jetzt heißen ich soll die schön auffälligen Buttons unten weglassen? Mensch, ich war so stolz!
Wie ich das mit der SessionID gemacht habe?
Wie mir geschrieben wurde, über die php.ini, und zwar:
arg_separator.output = "&"
arg_separator.input = ";&"
Anders habe ich es nicht geschafft. Leider. Aber da ich wegen register_globals eh da dran mußte, warum nicht auch das direkt ändern ;-)
Was ich unbedingt ergänzen wollte: htmlentities() ist kein Allheilmittel.
doch!
<a href=" echo basename($PHPSELF)."?id=$id&PID=".htmlentities($postings["ID"]); #verfassen">antworten</a>
im Gegenteil werde ich hier sogar htmlentities() weglassen! Denn $postings["ID"] ist von mysql_fetch_array(), und die Spalte ID ist 'int'! Wie soll darin was böses stehen, und Zahlen sollten doch auch in der URL erlaubt sein!
In diesem Falle würden htmlentities() aber nicht weit genug gehen. Du solltest hier mit urlencode()/rawurlencode() arbeiten - damit kriegst du den String in jedem Fall durch den Validator ;) und auch durch jeden Browser. Denn gewisse Zeichen sind als URL-Parameter einfach verboten - und es sind nicht die Zeichen, die htmlentities() ersetzt, sondern noch viele andere. Fragezeichen, Leerzeichen und &-Zeichen zum Beispiel, aber auch Slashes.
Das ist mir bekannt, aber ich übertrage da ja keine Daten ausser Zahlen und er SessionID, vielleicht noch md5(), aber das lasse ich glaube ich, da man sowieso anders noch leichter die Daten ändern könnte. Das ist ein größeres Problem, als ich anfangs gedacht habe.
Vielen Dank für das Lesen des langen Quelltextes ;-) Ist doch angenehmer so, als so einfach in schwarz, oder?
Was ich noch machen möchte, ist das highlighting für weitere Sprachen zu implementieren, oder wenigstens vorab die spezifischen Tags zu ersetzen, also z.B. <% für asp, zum highlighten in <? übersetzen, und später wieder <% ausgeben. Nur mit PERL geht das nicht, naja, da mache ich mir nochmal Gedanken, auch html-Highlighting wäre nicht schlecht, da gibt es doch bestimmt irgendwelche Möglichkeiten(Klassen/Packages?) in PHP, oder?
Übrigens, wenn Du "eingeloggt" bist, werden Deine Postings in der Boardansicht mit anderem Hintegrund angezeigt, auch in der Baumansicht wirden sie hervorgehoben...
Grüße
Andreas
Hallo!
Die Zeitangabe ist fehlerhaft (zeigt bei mir immer 1970 an).
Sonst ein schönes Forum, könntest du es nicht als Freeware "freigeben"?
Gruß Oppa
Hi!
Die Zeitangabe ist fehlerhaft (zeigt bei mir immer 1970 an).
Ja, ich weiß, das ist immer bei ersten Posting, wenn date() keinen wert hat. So Sachen werden noch behoben...
Sonst ein schönes Forum, könntest du es nicht als Freeware "freigeben"?
Ja ist geplant, habe aber vor noch nichtmal 3 Tagen damit angefangen, und ist noch ziemlich voller Fehler und unsauber, werde das dann nochmal objektorierntiert umschreiben, aber dann bestimmt!
Außerdem ist da kein Admin-Bereich, wo man mal ein paar Threads lsöchenm könnte... es fehlt noch ne ganz Menge...
Noch was zu den Features:
Eigene Postings werden anders dargestellt als andere, hatte ich vergessen zu erwähnen ;-)
Grüße
Andreas
hi,
super forum, respekt! von wegen freeware wär es ne super idee. weil zum geld verdienen reicht es nicht (nicht bös gemeint). aber es ist nicht einfach, als einfacher (einzelner) progger geld zumachen. wenn es dann mal fertig sein sollte.....ICH NIMMS*fg*
MFG MAGGUS
Hallo!
super forum, respekt! von wegen freeware wär es ne super idee. weil zum geld verdienen reicht es nicht (nicht bös gemeint). aber es ist nicht einfach, als einfacher (einzelner) progger geld zumachen. wenn es dann mal fertig sein sollte.....ICH NIMMS*fg*
Das war auch nicht meine Absicht ;-))) Eher schon in andere Projekte einbinden... Außerdem, genau das will ich gerade nicht, ein Forum mit 1000 Spielereien, 1000 Einstellmöglichkeiten, 1000 Smilis(?), ich will ein GAAAANZ einfachs Forum, welches zwar solche Features hat wie wiedererkennen von Usern, aber ohne Cookies, ohne jegliche Einstellmöglichkeit, evtl. das ein oder andere durch den Admin... mal schaun.
Was ich sagen muß, je mehr man sich mit sowas beschäftigt, desto mehr muß man eingestehen das das Selfforum das non-plus-ultra ist... es fehlen halt ein paar Features, aber die sollen ja auch irgendwann kommen.
Ich will auch kein burnungborad..., das mehr für alles und nichts gechrieben wurde.
Ich will mich ehher auf, na wie soll ich sagen, Entwickler bescränken, die es zu schätzen wissen, das es halt keine klickibunti-Features gibt! Dafür ist das highlighting ganz sinnvoll, ist nur die rage welche Sprachen der der PHP-Highleiter wie gut "versteht", also einigermaßen sinnvolles highlighting erstellt, mit php, asp, perl gehts eigentlich(auch wenn nicht perfekt, besser als schwarz!!!), bei anderen Sprachen weiß ich nicht.(kann gerne jemand testen, also z.B. dein JSP-Code
)
Es kommt auch noch irgendwas mit privaten Bereich, in den nur die eingladenen Leute könnne, oder so ähnlich, dann kann man nämlcih auch ganz bequem mal über Sachen/Projekte fachsimpeln, die nicht jeder so mitbekommen soll, bzw. muß man das Bewußtsein der Öffentlichkeit nicht immer im Hinterkopf haben.
naja, für weiter Vorschläge bin ich immer offen ;-)
Viel Grüße
Andreas