1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | function secureValue($value){ if(trim($value) == ""){ $new_value = "NULL"; return $new_value; } if(is_array($value) || is_object($value)){ if (!get_magic_quotes_gpc()){ $new_value = "'". addslashes(serialize($value)) ."'"; } else{ $new_value = "'". serialize($value) ."'"; } } if(is_string($value)){ if (!get_magic_quotes_gpc()){ $new_value = "'". addslashes($value) ."'"; } else{ $new_value = "'". $value ."'"; } } if(is_float($value)){ $new_value = "'". $value ."'"; } if(is_int($value)){ $new_value = $value; } if(strtoupper($value) == "NULL"){ $new_value = $value; } return $new_value; } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | switch (gettype($value)) { case 'boolean': return $value ? '1' : '0'; case 'integer': case 'double': return (string)$value; case 'string': return "'".addslashes($value)."'"; case 'array': case 'object': return "'".addslashes(serialize($value))."'"; default: //'resource', 'NULL', 'unknown type' return 'NULL'; } } |
remove.php:quote:Op woensdag 15 maart 2006 20:19 schreef jeroen2497 het volgende:
Ik vroeg me zo af, is het voldoende om Magic Quotes in php.ini op true te zetten?
Of is het dan nog steeds mogelijk om SQL injection uit te voeren, zo ja, hoe???
1 2 3 4 5 6 7 8 9 | $id = $_GET["id"]; $sql = "delete from blaat where id = " . $id; $result = mysql_query($sql); etc... ?> |
was specifiek voor mijn datamodel.quote:Op donderdag 16 maart 2006 13:35 schreef SuperRembo het volgende:
Waarom maakt secureValue NULL van een lege string of een string met alleen spaties?
gettype kon ik nog niet, maar dat is idd beter in mijn ogenquote:En een float wordt wordt een string (met quotes) maar een integer blijft een integer?
Je code is niet echt optimaal, een switch op gettype($value) lijkt me hier makkelijker.
Ik zou zelf als magic quotes aan zou staan meteen in het begin alle slashes strippen.
[ code verwijderd ]
Je kunt er idd nette query's mee maken, maar...quote:Op donderdag 16 maart 2006 20:47 schreef smesjz het volgende:
(s)printf is ook veilige manier om gare invoer tegen te gaan en het zorgt ook goed leesbare code omdat je ook de maximaal toegestane (string) lengte kan meegeven en het kan dus ook type conversie doen.
Zie ook: http://nl2.php.net/manual/en/function.sprintf.php
Dat klopt, maar je kan het ook gebruiken om bijv. XSS tegen te gaan en dan maakt het niet zo veel uit.quote:Op donderdag 16 maart 2006 21:13 schreef SuperRembo het volgende:
[..]
Je kunt er idd nette query's mee maken, maar...
Aan het opgeven van een maximaal toegestane lengte voor een string heb je niets. Je moet een string eerst inkorten, dan pas addslashes toepassen. Als je het andersom doet kan het gebeuren dat er tussen de \ en ' afgekapt wordt, dan gaat je query alsnog op z'n bek. Ook wordt de string te kort afgekapt, hij telt de \'s ook mee.
Waarom gebruik je niet gewoon mysql_real_escape_string()quote:Op donderdag 16 maart 2006 06:45 schreef rickmans het volgende:
persoonlijk zou ik iedere var die je in je query gebruikt afvangen door zoiets als:
[ code verwijderd ]
cross-db in principe, al ga ik hem aanpassen aangezien de gettype functie een stuk mooier isquote:Op donderdag 16 maart 2006 22:42 schreef Roönaän het volgende:
[..]
Waarom gebruik je niet gewoon mysql_real_escape_string()
(Of is jouw code neergezet als een cross-db solution?)
Is het niet logischer dat je aan die functie ook het verwachtte type meegeeft? Wat heb je er aan als je script een integer verwacht en hij krijgt een geescapte string of een float terug? Dan gaat je query als nog stuk...quote:Op donderdag 16 maart 2006 22:50 schreef rickmans het volgende:
[..]
cross-db in principe, al ga ik hem aanpassen aangezien de gettype functie een stuk mooier is.
Wat mij betreft niet, die functie is in mijn geval een stukje van de db layer en persoonlijk vind ik dat die alleen maar de input moet afhandelen, de classes die gebruik maken van de db layer zouden voor de datatype validatie moeten zorgen.quote:Op donderdag 16 maart 2006 22:59 schreef smesjz het volgende:
[..]
Is het niet logischer dat je aan die functie ook het verwachtte type meegeeft? Wat heb je er aan als je script een integer verwacht en hij krijgt een geescapte string of een float terug? Dan gaat je query als nog stuk...
Het voordeel van die functie is dat een string inclusief quotes wordt teruggegeven, of null als de input null is. Misschien is het beter om aparte functies voor string en numerieke data te maken.quote:Op donderdag 16 maart 2006 22:42 schreef Roönaän het volgende:
[..]
Waarom gebruik je niet gewoon mysql_real_escape_string()
(Of is jouw code neergezet als een cross-db solution?)
|
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |