Slashes und die Sache mit addslashes, stripslashes, htmlspecialchars und htmlspecialchars_decode

NTDY

Erfahrenes Mitglied
Guten Abend in die Runde,

ich wollte mich von Experten mal rückversichern, ob mein Gedankengang korrekt ist.
Es geht um Eingaben im Formular, Senden per Post und Ausgabe im Frontend.

Wenn ich per POST etwas in der Datenbank speichere, dann

return addslashes(htmlspecialchars($sString))

Wenn ich aus der Datenbank etwas lese und auf der Webseite ausgebe, dann

return htmlspecialchars_decode(stripslashes($sString));

Wenn ich aus der Datenbank etwas lese und bspw. im CKEditor bearbeite, dann

return htmlspecialchars_decode(stripslashes($sString));

Wenn ich die Bearbeitung im CKEditor speichere und als POST schicke, dann wieder

return addslashes(htmlspecialchars($sString))
 

basti1012

Erfahrenes Mitglied
Das Thema gab es schon öfters, und man findet immer mehr verschiedene Antworten im Netz.
Wenn ich per POST etwas in der Datenbank speichere, dann

return addslashes(htmlspecialchars($sString))
Da nimmt man z. B. das
PHP:
mysqli_real_escape_string($mysqli, $_POST['bla']);
Oder du lernst PDO, das ist sicherer , gerade für Anfänger.

Wenn ich aus der Datenbank etwas lese und auf der Webseite ausgebe, dann

return htmlspecialchars_decode(stripslashes($sString));
Aus der Datenbank nutzt man
PHP:
htmlspecialchars($aus_db);

Zu den addslashes() kann ich nicht viel zu sagen.

Keine Ahnung, was du mit addslashes() willst. Das ist ein altes Relikt aus PHP 4 Zeiten und heutzutage komplett irrelevant.
Dann noch etwas Input
Kontextwechsel

sql-injection

Mehr kann ich auch nicht dazu sagen, mehr Input können dir die Profis geben
 

NTDY

Erfahrenes Mitglied
Danke erst einmal für deine Hilfe.
Das Thema gab es schon öfters, und man findet immer mehr verschiedene Antworten im Netz.
Das mit den verschiedenen Antworten ist ja das Verwirrende weil je nach Kontext wohl immer etwas anderes gilt.
Da nimmt man z. B. das
PHP:
mysqli_real_escape_string($mysqli, $_POST['bla']);
Oder du lernst PDO, das ist sicherer , gerade für Anfänger.
Genau das habe ich bereits. Allerdings sagen diverse Scanner, dass auf dem Weg dahin noch etwas passieren kann. Ich lasse zuerst POST und GET durch

addslashes(htmlspecialchars(trim($sString)));
maskieren. Es kann ja passieren, dass Formulareingaben noch nicht in die DB können und ich die bisherigen Ergebnisse in ein Formular packen muss. Erst beim Reinschieben in die DB nehme ich PDOStatement::bindValue() mit \PDO::pARAM_STR, \PDO::pARAM_INT und all dem Gedöns.

Aus der Datenbank nutzt man
PHP:
htmlspecialchars($aus_db);
Mhh.
Und jetzt kommt wohl der Part den ich nicht verstehe. Wenn ich Sachen aus der DB, die ja zuvor maskiert wurden ausgeben will, dann nutze ich

return htmlspecialchars(stripslashes($sString));
Der macht mir dann aus aus dem Datenbankinhalt:

AppData\\Temp\\Userfiles {<br />

ein AppData\Temp\Userfiles {<br />
Das ist korrekt. Wenn ich allerdings die Datenbankinhalte in einem Formular, bspw. <input type="text"> bearbeiten will dann muss ich

return htmlspecialchars_decode(stripslashes($sString));

da mir sonst das Formular AppData\\Temp\\Userfiles {&lt;br /&gt; ausgibt und nicht
AppData\Temp\Userfiles {<br />. Würde ich htmlspecialchars_decode(stripslashes()) machen, dann würde ich beim Absenden per POST immer mehr und immer mehr Backslashes erhalten.

So jedenfalls nach meinem derzeitigen Kenntnisstand. Oder?


Zu den addslashes() kann ich nicht viel zu sagen.


Dann noch etwas Input
Kontextwechsel

sql-injection

Mehr kann ich auch nicht dazu sagen, mehr Input können dir die Profis geben
 

NTDY

Erfahrenes Mitglied
Dake für die Links. :) Die Probleme liegen wo in der Differenzierung zwischen DB-Inhalte in Formularen bearbeiten oder ausgeben.
 

NTDY

Erfahrenes Mitglied
Ich habe nochmal genauer geschaut.

Für Daten aus DB in Formular:
return htmlentities(htmlspecialchars_decode(stripslashes($sString)));

Für Daten aus DB in Backend
return strip_tags(htmlspecialchars_decode(stripslashes($sString)));

Für Daten aus DB in Frontend
return htmlspecialchars_decode(stripslashes($sString));
 

basti1012

Erfahrenes Mitglied
Wäre mal schön wenn ein Profi was dazu sagt.
Das habe ich noch nie gebraucht
Code:
return htmlentities(htmlspecialchars_decode(stripslashes($sString)));
und das
Code:
return htmlspecialchars_decode(stripslashes($sString));
hat für mich nur ein Sinn wenn ich vorher alles mit
Code:
htmlspecialchars();
In der DB gespeichert habe.

Aber wie gesagt , ist nicht mein Thema und freue mich auf Antwort von den Profis.

Hier wurde auch schon mal drüber gesprochen
[Erledigt] htmlspecialchars vor Speicherung in DB? - php.de
 

Neue Beiträge