Beiträge von beefy

    Das hat auf jeden Fall mit PHP nichts zu tun, sondern ausschließlich mit dem HTML- bzw. JavaScript-Code. Was da genau das Problem ist kann man so schwer sagen, da müßtest du z.B. den von deinem Skript ausgegebenen HTML/JS-Code angeben. Generell ist es jedoch bekannt, daß Standards in den seltensten Fällen von allen Browsern unterstützt werden bzw. nur unvollständig oder fehlerhaft implementiert wurden.

    Zitat von sentencedX

    das mitm escapen check ich aber noch nicht ganz, und hab auch ein stranges *problem*
    ich hab den text via textbox eingelesen -> echo hats mit \ ausgegeben -> in der DB ist es OHNE \ gestanden.


    OK, das bedeutet also daß die magic quotes aktiviert sind. Die von dir benutzte GET- bzw. POST-Variable wurde automatisch escaped, daher auch der \ bei der Ausgabe mit echo. Wenn du diesen String ohne ihn weiter zu bearbeiten an die DB schickst, wird die Datenbank diese Escape-Zeichen ein einziges Mal auflösen. Das heißt, die Datenbank läuft einmal über deinen String und ersetzt alle \" durch ", alle \' durch ', alle \\ durch \, und wahrscheinlich noch ein paar andere Zeichen.

    Darum mußt du eben aufpassen, daß addslashes() nur einmal ausgeführt wird - und zwar entweder durch die magic quotes-Automatik, oder manuell durch dich (falls die magic quotes deaktiviert wurden - was du übrigens auch durch eine .htaccess-Datei schaffen kannst).


    Zitat von sentencedX

    Aber jetzt,ohne code wirklich geändert zu haben oder addslashes extra zu verwenden, werden die \ auch eingetragen wenn ich ein neues hinzufüg *?? wtf ??*


    Das versteh ich jetzt nicht ganz. Wenn die \ auch in der DB stehen, dann hast du sicher addslashes() irgendwie 2x ausgeführt (vielleicht eben das erste Mal bereits durch die magic quotes).


    Zitat von sentencedX

    aber warum ist es schlecht wenn die \ in der DB stehen? ich dachte sie sind dafür um sonderzeichen(',") zu "entschärfen" und man sollte es auf jeden fall verwenden?


    In der DB selber stehen die \ dann nicht mehr! Das ist nur dazu da, der Datenbank einen "schönen" String zu schicken. Es ist überhaupt kein Problem wenn in der DB Apostrophe oder was auch immer stehen, das sind ja dann nur noch abgelegte Daten.


    Hier noch was zu der generellen Problematik:

    Stell dir vor, du willst von der DB wissen, ob es einen User mit diesem Namen und diesem Passwort gibt, im Script schaust du dann ob mysql_num_rows() > 0 ist:

    SQL
    SELECT * FROM users
    WHERE name = 'humanic' AND pass = 'franz'


    Soweit kein Problem, wenn der User wie hier "normale" Strings eingegeben hat. Aber jetzt stell dir vor, du tust die Strings nicht escapen und der User gibt bösartige Sachen ein, z.B. ins Passwort-Feld den String franz' OR 'a'='a:

    SQL
    SELECT * FROM users
    WHERE name = 'humanic' AND pass = 'franz' OR 'a'='a'


    Jetzt haben wir ein Problem! Der SQL-Server wird jetzt ziemlich sicher > 0 Ergebnisreihen zurückgeben, womit unter Umständen die Authentisierung erfolgen würde!

    Wie schaut der String aus, wenn wir ihn vorher escapen?

    SQL
    SELECT * FROM users
    WHERE name = 'humanic' AND pass = 'franz\' OR \'a\'=\'a'


    Der SQL-Server würde hier also einmal den escape-Prozeß rückgängig machen, bevor er die Daten wirklich verwendet. Er würde also Zeile für Zeile das Passwort mit dem genauen String franz' OR 'a'='a vergleichen, was ja in Ordnung ist. Soll er doch. ;)


    Zitat von sentencedX

    und was ist der unteschied zu escape_mysql_string? lt. php.net machen sie eh das selbe...


    mysql_escape_string() escaped ein paar mehr Zeichen als addslashes(). Ich würde also mysql_escape_string() empfehlen, zumindest wenn du mit einem MySQL-Server arbeitest. Die werden schon wissen was für ihre DB escaped werden muß, sozusagen.

    Zitat von sentencedX

    addslashes fügt vor " und ' ein / an, oder?


    Das Escapen funktioniert hier mit Backslashes, also z.B. \". Das und viele andere Infos findest du im PHP Manual zu addslashes():

    Zitat von PHP Manual - addslashes()

    The PHP directive magic_quotes_gpc is on by default, and it essentially runs addslashes() on all GET, POST, and COOKIE data. Do not use addslashes() on strings that have already been escaped with magic_quotes_gpc as you'll then do double escaping. The function get_magic_quotes_gpc() may come in handy for checking this.


    Also was bedeutet das? Wenn magic_quotes_gpc aktiviert ist, dann werden alle GET-, POST- und Cookie-Variablen automatisch escaped. Das bedeutet, dein String test's wurde bereits zu test\'s, bevor du die Variable benutzt. Wenn du jetzt noch einmal addslashes() darauf ausführst wird der String zu test\\\'s, weil der einzelne Backslash auch escaped wird. Sendest du diesen String an die Datenbank, wird sie wie immer nur einmal den Escape-Prozess rückgängig machen (also sozusagen stripslashes() ausführen), sodaß der String test\'s in die Tabelle eingefügt wird!

    Das ist natürlich schlecht. Was du also tun kannst ist entweder die magic quotes ganz abzuschalten (was ich für die beste Lösung halte!), oder zur Laufzeit festzustellen ob diese aktiviert sind, und, wenn ja, deine GPC-Strings halt nicht mehr zu escapen.

    Hoffe das war jetzt halbwegs verständlich...


    Zitat von sentencedX

    achja: wie bekomm ich aus einer Textarea die formatierung raus bzw. die returns? wenn ichs in die DB schreib krieg ich nachher alles nur in einer wurscht...


    Wie meinst du das genau? Du kannst den Text aus einer Textarea ohne Probleme einfach so (eventuell escaped, siehe oben) in die DB schreiben! Falls du den Text nachher wieder in einer Textarea anzeigen willst solltest du htmlentities() drüber laufen lassen.

    Falls du den Text einfach so auf der Seite anzeigen willst ruf ebenfalls htmlentities() auf, es sei denn du willst daß HTML-Code 1:1 vom Benutzer übernommen wird. Auf jeden Fall solltest du außerdem nl2br() auf den Text anwenden.

    Da hab ich jetzt hoffentlich nichts durcheinander gebracht, ich bitte um Korrekturen wenn nötig.

    Zitat von lerod

    man muß ned automatisch jede html zeile als php-konstrukt schreiben .. ist ja auch sinnlos, zeit verschwendend und sehr müselig, reine html zeilen mit echo zeilen auszugeben.


    Ist aber schon auch Geschmacksfrage. Ich persönlich geb 99% meines HTML-Codes mit echo aus, weil ich dann einfach einen besseren Überblick über den Sourcecode behalten kann. Gscheite Einrückungen werden sonst ein bissl anstrengend.

    Zitat von sentencedX

    die varibalen werden aus einer form befüllt - das worked.


    Hier wie so oft die Empfehlung, die vom Client empfangenen Variablen aus den "superglobal arrays" $_GET, $_POST, $_COOKIE, $_REQUEST, etc. auszulesen. Die "register globals"-Option von PHP (durch die automatisch globale Variablen mit den vom User angegebenen Namen erzeugt werden) ist ein Sicherheitsrisiko und sollte nicht verwendet werden.


    Zitat von sentencedX

    $add_query= "INSERT INTO kontext (id2,name) VALUES ($topic_id,$add_title);";


    Hier liegt der Fehler, wenn ich mich nicht ganz irre: du mußt die einzelnen Values in Hochkommas setzen! Ich nehme an, daß deine 2 Variablen diese nicht beinhalten. Richtig wäre also:


    PHP
    $add_query = "INSERT INTO kontext (id2, name) VALUES ('$topic_id', '$add_title')";


    Achja: Die query sollte eigentlich nicht mit einem Strichpunkt enden, nur zur Info.

    Du solltest dich außerdem mal mit dem Escapen von Strings beschäftigen, das heißt daß z.B. das Hochkomma ' durch \' ersetzt wird. Keinesfalls sollte User-Input ungeprüft an die Datenbank geschickt werden! Ansonsten könnte es große Probleme geben, falls $add_title durch den User z.B. auf "bla'bla" gesetzt werden würde. Siehe dazu addslashes() oder mysql_escape_string().


    Zitat von sentencedX

    $add_query= "INSERT INTO kontext (id2,name) VALUES ($topic_id,$add_title);";
    $error = mysql_error();


    mysql_error() hier aufzurufen macht nicht viel Sinn, da hast du ja noch garkeine mysql-Operation ausgeführt! Mach das lieber nach einem mysql_query().

    Zitat von michi204

    ach ja, ich verwende ein xterm + exceed auf einem windows-pc.


    Hast du URLs zu den Programmen die du benutzt? Bin nicht über putty und den cygwin X-Server rausgekommen, gibt's da bessere Möglichkeiten?

    Zitat von MarvinTheRobot

    ja, aber wenn du eine firma bist die einfach gerne wissen würde wieviele leute die werbung die sie auch angefordert haben auch lesen, rein aus interesse und um zu wissen ob es sich überhaupt rentiert neben der papierwerbung die wir eben auch aussenden die erwünschte emailwerbung aufrecht zu erhalten.


    Bei einem Newsletter werden sich die Leute eh meistens selbst ein-/austragen können, das heißt an der Anzahl der Abonnenten erkennt ihr eh schon den Trend.


    Zitat von MarvinTheRobot

    frage: würdet ihr euch gestört oder oder geärgert fühlen wenn ihr in dem mail auf einen link zur webseite klickt und somit eure mailinglisten-id (nicht die emailadresse!) und die newsletterid im link mitschickt? so weiss ich zwar nicht wer den newsletter liest aber wer sich aufgrund des newsletters weitere details auf der webseite ansieht....


    Das ist in meinen Augen eine immerhin etwas bessere Lösung.

    Zitat von InspectorGadjet

    so wie ich das gesehen habe ist das ab outlook 2003 keine standardeinstellung mehr... die habe einiges geändert um spam so gut wie möglich zu verhindern...


    Jo, da muß man jetzt rechte Maus-"Bilder downloaden" klicken oder so ähnlich. Kannst dir überlegen Frames zu benutzen, aber das wird Outlook wohl auch nicht gestatten, oder?

    Generell find ich aber, daß dieses wer-liest-die-Mail-wirklich-Spiel nicht besonders höflich ist; ich ärger mich immer wenn ich eine Mail mit geforderter Lesebestätigung bekomme und schick diese aus Prinzip nicht ab - ist doch meine Sache was ich lese! Genauso würde mich ein versteckter Mechanismus wie in deinem Fall ärgern, falls ich es merken sollte.

    Meine Kindheit/Jugend: Bubble Bobble, Tetris (Volksschul-Klassiker am Gameboy, hat auf keinem Ausflug fehlen dürfen), Stunts, Crash Course, Sam&Max, Nascar Racing, Wolfenstein 3D, Doom 1, Kaiser, Ports of Call, Defender of the Crown, Civilization, Super Mario Bros, ...

    Hab auch ein heißgeliebtes Spiel (für den Amiga glaub ich) sehr oft bei einem Freund gespielt, das "Turbo" oder ähnlich geheißen hat. War ein Autorennen in der Vogelperspektive, auch Splitscreen möglich, und man hat Öllacken legen können oder so. Weiß jemand genaueres zu diesem Spiel?

    Zuerst mal danke für die Bemühungen allerseits! Habe auf diesen Thread aufgrund längerem Fehlens von Antworten vergessen. Das Linux-Problem hat sich eigentlich gelöst; das Problem war eine Einstellung im BIOS. Und zwar war mein ATA-Mode auf "Native" anstatt auf "Legacy" gestellt, damit ist RedHat offenbar nicht zurecht gekommen.

    Interessant ist, daß ich genau heute eine S-ATA Festplatte gekauft habe, und mein Windows seit dem Einbau dieser komplett spinnt. Tatsächlich habe ich es noch nicht mal geschafft, die Festplatte hier im Windows sichtbar zu machen. Aber ich denke dazu werde ich demnächst eh einen eigenen Thread eröffnen.

    (Trotzdem kurz: Irgendwo habe ich jetzt gelesen, daß "ältere" Betriebssysteme wie Win2k nicht mit dem "Native"-Mode zurecht kommen (hat eigentlich schon funktioniert!), daß ich diesen jedoch brauche um IDE und S-ATA gscheit zu kombinieren ... der ICH5-Chip verträgt nämlich im Legacy-Mode nicht mehr als 2 IDE und 2 S-ATA Geräte gleichzeitig, ich habe jedoch jetzt schon 3 IDE Festplatten eingebaut. Werde in den nächsten Tagen WinXP aufsetzen und beten daß dann alles funktioniert.)

    Du mußt auf jeden Fall noch die Variablen vorm Einfügen in die DB durch addslashes() rennen lassen. Ansonsten kannst du keinen Text, der Apostrophe enthält, einfügen. Mag jetzt nicht lang drüber reden, auf jeden Fall mach folgendes:

    PHP
    mysql_query("INSERT INTO table (feld1, feld2) VALUES ('" . addslashes($variable1) . "', '" . addslashes($variable2) ."'";

    EDIT: Das war mal sicher falsch zuerst...

    Vom regulären Ausruck her jetzt: wie wär's mit ^index\.php3/.*$? Dabei muß halt aber auch das Verzeichnis mitbedacht werden, siehe auch RewriteBase...

    Danke für eure Tips, ich habe mich jetzt erstmal für AxCrypt entschieden. Ist Open Source, hat die Einträge im Kontextmenü, ist sicher, kann mehrere Dateien auf einmal verschlüsseln (je einzeln halt), kann Dateien in .exe-Dateien verschlüsseln, die sich beim Aufruf selbst entschlüsseln ...

    Ich sehe also überhaupt keine Nachteile, und würde auch dir, Sensei, empfehlen das Ding mal anzuschaun. Open Source und alle Features, da könntest du doch auch den Umstieg überlegen.

    Danke auf jeden Fall!

    Wie würdet ihr Dateien auf der Festplatte unter Windows verschlüsseln? Ich stell mir da ein Tool vor, das im Kontextmenü der Datei die Optionen "Verschlüsseln" und "Entschlüsseln" (falls nötig) anbietet, sodaß man dann nur ein Passwort eingeben muß. Kenne mich auf dem Gebiet leider nicht wirklich aus, aber PGP ist ja eher dafür gedacht, jemanden anderen etwas zu schicken, oder? Oder könnte ich so die zu verschlüsselnden Dateien quasi an mich selbst schicken?

    Wie auch immer, mir geht trotzdem Sicherheit vor Komfort! Wenn man das mit PGP oder ähnlich sicheren Programmen erledigen kann, bitte ich um Tips!