Enter behouden met htmlspecialchars()

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nick kuijpers

nick kuijpers

04/10/2014 20:31:56
Quote Anchor link
Hallo,

Voordat ik iets in de database zet doe ik altijd htmlspecialchars();
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$comments
= trim(stripslashes(htmlspecialchars(mysqli_real_escape_string($con, $_POST['comments']))));
?>

Dit zorgt er helaas voor dat enters worden omgezet in rn ik wil graag dat een enter een enter blijft hoe kan ik dit als beste doen?
Mvg,
Nick
 
PHP hulp

PHP hulp

26/12/2024 02:08:00
 
- Ariën  -
Beheerder

- Ariën -

04/10/2014 20:36:04
Quote Anchor link
waarom doe je stripslashes?
 
Nick kuijpers

nick kuijpers

04/10/2014 20:38:39
Quote Anchor link
Had een keer ergens gelezen dat je zo iets goed moest filteren
 
- Ariën  -
Beheerder

- Ariën -

04/10/2014 22:17:34
Quote Anchor link
Je moet wel weten waarvoor je het gaat gebruiken. Als je het niet weet dan heb je er weinig aan.
 
Phpnuke r

phpnuke r

04/10/2014 22:24:22
Quote Anchor link
Je moet voornamelijk filteren op (hoge!)komma's: "' (omdat deze in de code bijvoorbeeld worden gebruikt om een string weer te geven. Vaak gaat dit fout.)

Persoonlijk ben ik er geen held in, maar ik denk dat stripslashes al meer dan voldoende is.

Dan nog zou ik even aangeven door middel van html5 (pattern) wat wel en niet mag. Op deze manier voorkom je dat de gebruiker dingen opslaat die je niet toestaat. Dit word dan omgezet in rare fratsels als \'of \". (inplaats van zonder de slash er voor)
Gewijzigd op 04/10/2014 22:27:12 door phpnuke r
 
Peter  Flos

Peter Flos

04/10/2014 23:06:08
Quote Anchor link
Kijk eens naar nl2br
Gewijzigd op 04/10/2014 23:06:42 door Peter Flos
 
Willem vp

Willem vp

05/10/2014 00:54:03
Quote Anchor link
Phpnuke r op 04/10/2014 22:24:22:
Dan nog zou ik even aangeven door middel van html5 (pattern) wat wel en niet mag. Op deze manier voorkom je dat de gebruiker dingen opslaat die je niet toestaat.

Een pattern is leuk als service aan de gebruiker, maar je moet het nooit gebruiken als security-maatregel voor je scripting, omdat het zeer eenvoudig te omzeilen is.
 
Wouter J

Wouter J

05/10/2014 10:00:10
Quote Anchor link
En al deze acties, op mysql_real_escape_string na, behoor je uit te voeren wanneer je de gegevens uit de database ophaalt, niet bij het invoegen.

Stripslashes moet je hier trouwens gewoon helemaal weghalen.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

05/10/2014 10:26:12
Quote Anchor link
gewoon alles op utf8 instellen en prepared statements gebruiken. En dan vooral al die functies zoals stripslashes, mysql_real_escape_string, htmlspecialchars never en nooit meer gebruiken.

met alles bedoel ik: je HTML, je Collatie van je database, tabellen en kolommen, en je databaseconnectie.
 
Ivo P

Ivo P

05/10/2014 12:49:51
Quote Anchor link
Dat utf-8 verhaal gaat wel op voor tekens als é en zo, maar dan zou je niet htmlspecialchars(), maar htmlentities() gebruiken.

htmlspecialchars() is een functie die je nodig hebt op het moment dat je iets weergeeft: in een echo of eventueel als je een html-mail samenstelt, of een pdf document.

In elk geval niet bij het opslaan.
htmlspecialchars() heb je vooral nodig om < en > te kunnen weergeven.

Ja, het lijkt misschien handig om dat dan maar direct te doen als je de data opslaat in de database, maar dan beperk je jezelf direct in het gebruik van de data: je kun er niet meer zo maar een plain-tekst mailtje van maken, of een word-document van opstellen. of wat, als je de gebruiker de invoer later wilt kunnen laten aanpassen: dan is een < ineens een &lt; geworden.


--
mysqli-real-escape-string is nodig, om veilig te zijn voor met name ' in je invoer die de query doet mislukken (of erger: iets anders dan bedoeld laat doen)

stripslashes() doet die real-escape actie weer ongedaan!
stripslashes() stamt nog uit een tijd dat er zo'n leuke magic-quotes optie bestond die alle post- en get-parameters van slashes voorzag. Als het goed is, staat dat nu uit op je server.
Zo niet: dan zorgen dat dat wel zo wordt, ipv symptoombestrijding.

trim() kan op zich niet zo'n kwaad: spaties aan begin en eind verwijderen. (mits je zeker weet dat dat geen zinnige spaties zijn.
 
Nick kuijpers

nick kuijpers

05/10/2014 19:41:49
Quote Anchor link
Bedankt allemaal!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.