Door
Peter Overdam
op 17-11-2012 11:36
gewijzigd op 17-11-2012 18:06
4.623 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']) ."' ";
?>
De functie die ik gekregen zoals hieronder staat nog niet in het script want denk namelijk niet dat ik dit zo copy/paste in me script kan zetten zonder in mijn script aanpassingen te maken.
<?php
function mres($string)
{
return mysql_real_escape_string($string);
}
?>
Het script waar het in moet komen staat hieronder afgebeeld:
<?php
// Get the needed data
if(isset($_GET['id']) && isset($_GET['serial'])){
// Check Db for existance
$check_sql = "SELECT id, serial FROM companion WHERE id=". intval($_GET['id']) ." AND serial='". mres($_GET['serial']) ."' ";
$check_result = $mysqli -> query($check_sql);
$row_cnt = $check_result->num_rows;
if($row_cnt==true){
$sql = "UPDATE companion SET active='1' WHERE id='". intval($_GET['id']) ."'";
$result = $mysqli -> query($sql);
print('Uw account is geactiveerd');
} else {
print ('Verkeerde activatie gegevens, controleer de url in uw activatie mail.');
}
} else {
print('Er is iets niet goed gegaan neem contact op met de webmaster');
}
?>
Het volledig beveiligen van een script is voor mij vrij nieuw heb veel voorbeelden op php.net gezien en op andere sites maar op de 1 of andere manier wil ik het maar niet begrijpen.
De functie die ik gekregen zoals hieronder staat nog niet in het script want denk namelijk niet dat ik dit zo copy/paste in me script kan zetten zonder in mijn script aanpassingen te maken.
Als het niet in het script staat, dan is het toch niet zo raar dat je een melding krijgt?
Zoek op internet: er is met Google heel veel te vinden. En van zelf doen/zoeken leer je het meest.
Dus waarom niet proberen (zorg voor een goede backup)?
@Obelix en Idefix
Je moet eens weten hoe vaak ik scripts heb bekeken en heb uitgeprobeerd maar op de 1 of andere manier lukt het mij niet. Daarbij komt nog eens kijken dat ik ontzettend moeilijk leer. Ik heb PHP geleerd van iemand die dacht dat ie het kon en heb vele op de fouten manier geleerd waar ik via dit forum ben achter gekomen.
dat het MYSQL_REAL_ESCAPE_STRING in het script moet staan dat snap ik nog wel maar mijn vraag is meer hoe ik het in het script toepas. Moet ik het gewoon in het script pleuren en $string vervangen (in mijn geval) door $check_sql of iets anders.......
Het is sowieso niet handig om een function te schrijven voor een function.
Je gaat toch ook niet met 2 hamers een spijker proberen in een plank te slaan. :)
<?php
$check_sql = "SELECT id,
serial
FROM companion
WHERE
id = '". intval($_GET['id']) ."'
AND
serial = '". mysqli_real_escape_string($_GET['serial']) ."' ";
?>
@Marco
Bedankt voor het voorbeeld zal hier ff mee aan de slag gaan. Wat betreft die function die kreeg ik via een forumlid en wist niet hoe ik dit moest gebruiken kreeg alleen te horen dat het makkelijker was.
Ik ga er vanmiddag even lekker mee stoeien en hou jullie op de hoogte ervan.
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.