preg_replace anführungszeichen erlauben

Ah ok also hilft mir das kein bißchen weiter wenn ichs mit einbinde.
Was für n aufwand um ein Zeichen mehr frei zugeben.... echt übel....

Ich hoffe mal da gibts noch einen weg der funktioniert.
 
Wenn magic_quotes wirklich aus ist, dann muss irgendwo noch http://php.net/manual/en/function.addslashes.php aufgerufen werden. Wenn du den Code von mir 1zu1 so übernimmst (von mir aus "\n" durch "<br />" ersetzen, ich führe den Code eben in der Kommandozeile aus) und du wirklich eine andere Ausgabe erhälst als ich, dann läuft etwas komplett schief. Denn magic_quotes würde bei dem Code ohnehin keine Rolle spielen, weil es sich ja nicht um Nutzereingaben handelt. Und preg_replace fügt ganz sicher keine Backslashes hinzu.
 
Doch es handelt sich im benutzereingaben. Sie werden einmal im Formular nach dem absenden Preg_replaced, in die mysql datenbank eingefügt und auf diversen anderen seiten ausgegeben.

Das einzige was ich vorher noch mache ist:

PHP:
$name = $_POST['name'];
$name = stripslashes($name);
$name = mysql_real_escape_string($name);
$name = preg_replace('![^a-zA-Z-öäü ßÖÄÜ´"]!is', '', $name);

Ich wüsste nicht das ich jemals addslashes verwendet habe.
Es schein aber egal zu sein ob ich strip und escape vorher noch anwende.
Habs auskommentiert und es war immer noch das gleiche ergebnis \" und nicht nur "
 
Doch es handelt sich im benutzereingaben.

Es ging um mein Beispiel.


PHP:
$name = $_POST['name'];
$name = stripslashes($name);
$name = mysql_real_escape_string($name);
$name = preg_replace('![^a-zA-Z-öäü ßÖÄÜ´"]!is', '', $name);

1.Wozu "stripslashes", wenn magic_quotes aus ist?
2.Ist dir klar, dass mysql_real_escape_string vor die Anführungsstriche Backslashes setzt?

mysql_real_escape_string() calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a.
 
Ja jetzt funktionierts hab in allen dateien die mit dem script zusammen hängen die escapes und strips rausgehauen und dann liefs auch richtig.

Das Problem war das ich nach einem Sicherheits Tutorial gearbeitet habe.
Mit der php Sicherheit kenn ich mich nicht wirklich aus. In dem Tut stand das man alle variablen mit escape / strip und Preg_replace überprüfen soll.

Was diese funktionen jetzt genau machen stand aber nicht mit dabei.
Jetzt bin ich wieder um einiges schlauer.

Also brauch ich nicht zu escapen und strippen.

Gibts noch andere Sachen die man auf variablen anwenden sollte die vom benutzer kommen?

Ich danke euch allen für die super hilfe.

Kennt vllt noch wer ein gutes Sicherheits Tutorial das auch für php fast anfänger verständlich ist?
Weil Sicherheit ist für mich das a und o.
Da hab ich es wohl ein wenig übertrieben.
 
Grundsätzlich ist das schon eine gute Idee, Variablen vom Benutzer immer zu sanitizen. Wenn du vor hast, ohnehin mit regulären Ausdrücken auf die Benutzereingabe los zu gehen, solltest du dir zwei mal überlegen, ob du den String vorher escapen kannst/darfst/musst/sollst. In diesem Falle war es wirklich sinnlos.

Beim "einfachen" Eintragen in eine DB sollte man das schon tun, also escapen. Viel wichtiger als Filtern ist allerdings Validieren. Du solltest prüfen, ob der reingekommen Wert dem entspricht, was du erwartest. Bei ID's die aus Formularen kommen, kannst du beispielsweise auf intval() zurück greifen, um zu prüfen, ob der übergebene Wert eine Zahl ist, in dem du es durch intval() jagst und dann mit dem Original (aus dem Formular) vergleichst, die müssten dann identisch sein. Das ist ein Beispiel für Validieren. Filtern bedeutet, den nicht gewünschten Müll einfach raus zu werfen, was auf dein Beispiel zu trifft.

Man sollte nie einfach so irgendwelche Funktionen übernehmen, ohne zu wissen, wofür sie gut sind und was sie tun. Dafür gibts ja das PHP-Manual, was dir sagt, was sie tun.
 
Ja gut ich muss gestehen das ich da wohl ein wenig zu sehr an das Tutorial geklammert habe und dabei wohl total vergessen habe zu checken was des überhaupt bewirkt.

Hab mir so gerade mal ca 30Std. mehrarbeit eingefahren weil ich das so in ziemlich jeder Datei mit verbaut habe. Naja egal jetzt hab ichs fast alles wieder ins reine bekommen und alles funktioniert wieder wie es soll.

Muss aber trotzdem noch mal nach nem Sicherheitstutorial fragen das leicht verständlich und gut erklärt ist. Evtl. kennt ihr ja noch was gutes.
 
Dafür wirst du kein Tutorial finden, was leicht und verständlich ist. Da kommen viele Begriffe in den Kontext, die du jetzt vielleicht noch nicht verstehst. Das ist die Natur der Sache. Das Wissen darüber, wie man eine Applikation sicher macht lernt man durch Erfahrung und die wiederum bekommt man nur, wenn man Fehler macht und sie sich aufzeigen und erklären lässt.

Ich meine was bringt es dir, wenn ich dir Dokumente um die Ohren knalle, in denen das Wort Cross Site Request Forgery drin steht, und wie man sie verhindert.

Du solltest das langsam auf dich zukommen lassen. Am besten ist es, wenn du deinen Bauch entscheiden lässt, wie etwas wohl abgesichert werden kann.

"Einfache Tutorials" sind von Natur aus erstmal schlecht, weil sie nur anreißen aber nicht in die Tiefe gehen.

Glaub mir, diese Erfahrung wirst auch du machen, wenn du dich erstmal ne Weile damit beschäftigt hast. So etwas wie "Mach das, dann passiert dir nichts" funktioniert entweder zu gut oder zu schlecht. Da muss man gesunden Menschenverstand einbringen.

Als Lektüre kann ich allerdings nur Stefan Esser empfehlen (Suhosin-Entwickler und ehem. PHP Security Guru):
http://www.amazon.de/PHP-Sicherheit-PHP-MySQL-Webanwendungen-sicher-programmieren/dp/3898645355
 
Zurück