[php] sanitize functie

Pagina: 1
Acties:

Onderwerpen


  • Qtacz
  • Registratie: Februari 2010
  • Laatst online: 03-07-2024
Ik heb een functie gemaakt om de input die naar de database gaat "zuiver" te maken.
Nu vroeg ik me af wat er nog aan verbeterd kon worden?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function sanitize($value)
{
    $filters    =   array
                    (
                        FILTER_SANITIZE_STRING          =>  array
                                                            (
                                                                FILTER_FLAG_ENCODE_AMP,
                                                                FILTER_FLAG_ENCODE_HIGH,
                                                                FILTER_FLAG_ENCODE_LOW
                                                            ),
                        FILTER_SANITIZE_MAGIC_QUOTES    =>  array()
                    );

    foreach($filters as $filter => $flags)
    {
        $value = filter_var($value, $filter, $flags);
    }
    
    return $value;
}


Alvast bedankt voor de raad.

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Wat is er mis met mysql_real_escape_string?

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 22:52

MueR

Admin Tweakers Discord

is niet lief

FILTER_SANITIZE_MAGIC_QUOTES
Whuh? Magic quotes moet je niet filteren, die moet je uitzetten. Verder heb ik eigenlijk geen idee wat je nou bedoelt met "filteren" en "zuiver maken". Wat wil je bereiken?

Anyone who gets in between me and my morning coffee should be insecure.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:22

crisp

Devver

Pixelated

MueR schreef op donderdag 25 februari 2010 @ 09:41:
[...]

Whuh? Magic quotes moet je niet filteren, die moet je uitzetten. Verder heb ik eigenlijk geen idee wat je nou bedoelt met "filteren" en "zuiver maken". Wat wil je bereiken?
FILTER_SANITIZE_MAGIC_QUOTES doet, in tegenstelling tot de naam, juist gewoon addslashes() 8)7

maar sanitizing is verder natuurlijk heel iets anders dan correcte escaping, dus ik vraag me ook af wat de topicstarter probeert te bereiken...

Intentionally left blank


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Anders introduceren ze lang en breed nadat iedereen magic quotes stom vind een constante met magic quotes in de naam welke het gedrag nadoet. 8)7 :X |:( WTF overkill.

Ten overvloede: mysql_real_escape_string is de Echte oplossing als je een String wilt Escapen voor een Mysql query. :P En dat doe je dan in de correcte context.

[ Voor 33% gewijzigd door Voutloos op 25-02-2010 10:10 ]

{signature}


  • Qtacz
  • Registratie: Februari 2010
  • Laatst online: 03-07-2024
FILTER_SANITIZE_MAGIC_QUOTES is dan mss wel overkill :p
FILTER_SANITIZE_STRING zet alle karakters met ascii waarde kleiner dan 32 en groter dan 127 om naar html codes als ik me nie vergis.
De bedoeling is dus om een "veilige" input in de database te zetten.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:22

crisp

Devver

Pixelated

Qtacz schreef op donderdag 25 februari 2010 @ 10:05:
FILTER_SANITIZE_MAGIC_QUOTES is dan mss wel overkill :p
Je zal toch moeten escapen als je het naar de database wegschrijft, maar addslashes() is daar niet de juiste methode voor.
FILTER_SANITIZE_STRING zet alle karakters met ascii waarde kleiner dan 32 en groter dan 127 om naar html codes als ik me nie vergis.
De bedoeling is dus om een "veilige" input in de database te zetten.
Maar HTML encoding hoef je pas te doen op het moment dat je het als HTML output. Ik zou dat niet zo in de database opslaan tenzij je daar echt goede redenen voor hebt. Daarbij is het compleet onzinnig om alle non-ASCII waardes te veranderen in entiteiten; gewoon htmlspecialchars() is doorgaans afdoende.

Intentionally left blank


  • Qtacz
  • Registratie: Februari 2010
  • Laatst online: 03-07-2024
hmm ok, bedankt voor het advies :)

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 22:52

MueR

Admin Tweakers Discord

is niet lief

crisp schreef op donderdag 25 februari 2010 @ 09:49:
FILTER_SANITIZE_MAGIC_QUOTES doet, in tegenstelling tot de naam, juist gewoon addslashes() 8)7
* MueR zucht eens diep
PHP blijft verbazen

Anyone who gets in between me and my morning coffee should be insecure.


  • Qtacz
  • Registratie: Februari 2010
  • Laatst online: 03-07-2024
Waarom zijn al die filter functies er dan?
Als het toch veel gemakkelijker gaat ^^

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 22:52

MueR

Admin Tweakers Discord

is niet lief

Omdat PHP nog steeds allerlei oude, deprecated, overbodige, ranzige en "verboden" rotzooi ondersteunt omdat ze het vroeger een keer gedaan hebben. Om de oude scripts niet stuk te maken (deden ze het maar, meteen al die vervuiling van het net af) en om programmeurs die vastgeroest zitten in dat soort ranzige praktijken een alternatief te geven.

Anyone who gets in between me and my morning coffee should be insecure.


  • Qtacz
  • Registratie: Februari 2010
  • Laatst online: 03-07-2024
aha :D

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:22

crisp

Devver

Pixelated

filter_var is inderdaad ook gewoon een stompzinnige toevoeging die veel functionaliteit die al bestaat in PHP onderbrengt in een behemoth functie met vage syntax en nog vagere constants. Daarnaast zit het ook nog eens vol bugs en is de documentatie van de verschillende filters zwaar onder de maat...

Intentionally left blank


  • Qtacz
  • Registratie: Februari 2010
  • Laatst online: 03-07-2024
Facepalm dan maar :p

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Mwah, de 2 grootste WTF's zijn eigenlijk vooral dat:

1 - de filter_vars methode hardstikke nieuw is (sinds 5.2). Dus eigenlijk gaat het excuus van backward compatibility niet op.
2 - je met 'filter' ook kunt valideren en dan een gefilterde waarde of een boolean terug krijgt |:( |:(

Punt 2 wordt extra hilarisch wanneer je een boolean met waarde false wilt valideren middels FILTER_VALIDATE_BOOLEAN.

Echt, hoe kun je zoiets bedenken....

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Je kunt ook mysqli of pdo gebruiken dan kun je gewoon dingen doen als:
$pdo->execute("select * from taUser wher Username=?", $_GET['username'])

Je hoeft dan niks te escapen of te controleren, dat gebeurt allemaal al (XSS moet je nog wel zelf tegengaan). Al is jouw vraag mij niet helemaal duidelijk

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Dat is in een DL helemaal niet aan de orde; daar zorgt je view voor.

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


  • Qtacz
  • Registratie: Februari 2010
  • Laatst online: 03-07-2024
Dan maar terug naar de tekentafel om het zo maar te zeggen :p
Pagina: 1