String zwischen zwei bestimmten Zeichen ausgeben

Also Die Funktion generell enhält 2 wichtige teile.. als erstes eine RegEx und das 2. ist eine funktion die auf die gefunden Elemente angewand wird.

Code:
"%'(.*)'%Us"

% sind die Begrenzer der Expression
' sind die Anfürhungszeichen nach denen er sucht.
.* Punkt ist ein beliebiges Zeichen, Stern beliebig oft... also alles was zwischen zwei ' steht.
die () braucht man nur für das callback das eben dieser String zurückgeliefert wird

Im Endeffekt macht es "Wende die Funktion auf alles an was zwischen 2 Anführungszeichen steht"

Allerdings kommt mir gerade das du das warscheinlich vergessen kannst, da man nicht sicher sagen kann ob das ' nun das Ende deiner zuweisung ist, oder der Anfang der SQL-Injektion. Die SQL Abfrage hinterher zu prüfen ist meiner Meinung nach wie vor ein schlechter weg. mit Type-Casting und die Werte ggf. zu escapen ist auf jeden Fall der sichere Weg.

Edit: Darf man fragen waum das nicht in Frage kommt?
 
Es kommt deshalb nicht in Frage, weil ich eben schon einige Skripte habe, die diese Klasse verwenden, und da wird nur die komplette SQL Abfrage übergeben.
Aber das ganze vorher schon zu Filtern wär sicher am besten.

Da muss ich mir nochmal was überlegen...

Danke,
sc.
 
So,
nun schreib ich den Beitrag schon zum zweiten mal (schei** Firefox).
Also, hab mich jetzt doch relative schnell durchgerungen die ganzen Variablen die SQL übergeben werden, schon im Vorfeld zu überprüfen.
Dazu hab ich mir eine Funktion geschrieben:
PHP:
    function sqlGET($arg) {
        return mysql_real_escape_string($_GET[$arg]);
    }
Doch wenn ich jetzt mal eine Injection simuliere,
PHP:
index.php?test=';Select * from test
und mir die Ausgabe der Funktion anschaue, macht er bei mir drei \\\ hin, statt nur eins.
PHP:
\\\';Select * from test
An was könnte das liegen? Oder ist das Sinn der Sache?

Desweiteren hab ich mir die gleiche Funktion nochmal für POST umgebastelt, da ja auch User auf meiner Seite per Post etwa Beiträge des GB in die Datenbank schreiben. Die Daten kommen dabei aus einem WYSIWYG Editor. Wenn ich das ganze jetzt aber per mysql_real_escape_string maskiere, und der Benutzer in seinem Beitrag auch desöfteren ein ' oder " verwendet (oder gar SQL Abfragen veröffentlichen will), dann werden doch auch die ' oder " mit maskiert, was wieder zu unschönen Darstellungen im Browser führt. (Bsp.: Hallo das ist ein Blindtext der auch \"blindtext\" heißt)
Jetzt meine Frage: Wie könnte man das ganze umgehen?

Danke,
sc.
 
Probier mal den folgenden Code um die Variable, welche den GB Eitnrag ausgibt:

Code:
$gbeintrag = stripslashes(htmlspecialchars($variable));

Damit werden die Slashes entfernt und die HTML Tags, falls die jemand eingeben will nicht umgewandelt sondern nur angezeigt.
Ist nur so eine Vermutung, also keine Gewähr auf Sicherheit und Funktionstüchtigkeit! :p

edit: Achso hab grad gemerkt, dass du ja über einen editor die Einträge formatieren lässt, ich nehme also an, dass du da auch HTML Code mitgeben wirst, dann ist meine Antwort also für die Katz.
 
Zuletzt bearbeitet:
Zurück