Door
Peter Overdam
op 17-11-2012 11:36
gewijzigd op 17-11-2012 18:06
4.622 views
Beste Mensen,
Ik ben momenteel bezig om mijn scripts te beveiligen tegen SQL injection en dit is is allemaal vrij nieuw voor mij, echter krijg ik telkens een fatal error en ik zie niet direct waar de fout zit. Ik krijg de volgende melding.
Fatal error: Call to undefined function mres() in /var/www/vhosts/7/125190/webspace/httpdocs/mijndomein.nl/modules/account/activate-account.php on line 17
Line 17 is hieronder afgebeeld:
<?php
$check_sql = "SELECT id, serial FROM companion WHERE id=". intval($_GET['id']) ." AND serial='". mres($_GET['serial']) ."' ";
?>
@Marco
Bij het maken van een account geeft hij netjes aan dat hij is aangemaakt in de DB wordt het account ook correct ingevoerd in mijn mail krijg ik de volgende url.
Heb je ooit is in een framework/classes gekeken ?!? (denk het niet, en anders niet echt goed waarscheinlijk)
want daar worden/kunnen ook functies door andere functies en in functies aangeroepen worden en gebruikt worden.
En Classes nemen andere classes hun eigenschappen over en functies.
En nee dat is niet 1 spijker met 2 hamers slaan!
Ehm.., even denken...
Jij begint even hier over frameworks/classes en doet een aanname dat ik daar waarschijnlijk niets vanaf weet.
Als we het dan toch over classes/frameworks hebben, dan kan ik je vertellen dat ik daar redelijk in thuis ben.
De function zoals de TS het hier in dit topic heeft staan is totaal irrelevant want zoals ik het nu zie staat het niet in een framework. En als dat al zo is, dan is het nog een nutteloze.
We hebben het over een _escape_string() funtction die niet eens gebruikt moet worden in zijn probleem, laat staan dat deze dan zoals bedoeld gebruikt word.
Een class is uitbreidbaar, niet bedoeld voor een ding.
In dit geval gaat het over een funtction escapen dan moet het dus een systeem zijn die dus gebruikt kan worden voor meerdere types b.v. mysql/postgress/mssql/sqllite e.d..
In het geval van de TS is het alleen een mysql dus een totale nutteloze function en kan hij het beter doen rechtstreeks in de query.
Dus zoals hij het nu heeft staan is denk ik beter dan wat het was.
Dat hij van mij nog niet helemaal klopt is true, had even niet verder gekeken hoe het verder geïmplementeerd moest worden, maar dacht dat ik al voldoende hints had gegeven om hem verder te helpen.
Helaas had ik even geen tijd meer om hem verder te helpen. Dus vandaar dat het lijkt op een wilde gok. ;)
Ah ik zie hem al (de php junkie is geen sql junkie), verander regel 15 in:
<?php
$check_result = $mysqli->query("select id, serial from companion where id = ". intval($_GET['id']) . " and serial = '".$serial_data. "' limit 1");
?>
@Marco
Even ter controle script ziet er nu als volgt uit:
<?php
echo '<pre>'.print_r($_GET, true).'<pre>';
// dit stukje weg halen of uit zetten als je hem online/'live' zet...
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Get the needed data
if( isset($_GET['id']) && isset($_GET['serial']) ):
$sql = 'update companion set active = 1 where id = '.(int)$_GET['id'].' limit 1';
$result = $mysqli->query($sql);
if ( $mysqli->affected_rows() == 1 ):
echo 'Uw account is geactiveerd';
else: // else als er niks is bijgewerkt in de database...
echo 'Er ging is verkeerd tijdens het updata van de database, probeer het opnieuw a.u.b';
endif;
else: // else als er iets verkeerds is met de activatie serial...
echo 'Verkeerde activatie gegevens, controleer de url in uw activatie mail.';
endif;
else: // else if het id en/of de serial zijn niet correct...
echo 'Een van de mee gegeven data is incorrect, controlleer uw invoer!.';
endif;
else: // else als er geen id of serial gevonden word...
echo 'Er is iets niet goed gegaan neem contact op met de webmaster';
endif;
Fatal error: Call to undefined method mysqli::affected_rows() in /var/www/vhosts/7/125190/webspace/httpdocs/mijndomein.nl/modules/account/activate-account.php on line 28