Fatal error na toepassen intval & mres
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:
Code (php)
1
2
3
2
3
<?php
$check_sql = "SELECT id, serial FROM companion WHERE id=". intval($_GET['id']) ." AND serial='". mres($_GET['serial']) ."' ";
?>
$check_sql = "SELECT id, serial FROM companion WHERE id=". intval($_GET['id']) ." AND serial='". mres($_GET['serial']) ."' ";
?>
Hoop dat iemand mij hiermee verder kan helpen.
Greetz
Peter
Gewijzigd op 17/11/2012 18:06:22 door Peter Overdam
want de functie mres bestaat niet tenzij je hem zelf hebt gemaakt.
En ik wist niet dat het mres en intval nodig is met mysql_real_escape_string
Greetz
Peter
En staat die functie ook in het script?
Het script waar het in moet komen staat hieronder afgebeeld:
Code (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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?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');
}
?>
// 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.
Peter Overdam op 17/11/2012 12:26:16:
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)?
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.
Op php.net (http://php.net/manual/en/function.mysql-real-escape-string.php) wordt ik niet veel wijzer met de scripts die daar worden getoont. En op de nieuwe manier via php.net (http://www.php.net/manual/en/mysqli.real-escape-string.php) raak ik het spoor helemaal bijster.
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.......
Greetz
Peter
Je gaat toch ook niet met 2 hamers een spijker proberen in een plank te slaan. :)
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$check_sql = "SELECT id,
serial
FROM companion
WHERE
id = '". intval($_GET['id']) ."'
AND
serial = '". mysqli_real_escape_string($_GET['serial']) ."' ";
?>
$check_sql = "SELECT id,
serial
FROM companion
WHERE
id = '". intval($_GET['id']) ."'
AND
serial = '". mysqli_real_escape_string($_GET['serial']) ."' ";
?>
- Controleer of ze worden mee gegeven.
- Controleer of ze goed binnen komen.
- Controleer of ze de correcte waarde bevatten.
kijk anders een door dit bovenaan de pagina te zetten:
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.
Greetz
Peter
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!
Gewijzigd op 17/11/2012 14:14:28 door Marco PHPJunky
Die functie kun je eenvoudig (bovenin) copy/paste in je script.
Heb mijn script veranderd en krijg de volgende foutmelding
Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in /var/www/vhosts/7/125190/webspace/httpdocs/mijndomein.nl/modules/account/activate-account.php on line 16
Verkeerde activatie gegevens, controleer de url in uw activatie mail.
Jij gaf ook op dat ik het volgende bovenaan mijn script moest plaatsen
Maar zoiets had ik al erin zitten alleen in een iets andere vorm
En ik krijg de volgende waardes gewoon er netjes uit
Array
(
[page] => account-activeren
[id] => 88
[serial] => G37bh9HnAB6daclONEkCeM84JKop1P5jiIFmD20Lgf
)
Gewijzigd op 17/11/2012 18:06:56 door Peter Overdam
Je hebt waarschijnlijk het stukje van Bart v B gepakt en geplakt...
(ja die functie/code die je erin hebt staan is eigenlijk hetzelfde als die van mij. en zo te zien krijg je een mooi resultaat binnen in de array die ik zie..)
probeer het anders eens zo:
Had inderdaad stukje code van Bart gepakt leek net of het bij jou bericht hoorde.
Maar ik geef het op ik snap er kennelijk geen *** van en ga er ook zeker niet uitkomen ik zie gewoon niet waar alles hoort en hoe alles werkt in ieder geval bedankt voor alle hulp.
Greetz
Peter
Gewijzigd op 17/11/2012 15:22:27 door Marco PHPJunky
Oh ik wil ook niet dat alles voor mij gedaan wordt ik heb daar juist een bloed hekel aan maar iemand heeft mij op de verkeerde manier PHP geleerd beetje op ze jan boeren fluitje en daar kom ik nu telkens achter als een script niet naar behoren werkt en aangezien ik al moeilijk leer is het dubbel zo moeilijk voor mij
Mijn script ziet er als volgt uit
Code (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
27
28
29
30
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
<?php
echo '<pre>'.print_r($_GET, true).'<pre>';
error_reporting(E_ALL);
ini_set('display_errors', 1);
// 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 = '". mysqli_real_escape_string($_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');
}
?>
echo '<pre>'.print_r($_GET, true).'<pre>';
error_reporting(E_ALL);
ini_set('display_errors', 1);
// 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 = '". mysqli_real_escape_string($_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');
}
?>
Wat moet ik doen op dit nu correct en veilig te laten werken.
zodat we/ik kan zijn waar het eventueel nog fout gaat...
Het volgende krijg ik te zien:
Array
(
[page] => account-activeren
[id] => 88
[serial] => G37bh9HnAB6daclONEkCeM84JKop1P5jiIFmD20Lgf
)
Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in /var/www/vhosts/7/125190/webspace/httpdocs/mijndomein.nl/modules/account/activate-account.php on line 12
Verkeerde activatie gegevens, controleer de url in uw activatie mail.
Gewijzigd op 17/11/2012 18:07:39 door Peter Overdam
probeer het eens zo:
(het kan nog een heel stukje beter en eventueel uitgebreider maar eerst maar eens kijken of dit werkt en kijken of je het eventueel snapt)
Code (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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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
41
<?php
echo '<pre>'.print_r($_GET, true).'<pre>';
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Get the needed data
if( isset($_GET['id']) && isset($_GET['serial']) ):
if ( is_numeric($_GET['id']) && !is_null($_GET['id']) && (int)$_GET['id'] && !empty($_GET['id']) && !is_null($_GET['serial']) && !empty($_GET['serial']) && is_string($_GET['serial']) ):
// contoleer de serial...
$serial_data = $mysqli->real_escape_string($_GET['serial']);
// Check Db for existance
$check_sql = 'select id, serial from companion where id = '. (int)$_GET['id'] .' and serial = '.$serial_data.' limit 1';
$check_result = $mysqli->query($check_sql);
$row_cnt = $check_result->num_rows;
if( $row_cnt == 1 ):
$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;
?>
echo '<pre>'.print_r($_GET, true).'<pre>';
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Get the needed data
if( isset($_GET['id']) && isset($_GET['serial']) ):
if ( is_numeric($_GET['id']) && !is_null($_GET['id']) && (int)$_GET['id'] && !empty($_GET['id']) && !is_null($_GET['serial']) && !empty($_GET['serial']) && is_string($_GET['serial']) ):
// contoleer de serial...
$serial_data = $mysqli->real_escape_string($_GET['serial']);
// Check Db for existance
$check_sql = 'select id, serial from companion where id = '. (int)$_GET['id'] .' and serial = '.$serial_data.' limit 1';
$check_result = $mysqli->query($check_sql);
$row_cnt = $check_result->num_rows;
if( $row_cnt == 1 ):
$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;
?>
Greets
Gewijzigd op 17/11/2012 15:53:42 door Marco PHPJunky
Krijg de volgende fout melding
Array
(
[page] => account-activeren
[id] => 88
[serial] => G37bh9HnAB6daclONEkCeM84JKop1P5jiIFmD20Lgf
)
Notice: Trying to get property of non-object in /var/www/vhosts/7/125190/webspace/httpdocs/mijndomein.nl/modules/account/activate-account.php on line 18
Verkeerde activatie gegevens, controleer de url in uw activatie mail.
Gewijzigd op 17/11/2012 18:07:19 door Peter Overdam