Die bezüglich der hochzuladenden Datei. Sie liegen nebeneinander.
Und wie mach ich das? Das ist doch ein <input> Element.
Da hat er recht (nicht mit input an sich, aber mit <input type="file" />). Bei den gängigen Browsern unstylebar, wohl aus Sicherheitsgründen (es gibt da meines Wissens ein paar JS Tricksereien, aber die sind verdammt umständlich und halt... JS ^^).
Was ist schon Standard? Bei 16:10 Bildschirmen passt es perfekt (1449/900=1.6). Hat ja nicht jeder 4:3 Monitore.Zitat von deadshox
Also, dass wir jetzt beide nicht aneinander vorbeireden:
Wir meinen beide das hier, richtig?
Und wir meinen beide den Abstand zwischen dem weißen Feld links und dem Button rechts?
Da kann man wirklich weder mit nem Einzug noch mit erzwungenen Leerzeichen was machen, die hängen zusammen.
Du sollst es ja gerade nicht ausmachen o.o Das ist in diesem Fall das, weas dich gegen die SQLInjections schützt, da alle Sachen, die von außen kommen, escaped werden. Du musst, um dich zu schützen, eigentlich nur die entry()-Funktion auch auf die Sachen beim Upload anwenden (auch auf den Dateinamen).
Ich würde die entry() Funktion auf die Sachen beschränken, die zum Sichern für eine Query notwendig sind (eigentlich nur add_slashes()) Gerade strip_tags würde ich mir sparen, da es ja unter Umständen zum Beispiel Benutzernamen gibt, die wie ein Tag aussehen - die wären dann nicht erlaubt.
Aber auch nur fast. eval() ist eine unsaubere Sache, die sollte man am besten nur an einer Stelle verwenden(mal davon abgesehen, dass es viel kürzer wäre :P)
Naja , es ist über ein include gemacht. Besser wäre es imo, die Sprache nur als Einstellungswert zu definieren, und dann in der index.php oder sonstwo die entsprechende Sprache einzubauen - das ist benutzerfreundlicher und flexibler (zB unabhängig vom Sprachpfad)
PS: Der neue Code ist schon viel übersichtlicher![]()
--
Ok Sry da hab ich mich falsch ausgedrueckt mit den Magic Quotes. ^^ Meine natuerlich ausser es an zulassen.
Hab das grad Probiert eval() in eine Funktion zu packen hat aber nicht Funktioniert. ;(
Was meinst du mit Einstellungswert? Ueber einen Admin Panel?
Danke.![]()
Änder doch einfach deine dooutput() Funktion (ungetestet):
Du könntest das ganze auch direkt in die gettemplate() Funktion packen:
Änder doch einfach deine dooutput() Funktion (ungetestet):
In beiden Fällen bekommst du allerdings Probleme mit den variablen, weil sie innerhalb der Funktion nicht vorhanden sind (außer den Superglobalen). Da empfielt es sich, einfach alle Variablen für das Template mitzuübergeben (als Array) und dann extract() zu verwenden
Ein Wert in deiner Konfigurationsdatei. Und wenn du ein Admin Panel hast, dann sollte man das da natürlich auch ändern können![]()
--
Warum zum Teufel benutzt du überhaupt eval(), um statischen Code auszuführen?
Was Magic Quotes angeht: Stell' sie ab. Und zwar bei dir lokal (sofern du auf einem eigenen Rechner einen Testserver laufen hast). Man sollte Webanwendungen immer so entwickeln, als wolle man sie hinterher auf einem maximal unsicheren System laufen lassen - weil sie nämlich vielleicht irgendwann auf genau so einem laufen. Wenn du dich dann auf Magic Quotes und Safemode verläßt kann es sein, daß es eine böse Überraschung gibt.
Abgesehen davon stellen Magic Quotes u.U. unschöne Dinge mit den Daten an, wenn man nicht aufpaßt. Es hat seine Gründe, warum sie bei PHP seit Ewigkeiten standardmäßig deaktiviert sind.
Naja also kann ich es auch gleich sein lassen da es ja noch Komplizierter wird.
In meiner Konfigurationsdatei brauch ich auch bloß german, mit sagen wa mal english austauschen aber ich werd das ganze Sprach System noch einmal ueberarbeiten. ;]
Was soll ich sonst nutzen? War halt die einfachste Variante fuer ein Template System.
Ist auch reichlich unsicher. Mit eval() kann man theoretisch unbegrenzten Schaden anrichten... Diese Funktion gilt im Allgemeinen als extrem unsauber und sollte nach Möglichkeit vermieden werden.
Ich mache Templates für gewöhnlich so:
1. Das Template selbst
Genau wie bei dir einfach eine Datei mit Platzhaltern. Die haben bei mir ein anderes Format (üblicherweise %PLATZHALTER% oder {PLATZHALTER}), ansonsten ist es aber gleich. Das andere Format rate ich dir, damit du hinterher nicht groß escapen mußt. Alternativ kannst du auch einfach den zu ersetzenden Text in '' statt "" verpacken; damit werden Variablennamen nicht geparst (siehe unten).
2. Der Code
In PHP lade ich den Inhalt der Templatedatei in eine Variable und füge da per str_replace() meinen Kram ein.
Ein simples Beispiel:
template.htm
template.php
Ach ja, du kannst den Kram natürlich auch automatisieren:
Geändert von Jesus_666 (18.06.2007 um 21:15 Uhr)
Allerdings könnte man dann auch gleich zwei Arrays verwenden und die eingebaute Array-Unterstützung von str_replace() nutzen. Ich kann mir gut vorstellen, dass das weitaus performanter ist:
Hab's allerdings jetzt nicht ausprobiert.
Nachteil wäre vielleicht, dass das eine Array mit Schlüssel->Wert-Paaren übersichtlicher ist. Allerdings könnte man wahrscheinlich auch ohne große Performanceeinbußen das Array wie bei dir anlegen und dann automatisch in zwei Arrays aufteilen lassen.
--A human is a system for converting dust billions of years ago into dust billions of years from now via a roundabout process which involves checking email a lot.
Hm irgendwie sagen mir eure Varianten nicht zu. ;(
Ich sehe meine immer noch fuer am besten an da sie am einfachsten ist.
@Jesus_666 bitte nen mir doch mal ein paar bsp. was man alles mit eval() boeses machen kann, sonst sehe ich keinen Sin drin es nicht mehr zu verwenden!
Edit: Hab mal das Tutorial rausgesucht wo durch ich das so mache mit dem Template und da steht auch drin das das vBulletin das genauso macht. ;P
Tutorial zum Template System.
Geändert von deadshox (19.06.2007 um 08:50 Uhr)
Es steht nicht "genauso", sondern "nach dem gleichen Prinzip", was ein erheblicher Unterschied macht. In dem Kontext heißt's ziemlich sicher, dass vBulletin auch Templates verwendet, und nicht eval().
Ich kann mir's zwar im Gegensatz zu anderen hier nicht ansehen, aber mich würde es sehr stark wundern, wenn eine große Forensoftware wie vB auf sowas wie eval() setzen würde. o_O'
Ich habe keinen direkten Exploit zur Hand, rate aber trotzdem von eval() ab. Ein Escapefehler mit str_replace() und der User kriegt uninterpretierten PHP-Code geliefert. Ein Escapefehler mit eval() und der Server führt Code des Angreifers aus. (Ja, man sollte immmer davon ausgehen, daß die Anwendung permanent angegriffen wird; alles andere ist Leichtsinn.)
Nebenbei generierst du durch falsche Syntax links und rechts kaputte Konstanten. $lang[faker] ist nicht gleichbedeutend mit $lang['faker']!
BTW, es ist möglich, fast beliebiges JavaScript zu injizieren. Die Eingaben für Faker und Gefakten werden nicht ausreichend gefiltert, um Skripte abzufangen. Momentan kriege ich nichts besseres als window.location = "http://evil.tld/" hin, aber über die Lücke wären potentiell fiese Angriffe möglich und ein besser mit JavaScript bewandter Angreifer könnte u.U. sogar XSS durchführen.
Du weißt, daß das vBulletin eine ganze Weile lang unter Code-Injektionen zu leiden hatte? Derartige Angriffe funktionieren grundsätzlich nicht, wenn du eval() nicht verwendest (oder Dämlichkeiten machst wie hochgeldene Dateien zu includen).Zitat
vB Benutzt auch eval() aber nach meinem Wissen nicht für die Tamplates, die werden um einiges anders verarbeitet wenn ich mich recht entsinne. Denn ich hab bisher noch nix gesehen im vB wo Template und eval() zusammen genutzt werden.
zu Templates selber kann cih nur sagen das ich meine Templates wie vB in einer Datenbank speichere und diese dann wenn benütigt auslese.
Der rest geht dann wie bei Jeez über die Platzhalter die dann per str_replace() ersetzt werden. Find ich persönlich praktisch und auch sehr unkompliziert![]()
Hm ich habe mir gerade ein paar OpenSource CMSs angeschaut und festgestellt wenn ueberhaupt ein Template System genutzt wird wo PHP und HTML nicht gemischt sind dann geht es irgendwie ueber OOP.
Also Lern ich jetzt erst mal OOP, wollte das schon lange mal machen und dann kann ich gleich das ganze Projekt so umstellen.
Danke Trotzdem schon mal fuer eure Hilfe!
So lange ich OOP Lern steht dieses Projekt hier erst mal still.