Lege database row.
Beste,
Ik heb het volgende script als er een gebruiker aangemaakt word (ik weet dat ik tegen mysql injections moet beveiligen!):
Als ik lokaal registreer, dan worden alles netjes in de database ingevoegd. Maar als een vriend van mij registreert,
dan krijg ik dit: Klik
Iemand een idee hoe dit kan?
Groet,
Pascal
Ik heb het volgende script als er een gebruiker aangemaakt word (ik weet dat ik tegen mysql injections moet beveiligen!):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$username = $_POST['username'];
$email = $_POST['email'];
$password = hash("sha256", f($_POST['password']));
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$ip = $_SERVER['REMOTE_ADDR'];
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
if($mysql->query("SELECT account FROM users WHERE account='$aid'")->num_rows >0){
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
if($mysql->query("SELECT account FROM users WHERE account='$aid'")->num_rows >0){
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
if($mysql->query("SELECT account FROM users WHERE account='$aid'")->num_rows >0){
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
if($mysql->query("SELECT account FROM users WHERE account='$aid'")->num_rows >0){
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
}
}
}
}
$mysql->query("INSERT INTO `users`(`username`, `role`, `email`, `password`, `firstname`, `lastname`, `account`, `ip`)
VALUES ('$username',,'1''$email','$password','$firstname','$lastname','$aid','$ip')");
$email = $_POST['email'];
$password = hash("sha256", f($_POST['password']));
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$ip = $_SERVER['REMOTE_ADDR'];
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
if($mysql->query("SELECT account FROM users WHERE account='$aid'")->num_rows >0){
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
if($mysql->query("SELECT account FROM users WHERE account='$aid'")->num_rows >0){
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
if($mysql->query("SELECT account FROM users WHERE account='$aid'")->num_rows >0){
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
if($mysql->query("SELECT account FROM users WHERE account='$aid'")->num_rows >0){
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
}
}
}
}
$mysql->query("INSERT INTO `users`(`username`, `role`, `email`, `password`, `firstname`, `lastname`, `account`, `ip`)
VALUES ('$username',,'1''$email','$password','$firstname','$lastname','$aid','$ip')");
Als ik lokaal registreer, dan worden alles netjes in de database ingevoegd. Maar als een vriend van mij registreert,
dan krijg ik dit: Klik
Iemand een idee hoe dit kan?
Groet,
Pascal
Doe je wel iets aan validatie?
>> Maar als een vriend van mij registreert, dan krijg ik dit: Klik
Kun je hier niet neerzetten (in code of een plaatje) wat je krijgt. Ik klik liever niet zomaar op een vreemde link.
Kun je hier niet neerzetten (in code of een plaatje) wat je krijgt. Ik klik liever niet zomaar op een vreemde link.
Gewijzigd op 23/09/2015 21:44:21 door Ozzie PHP
Ozzie PHP op 23/09/2015 21:43:49:
>> Maar als een vriend van mij registreert, dan krijg ik dit: Klik
Kun je hier niet neerzetten (in code of een plaatje) wat je krijgt. Ik klik liever niet zomaar op een vreemde link.
Kun je hier niet neerzetten (in code of een plaatje) wat je krijgt. Ik klik liever niet zomaar op een vreemde link.
Ik had al effe gekeken aangezien ik toch op Linux draai maar het is administratie pagina van de upload waarop je niets kunt klikken of downloaden.
--
Maar als ik die code zo bekijk:
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
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
<?php
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
// kan dit niet beter zo worden?
$aid = mt_rand(); // of direct in de query zetten.
// en ik snap ook het hele idee van dit is?
if($mysql->query("SELECT account FROM users WHERE account='$aid'")->num_rows >0){
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
if($mysql->query("SELECT account FROM users WHERE account='$aid'")->num_rows >0){
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
if($mysql->query("SELECT account FROM users WHERE account='$aid'")->num_rows >0){
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
if($mysql->query("SELECT account FROM users WHERE account='$aid'")->num_rows >0){
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
}
}
}
}
// als het echt niet anders kan..:
for($i=0; $i<4; $i++){
if($mysql->query("SELECT account FROM users WHERE account='".($aid=mt_rand())."'")->num_rows == 0){){
// do in ieder geval wat nuttigs;
// deze code, je "account" kolom in je DB is een "$aid" en dus een random number?
$mysql->query("INSERT INTO `users`(`username`, `role`, `email`, `password`, `firstname`, `lastname`, `account`, `ip`)
VALUES ('$username',,'1''$email','$password','$firstname','$lastname','$aid','$ip')");
}
}
?>
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
// kan dit niet beter zo worden?
$aid = mt_rand(); // of direct in de query zetten.
// en ik snap ook het hele idee van dit is?
if($mysql->query("SELECT account FROM users WHERE account='$aid'")->num_rows >0){
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
if($mysql->query("SELECT account FROM users WHERE account='$aid'")->num_rows >0){
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
if($mysql->query("SELECT account FROM users WHERE account='$aid'")->num_rows >0){
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
if($mysql->query("SELECT account FROM users WHERE account='$aid'")->num_rows >0){
$aid = rand(000,999) . "." . rand(000,999) . "." . rand(000,999);
}
}
}
}
// als het echt niet anders kan..:
for($i=0; $i<4; $i++){
if($mysql->query("SELECT account FROM users WHERE account='".($aid=mt_rand())."'")->num_rows == 0){){
// do in ieder geval wat nuttigs;
// deze code, je "account" kolom in je DB is een "$aid" en dus een random number?
$mysql->query("INSERT INTO `users`(`username`, `role`, `email`, `password`, `firstname`, `lastname`, `account`, `ip`)
VALUES ('$username',,'1''$email','$password','$firstname','$lastname','$aid','$ip')");
}
}
?>
Betekend $aid misschien "auto id"? Je moet in je tabel een id kolom hebben en die als primary key zetten en op auto increment. Dit is jouw unieke row ID per user, (userid).
Zoals je zegt, de sql injectie word aan gewerkt en dit is prima, maar hier moet je eigenlijk eerst gaan over nadenken hoe je dit wilt oplossen ook voor andere scripts.
Want anders schrijf je je code 2x omdat van alles gecorrigeerd moet gaan worden.
Gewijzigd op 23/09/2015 22:54:00 door Johan K
Bedankt allemaal voor de oplossen, maar mijn vraag is eigenlijk nog steeds niet beantwoord;
waarom werkt het inloggen via een externe webserver wel en krijg ik lokaal een row met lege waardes?
waarom werkt het inloggen via een externe webserver wel en krijg ik lokaal een row met lege waardes?
Ik denk dat de oplossing voor je probleem ligt in het debuggen.
Simpele echo's plaatsen die even de inhoud van de variabelen laten zien. Dan achterhalen wat er anders gaat bij jouw vriend als bij jou.
ook kun je simpel een hele array op het scherm tonen en zelfs de $_POST array:
Simpele echo's plaatsen die even de inhoud van de variabelen laten zien. Dan achterhalen wat er anders gaat bij jouw vriend als bij jou.
ook kun je simpel een hele array op het scherm tonen en zelfs de $_POST array:
Maar ook als IK gewoon naar de externe webserver (versio) ga dan werkt het registreren ook niet
Als ik het script lees, zie ik dat deze onvolledig is. Wat je hebt gepost, -moet- werken en het maakt niet uit of het lokaal of extern is.
Waar het aan zou kunnen liggen is jouw "$ip" aangezien een lokaal ip aderes "::1" als ipv6 is en niet "192.168.1.1 / localhost" is. misschien heb je ergens in jouw code zo'n validatie staan en dat gaat niet werken.
Waar het aan zou kunnen liggen is jouw "$ip" aangezien een lokaal ip aderes "::1" als ipv6 is en niet "192.168.1.1 / localhost" is. misschien heb je ergens in jouw code zo'n validatie staan en dat gaat niet werken.




