[PHP] Slashes waar komen ze vandaan ?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
Als mijn inschrijf formulier niet goed wordt ingevult _POST ik de input terug en stop hem als value weer in de box zodat de gebruiker het niet nog een keer hoeft te tikken.

Mijn versimpelde code:

post.php:
PHP:
1
2
3
4
5
6
7
8
<html>
<body>
<form name="inschrijven" action="check.php" method="POST" style="margin:0px;">
<input name="nickname" type="text" size="20" value="<?PHP echo $nickname; ?>">
 <input type="submit" name="Submit" value="  check  ">
</form>
</body>
</html>


check:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?PHP
$_POST['nickname'] = $nickname;

if ( strlen($nickname) < 10 ) { ?>
<form name="form_fouten" action="post.php" method="POST">
<input name="nickname" type="hidden" value="<?PHP echo $nickname; ?>">
<script>
document["form_fouten"].submit();
</script>

<?PHP
} else {
    echo 'database connectie';
}

?>


Nu komt het probleem: bij invoering van een apolstrof( ' ) , en de sting in kleiner dan 10, wordt met POST $nickname teruggestuurd. Echter komen er steeds \\\ voor de apolstrof.

Dus bij invoer van: test's
Is de string die terug gestopt wordt is de box: test\\\'s

Ik snap niet waarom, ik doe helemaal niets met addslashes of stripslashes dus waarom blijft php niet gewoon van mn string af !

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
ik zou even iets over magic quotes opzoeken.

http://www.php.net/manual/en/security.magicquotes.php

[ Voor 40% gewijzigd door Michali op 23-02-2005 17:54 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
Ik zit op een server die niet van mij is dus ik kan die magic quotes niet uitzetten.

Het probleem leek me makkelijk op te lossen met stripslashes, maar dan hou ik alsnog één backslash over...

Ook: de PHP handleiding zegt dat een apolstof 1 één backslash krijgt....maar ik krijg er 3 !

Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Dat komt omdat er twee keer door PHP aangezeten wordt, omdat je het naar een nieuwe pagina post. Dus je \' wordt vervolgens nog eens ge-escaped. Vandaar: \\\'. Als je het probleem 1 keer oplost dan moet het goed zijn.

Acties:
  • 0 Henk 'm!

  • Vampier
  • Registratie: Februari 2001
  • Laatst online: 20-04-2015

Vampier

poke-1,170

Je kunt magic quotes uitzetten in je .htaccess

Acties:
  • 0 Henk 'm!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

Of zorgen dat je stripslashed, iedere keer dat je een gpc (get, post, cookie) waarde importeerd in je script. Ik doe zoiets:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
//blaat.php
$action = fSanitise($_GET['action'], "word"); //sanitise the action

//common.php
function fSanitise($input, $type) {
    
    if(get_magic_quotes_gpc() == 1) { $output = stripslashes($input); }
    
        // input sanitising

    return $output; 
}
Zo zorg ik dat ik directe controle heb over mijn input sanitising, en welke waardes er van buiten komen :) .

DM!


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
je kunt ook in 1 keer doen voor alles waar gpc met z'n fikken aanzit

(src=php.net/get-magic-quotes-gpc helegaar onderaan)

als je werkt vanuit gpc_magic_quotes= 'Off':
PHP:
1
2
3
4
5
6
7
8
9
10
if (get_magic_quotes_gpc()) unfck_gpc();

 function unfck($v) {
   return is_array($v) ? array_map('unfck', $v) : stripslashes($v);
 }

 function unfck_gpc() {
   foreach (array('POST', 'GET', 'REQUEST', 'COOKIE') as $gpc)
   $GLOBALS["_$gpc"] = array_map('unfck', $GLOBALS["_$gpc"]);
 }

als je werkt vanuit gpc_magic_quotes= 'On': (dus niet jouw situatie)
PHP:
1
2
3
4
5
6
7
8
9
10
if (!get_magic_quotes_gpc()) unfck_gpc();

 function unfck($v) {
   return is_array($v) ? array_map('unfck', $v) : addslashes($v);
 }

 function unfck_gpc() {
   foreach (array('POST', 'GET', 'REQUEST', 'COOKIE') as $gpc)
   $GLOBALS["_$gpc"] = array_map('unfck', $GLOBALS["_$gpc"]);
 }

[ Voor 15% gewijzigd door Genoil op 23-02-2005 19:31 ]


Acties:
  • 0 Henk 'm!

Verwijderd

verytallman schreef op woensdag 23 februari 2005 @ 17:47:
Ik snap niet waarom, ik doe helemaal niets met addslashes of stripslashes dus waarom blijft php niet gewoon van mn string af !
Je bent niet de enige met dat probleem. Op de Tweakers.net frontpage duiken ook regelmatig dat \\\'soort\\\' overbodige slashes op ;)

Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
bigbeng schreef op woensdag 23 februari 2005 @ 18:30:
Dat komt omdat er twee keer door PHP aangezeten wordt, omdat je het naar een nieuwe pagina post. Dus je \' wordt vervolgens nog eens ge-escaped. Vandaar: \\\'. Als je het probleem 1 keer oplost dan moet het goed zijn.
Als ik het goed begrijp staan de magic quotes aan als een soort beveiliging. Zeg maar dat automatisch addslashes wordt toegepast.... toch ?

Nu heb ik een oplossing voor de variabele die ik terug krijg:
PHP:
1
echo stripslashes(stripslashes(htmlspecialchars($nickname)));

2x stripslashes dus...zie quote hierboven. Het komt nu ook goed te staan, dus zonder \ en met de apolstrof. Maar is dit een goede methode ?

Edit: bij invoeren van bob's als username staat erin de database ook precies bob's.
Maar dit is toch niet gevaarlijk ? Omdat magic quotes aanstaat wordt er toch automatisch een backslash toegevoegd mocht ik ik query uitvoeren zoals :
PHP:
1
mysql_query (" SELECT * FROM leden WHERE nickname=$username ")

[ Voor 19% gewijzigd door verytallman op 26-02-2005 00:18 ]


Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
Weet niemand of dit dus veilig is?

Acties:
  • 0 Henk 'm!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

Nee, gpc_magic_quotes voegt de slashes toe bij het "binnenkrijgen" van Get, Post en Cookie waarden. Als je dus met stripslashes die weer weghaalt, dan heb je geen beveiliging tegen SQL-injection meer over. En htmlspecialchars gaat je niet genoeg daartegen beschermen :) . Gebruik mysql_escape_string oid :) . Maar als je zoekt kom je genoeg tegen over SQL injection, ook hier op GoT :) .

DM!


Acties:
  • 0 Henk 'm!

  • verytallman
  • Registratie: Augustus 2001
  • Laatst online: 18-08 18:12
Misschien heb je niet het hele verhaal gelezen, of ik snap je niet, want:
die stripslashes gebeurt op de pagina waarin de box wordt ingevult en niet voordat de gegevens in de DB gaan. Pas op de volgende pagina (op deze pagina komen de POST variabelen binnen) gaan de gegevens de DB in , en op die pagina gebruik ik géén stripslashes. Dus met magic quotes aan worden op die pagina automatisch backslashes toegevoegd.

Acties:
  • 0 Henk 'm!

Verwijderd

Geef je zelf antwoord op je vraag? ;)
Door magic quotes worden idd automatisch backslashes toegvoegd.
Maar beter kun je een functie maken die kijkt of magic quotes aan staat.
Zo ja, voeg backslashes toe.
Zo nee, doe niks.
Als je namelijk van server veranderd dan hoef je niet je script te veranderen als magic_quotes off/on staat.
Zoals meer mensen hebben gezegd: Zoek is op Sql injection, daar is genoeg over te vinden.

[ Voor 15% gewijzigd door Verwijderd op 27-02-2005 09:27 ]

Pagina: 1