[PHP]Afdrukken variabele drukt naam af in plaats van inhoud*

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met het 'beveiligen' van een script door te zorgen dat sql injections niet meer mogelijk zijn. Op php.net staat een stukje code die hier voor zou moeten zorgen:
PHP:
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
<?php
// Quote variable to make safe
function quote_smart($value)
{
   // Stripslashes
   if (get_magic_quotes_gpc()) {
       $value = stripslashes($value);
   }
   // Quote if not integer
   if (!is_numeric($value)) {
       $value = "'" . mysql_real_escape_string($value) . "'";
   }
   return $value;
}

// Connect
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
   OR die(mysql_error());

// Make a safe query
$query = sprintf("SELECT * FROM users WHERE user=%s AND password=%s",
           quote_smart($_POST['username']),
           quote_smart($_POST['password']));

mysql_query($query);
?> 

Zie: http://nl3.php.net/manual...ql-real-escape-string.php

Daar heb ik zelf het volgende van gemaakt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
function prvinj($value) {
    if (get_magic_quotes_gpc()) {
        $value = stripslashes($value);
    }
    if (!is_numeric($value)) {
        $value = "'" . mysql_real_escape_string($value) . "'";
    }
    return $value;
}
$id = 5;
$id = prvinj($id);

Als ik vervolgens $id print, print hij dit:
code:
1
'$id'

Dus niet de inhoud 5, maar de variabele naam.

Ik kom er niet echt uit wat ik fout doe...

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Als ik vervolgens $id print, print hij dit:
Hoe print je dat?

Hoi zielnemer :>

[ Voor 52% gewijzigd door GlowMouse op 17-07-2005 17:11 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 21:01
En hoe print je dat dan? Als ik het lokaal test (met PHP4, magic quotes uit) dan print echo $id; gewoon 5.

edit:
Grrr, gloeimuis was eerder.

[ Voor 16% gewijzigd door Soultaker op 17-07-2005 17:10 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Zo:
PHP:
1
echo $id;

Acties:
  • 0 Henk 'm!

Verwijderd

Je moet je gewoon je parameters nooit (lees: zo min mogelijk) als onderdeel van je query gebruiken.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Zeker weten dat je niet dit hebt staat?
PHP:
1
echo '$id';

Dat is namelijk AFAIK het enige dat je hier fout kan hebben gedaan....

Overigens pas ik je titel ook even aan. Om te beginnen heb je een probleem met PHP, niet met SQL. Verder heeft je probleem ook nog eens niets met SQL injecties te maken, maar gewoon met het afdrukken van een variabele...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nee er staat echt echo $id; ....

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wazig, ik heb het net lokaal getest met php4 (op de server draait php5), en daar werkt het wel 8)7

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Verwijderd schreef op zondag 17 juli 2005 @ 17:14:
Nee er staat echt echo $id; ....
Om welke versie van PHP gaat het?
Kun je met debugging kijken wat er ondertussen gebeurt?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<? 
function prvinj($value) {
echo "Functie prvinj ontvangt " . $value . "<br>\n";
    if (get_magic_quotes_gpc()) {
        $value = stripslashes($value);
echo "Na stripslashes is dit " . $value . "<br>\n";
    }
    if (!is_numeric($value)) { 
        $value = "'" . mysql_real_escape_string($value) . "'"; 
echo "Na mysql_real_escape_string is dit " . $value . "<br>\n";
    }
echo "prvinj retourneert " . $value . "<br>\n";
    return $value; 
} 
$id = 5;
echo "\$id is " . $id . "<br>\n";
$id = prvinj($id);
echo "prvinj retourneerde " . $id . "<br>\n";
?>

[ Voor 16% gewijzigd door GlowMouse op 17-07-2005 17:20 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

CreateIt: Wil je de edit-knop gebruiken als je wat toe te voegen hebt aan een post? :)

[ Voor 7% gewijzigd door NMe op 17-07-2005 17:20 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:18

crisp

Devver

Pixelated

Overigens vereist mysql_real_escape_string ook dat je een connectie hebt naar je database, dus zo los zonder ergens een mysql_connect gaat dit niet werken voor non-numerieke values ;)

Intentionally left blank

Pagina: 1