Lege database row.
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
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
waarom werkt het inloggen via een externe webserver wel en krijg ik lokaal een row met lege waardes?
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
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.