[discussie-topic] Input- en output in PHP
Zoals de titel al zegt gaan we hier (hopelijk) een leuke discussie starten over het uitspugen en inslikken van gebruikers-data.
Bekende vormen zijn voor het filteren van data zijn: mysql_real_escape_string() & htmlspecialchars() maar welke gebruik jij allemaal om je site veilig te laten draaien zonder dat de gebruiker er iets van merkt?
Gewijzigd op 27/02/2011 21:00:40 door Bram Boos
alles wat naar de database gaat gooi ik een mysql_real_escape_string() over
XD
Gewijzigd op 27/02/2011 21:22:26 door Jasper DS
Code (php)
1
2
3
4
2
3
4
<?php
$str = "Blaat";
echo mysql_real_escape_string(htmlspecialchars(nl2br(stripslashes(trim($str)))));
?>
$str = "Blaat";
echo mysql_real_escape_string(htmlspecialchars(nl2br(stripslashes(trim($str)))));
?>
Het waren er nog meer maar ik weet het (gelukkig) niet meer...
Gewijzigd op 27/02/2011 21:39:24 door Bram Boos
PHP Jasper op 27/02/2011 21:21:24:
Ben jij Bram Boos? Volgens mij niet. Mijn mening op zijn (te) algemene stelling is toevallig gewoon op php.net te vinden.
Bram Boos op 27/02/2011 20:56:18:
Zoals de titel al zegt gaan we hier (hopelijk) een leuke discussie starten over het uitspugen en inslikken van gebruikers-data.
Hij wilt hier over discussiëren met ons.
Karl Karl op 27/02/2011 21:49:31:
Zou je misschien zelf willen lezen:
Ben jij Bram Boos? Volgens mij niet. Mijn mening op zijn (te) algemene stelling is toevallig gewoon op php.net te vinden.
PHP Jasper op 27/02/2011 21:53:03:
lees je even karl?
Hij wilt hier over discussiëren met ons.
Bram Boos op 27/02/2011 20:56:18:
Zoals de titel al zegt gaan we hier (hopelijk) een leuke discussie starten over het uitspugen en inslikken van gebruikers-data.
Hij wilt hier over discussiëren met ons.
Zou je misschien zelf willen lezen:
PHP Jasper op 27/02/2011 21:21:24:
Ben jij Bram Boos? Volgens mij niet. Mijn mening op zijn (te) algemene stelling is toevallig gewoon op php.net te vinden.
En:
Bram Boos op 27/02/2011 20:56:18:
(...)
Bekende vormen zijn voor het filteren van data zijn: mysql_real_escape_string() & htmlspecialchars() maar welke gebruik jij allemaal om je site veilig te laten draaien zonder dat de gebruiker er iets van merkt?
Bekende vormen zijn voor het filteren van data zijn: mysql_real_escape_string() & htmlspecialchars() maar welke gebruik jij allemaal om je site veilig te laten draaien zonder dat de gebruiker er iets van merkt?
Verder ben jij volgens mij nog steeds geen Bram Boos of wel?
Data veilig de database in doe je met _real_escape_string (*1), alle andere functies zijn niet van toepassing, deze komen pas aan bod als je de gegevens gaat tonen.
*1 of je gebruikt PDO/MysqlI met bind variabelen, dan zit je kwa veilig gegevens opslaan ook goed.
Noppes, je vergeet dat je ook naar int kunt typecasten.
Pim - op 27/02/2011 21:43:24:
Wat is het verschil ervan behalve dat de quotes bij de echo weg zijn
Ik weet toevallig dat Prestashop, OScommerce en Wordpress ook van XHP gebruikmaken. Of het echt sneller is en of het echt veel nut heeft weet ik niet..
@karl, zucht. Is er nou geen 1 topic, geen 1 persoon, geen 1 ding waar jij niet negatief op reageert?
Wouter J op 27/02/2011 22:57:21:
@karl, zucht. Is er nou geen 1 topic, geen 1 persoon, geen 1 ding waar jij niet negatief op reageert?
Dus dan gaan we maar op de man spelen?
Als jij een integer of float verwacht als data, zie dan dat je die post type cast.
escapen is dan absoluut niet nodig.
Ook bv. niet wanneer je een paswoord met md5 codeert (md5 geeft een string terug die nooit problemen kan geven voor injectie).
Je kan zeggen: beter een keer te veel escapen dan te weinig.
Wel ... beter genoeg dan te veel.
------
O ja, nu we toch bezig zijn.
sprintf()
(Ja, de c(++ / #) mens in mij komt even naar boven)
Dit is een functie die ideaal is om sql strings op te bouwen.
Het doet wat denken aan prepared statements. In je sql vertel je welk formaat het veld moet hebben; de waardes zelf hou je buiten de string, als extra parameters. Als dat numeriek is, wordt het automatisch gecast.
Je kan ook heel gemakkelijk afronden op een bepaald aantal cijfers na de komma; je kan leading zero's regelen (ideaal om datetime strings te bouwen); ...
Een voorbeeld
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
// uiteraard zou normaal $_POST uit gegevens van een gepost formulier komen.
$_POST = array(
'meetresultaat' => 13.56,
'opmerking' => 'Niets op te merken',
'id' => 17,
);
$sql = sprintf("
UPDATE metingen
SET
meetresultaat = %f,
opmerking = '%s'
WHERE id = %d
LIMIT 1
"
, $_POST['meetresultaat'] // wordt automatisch gecast naar float
, mysql_real_escape_string($_POST['opmerking'])
, $_POST['id'] // wordt automatisch gecast naar int
);
echo '<pre>'. $sql .'</pre>';
?>
// uiteraard zou normaal $_POST uit gegevens van een gepost formulier komen.
$_POST = array(
'meetresultaat' => 13.56,
'opmerking' => 'Niets op te merken',
'id' => 17,
);
$sql = sprintf("
UPDATE metingen
SET
meetresultaat = %f,
opmerking = '%s'
WHERE id = %d
LIMIT 1
"
, $_POST['meetresultaat'] // wordt automatisch gecast naar float
, mysql_real_escape_string($_POST['opmerking'])
, $_POST['id'] // wordt automatisch gecast naar int
);
echo '<pre>'. $sql .'</pre>';
?>
Gewijzigd op 28/02/2011 12:45:23 door Kris Peeters
Het was niet echt de bedoeling om te vragen hoe maar meer om jullie meningen en of jullie nog extra (zelfgemaakte) functies gebruiken voor het filteren van data...
Jordi kroon op 27/02/2011 22:39:59:
Wat is het verschil ervan behalve dat de quotes bij de echo weg zijn
Pim - op 27/02/2011 21:43:24:
Wat is het verschil ervan behalve dat de quotes bij de echo weg zijn
Automatische output escaping. Verder is het technisch gezien natuurlijk heel interessant.