[PHP] Bestandslocatie slashes worden gestript

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • WoBBeL
  • Registratie: Juni 2004
  • Laatst online: 11-09 13:01
Ik ben al even aan het Googlen maar ik zal denk ik wel de verkeerde zoektermen gebruiken 8)7

Wij gebruiken een ontzettend 'domme' FAQ in een MySQL database die door PHP wordt weergegeven/gevuld. Waar ik echter vaak tegenaan loop is dat als wij een FAQ artikel toevoegen in de database met een Windows file location dat deze gestript wordt bij het tonen.

Ik voeg in het veld "uitleg" (type TEXT) een waarde toe met daarin het volgende: "je kunt de file vinden in C:\windows\system32\"

Ik insert deze data in de database met addslashes tegen SQL injectie. De data blijft gelijk.

Ik haal de data weer op met stripslashes maar dan krijg ik het volgende terug: "je kunt de file vinden in C:windowssystem32"

Dit is opzich logisch, daar is de functie stripslashes voor :+ maar hoe voorkom ik dat bij normale slashes? Als ik handmatig zelf C:\\windows\\system32\\ toevoeg aan de database en het dan ophaal met stripslashes dan gaat het wel goed maar ik kan alle FAQ gebruikers die toevoegen/bewerken niet uitleggen dat ze 2 slashes gebruiken.

Nu heb ik bedacht om str_replace te gebruiken en alle \ te vervangen door \\ maar is er ook een nette standaard oplossing voor?

Acties:
  • +3 Henk 'm!

  • Rensjuh
  • Registratie: Juli 2007
  • Laatst online: 09:00
Even simpel gezegd, geen addslashes gebruiken O-) .

https://www.php.net/manual/en/function.addslashes.php
The addslashes() is sometimes incorrectly used to try to prevent SQL Injection. Instead, database-specific escaping functions and/or prepared statements should be used.
mysql_real_escape_string
mysqli_real_escape_strin

Of beter nog, PDO met prepared statements.
De PDO functies zorgen ook voor beveiliging tegen SQL injection.

Dit is wat ik (nog) ken.
Ongetwijfeld zijn er functies en/of opties bijgekomen die beter zijn.
Ben benieuwd hiernaar :)

[ Voor 8% gewijzigd door Rensjuh op 04-09-2020 10:04 ]

PV Output


Acties:
  • +1 Henk 'm!

  • WoBBeL
  • Registratie: Juni 2004
  • Laatst online: 11-09 13:01
Zelfde resultaat helaas :(

Acties:
  • +1 Henk 'm!

  • borft
  • Registratie: Januari 2002
  • Laatst online: 15-09 16:33
omg, 1995 belde, en wilde zijn escaping code terug ;)

Als je prepared statements gebruikt, zoals @Rensjuh al aangeeft, gaat het wel goed, en hoef je ook niet te strippen als je de data weer uitleest. Je moet natuurlijk nog wel even sanitizen voor eventuele html en andere ongein.

Acties:
  • 0 Henk 'm!

  • borft
  • Registratie: Januari 2002
  • Laatst online: 15-09 16:33
heb je wel je
code:
1
stripslashes()


weggehaald?

Acties:
  • 0 Henk 'm!

  • WoBBeL
  • Registratie: Juni 2004
  • Laatst online: 11-09 13:01
borft schreef op vrijdag 4 september 2020 @ 10:06:
[...]


heb je wel je
code:
1
stripslashes()


weggehaald?
:+

Bij invoeren data: mysqli_real_escape_string
Bij ophalen data: niks :+ (of htmlentities, ligt eraan waar ik het gebruik ;) )

Ik kom nog uit de PHP 4 tijd hé :P

[ Voor 30% gewijzigd door WoBBeL op 04-09-2020 10:09 ]


Acties:
  • 0 Henk 'm!

  • jeroen3
  • Registratie: Mei 2010
  • Laatst online: 12:39
Volgens mij moet je er html escapes van maken.
\
\

Daar zijn vast sanitation functies voor. htmlentities?

Acties:
  • 0 Henk 'm!

  • WoBBeL
  • Registratie: Juni 2004
  • Laatst online: 11-09 13:01
@jeroen3 met eerder genoemde functies is dat niet nodig. Hij escaped alleen de string waar nodig en slaat de onnodige slashes dus niet op en je hoeft dus ook niks te clearen of apart op te slaan.

Acties:
  • 0 Henk 'm!

  • Rensjuh
  • Registratie: Juli 2007
  • Laatst online: 09:00
1. Hoe komt het nu in je database te staan?
2. Haal je het vervolgens op en gooi je er dan nog eens stripslashes overheen?

PV Output


Acties:
  • 0 Henk 'm!

  • WoBBeL
  • Registratie: Juni 2004
  • Laatst online: 11-09 13:01
@Rensjuh zonder slashes opgeslagen en ik haal het dus ook op zonder stripslashes

Acties:
  • +3 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
jeroen3 schreef op vrijdag 4 september 2020 @ 10:12:
Volgens mij moet je er html escapes van maken.
\
\
Nope.

For the love of God, kap met mysql_real_escape_string en addslashes / stipslashes en al die ellende. Sloop dat er om te beginnen allemaal uit. En gebruik dan in hemelsnaam Parametrized Queries.

[ Voor 6% gewijzigd door RobIII op 04-09-2020 12:52 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1