Lege database row.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

23/09/2015 20:11:58
Quote Anchor link
Beste,

Ik heb het volgende script als er een gebruiker aangemaakt word (ik weet dat ik tegen mysql injections moet beveiligen!):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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')");

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
Gewijzigd op 23/09/2015 20:16:24 door
 
PHP hulp

PHP hulp

29/03/2024 16:18:15
 
Frank Nietbelangrijk

Frank Nietbelangrijk

23/09/2015 21:13:36
Quote Anchor link
Doe je wel iets aan validatie?
 
Ozzie PHP

Ozzie PHP

23/09/2015 21:43:49
Quote Anchor link
>> 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.
Gewijzigd op 23/09/2015 21:44:21 door Ozzie PHP
 
Johan K

Johan K

23/09/2015 22:36:04
Quote Anchor link
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.

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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')"
);
  }
 }


?>


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
 

25/09/2015 18:05:51
Quote Anchor link
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?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

25/09/2015 18:12:37
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
echo '<pre>';
print_r($_POST);
?>
 

25/09/2015 18:18:28
Quote Anchor link
Maar ook als IK gewoon naar de externe webserver (versio) ga dan werkt het registreren ook niet
 
Johan K

Johan K

25/09/2015 18:59:57
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.