Registreren username check
Ik ben bezig met een login/registreer/etc systeempje te maken/leren maken, maar nu loop ik tegen een probleempje aan. Ben nu bezig met het registreer gedeelte en dat werkt zo goed als, alleen als ik wil controleren of de username al in gebruik is werkt dat niet. Hij zegt dat de username is gebruik is ookal gebruik ik een username die niet in gebruik is.. Dit is het stuk waar hij de username na kijkt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$checkusername = $_POST["username"];
$checkusernamesql = "SELECT * FROM users WHERE username='$checkusername'";
$resultcheck = $conn->query($checkusernamesql);
$error = array();
if (empty($_POST["username"])){ //Check username
$error[] = "Vul je gebruikersnaam in!";
} else {
if(($_POST["username"])!=($resultcheck)){ //Check of username al bestaat
$error[] = "Gebruikersnaam al in gebruik!";
} else {
$username = $_POST["username"];
}
}
?>
$checkusername = $_POST["username"];
$checkusernamesql = "SELECT * FROM users WHERE username='$checkusername'";
$resultcheck = $conn->query($checkusernamesql);
$error = array();
if (empty($_POST["username"])){ //Check username
$error[] = "Vul je gebruikersnaam in!";
} else {
if(($_POST["username"])!=($resultcheck)){ //Check of username al bestaat
$error[] = "Gebruikersnaam al in gebruik!";
} else {
$username = $_POST["username"];
}
}
?>
Ik weet niet of het zo werkt maar ik heb het het zelfde gedaan als bij het gedeelte dat hij het wachtwoord checkt.
Greetz.
Toevoeging op 12/02/2017 10:38:40:
Het is gelukt thnx!
Ja de sql-injection protectie ga ik nu doen. Ik wilde eerst het script maken.
Met deze functie kan je dus NIET afleiden of een record al bestaat. Alleen of het gelukt is of niet.
Gewijzigd op 12/02/2017 10:41:24 door - Ariën -
$username = mysql_real_escape_string($conn, $_POST["username"]); Klopt dat?
En dan zie ik het liefst de OO-versie gebruiken met ...->real_escape_string(..)
Gewijzigd op 12/02/2017 10:52:02 door - Ariën -
Kan jij een sql injecteren? En zou je kunnen kijken of ik het nu goed heb beveiligd? Zo ja pb ik je de link wel even
Laat je code maar zien. Of je hebt het goed toegepast, of niet.
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
include("config/database.php");
if(isset($_POST["submit"])){
$ip = $_SERVER['REMOTE_ADDR'];
$checkusername = $_POST["username"];
$checkusernamesql = "SELECT * FROM users WHERE username='".$checkusername."'";
$resultcheck = $conn->query($checkusernamesql);
$error = array();
if (empty($_POST["username"])){ //Check username
$error[] = "Vul je gebruikersnaam in!";
} else {
if(mysqli_num_rows($resultcheck)>=1){
$error[] = "Gebruikersnaam al ingebruik!";
} else {
$username = mysqli_real_escape_string($conn, $_POST["username"]);
}
}
if (empty($_POST["name"])){ //Check name
$error[] = "Vul je naam in!";
} else {
$name = mysqli_real_escape_string($conn, $_POST["name"]);
}
if (empty($_POST["password"])){ //Check password
$error[] = "Vul je wachtwoord in!";
} else {
if(($_POST["password"])!=($_POST["password2"])){ //check password is het zelfde
$error[] = "Je wachtwoord is niet het zelfde";
} else {
$password = mysqli_real_escape_string($conn, hash("sha512", $_POST["password"]));
}
}
if (empty($_POST["email"])){ //Check email
$error[] = "Vul een Email in!";
} else {
if (filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)){ //Check geldige email
$email = mysqli_real_escape_string($conn, $_POST["email"]);
} else {
$error[] = "Vul een geldig Email in!";
}
}
if (empty($error)){
$sql = ("INSERT INTO users (ip, username, name, password, email) VALUES ('$ip', '$username', '$name', '$password', '$email')");
$result = $conn->query($sql);
if (!$result){
echo "Error";
} else {
echo "Geregistreerd!";
}
} else {
echo "Error: ";
foreach ($error as $key => $value) {
echo $value;
echo " ";
}
}
}
?>
include("config/database.php");
if(isset($_POST["submit"])){
$ip = $_SERVER['REMOTE_ADDR'];
$checkusername = $_POST["username"];
$checkusernamesql = "SELECT * FROM users WHERE username='".$checkusername."'";
$resultcheck = $conn->query($checkusernamesql);
$error = array();
if (empty($_POST["username"])){ //Check username
$error[] = "Vul je gebruikersnaam in!";
} else {
if(mysqli_num_rows($resultcheck)>=1){
$error[] = "Gebruikersnaam al ingebruik!";
} else {
$username = mysqli_real_escape_string($conn, $_POST["username"]);
}
}
if (empty($_POST["name"])){ //Check name
$error[] = "Vul je naam in!";
} else {
$name = mysqli_real_escape_string($conn, $_POST["name"]);
}
if (empty($_POST["password"])){ //Check password
$error[] = "Vul je wachtwoord in!";
} else {
if(($_POST["password"])!=($_POST["password2"])){ //check password is het zelfde
$error[] = "Je wachtwoord is niet het zelfde";
} else {
$password = mysqli_real_escape_string($conn, hash("sha512", $_POST["password"]));
}
}
if (empty($_POST["email"])){ //Check email
$error[] = "Vul een Email in!";
} else {
if (filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)){ //Check geldige email
$email = mysqli_real_escape_string($conn, $_POST["email"]);
} else {
$error[] = "Vul een geldig Email in!";
}
}
if (empty($error)){
$sql = ("INSERT INTO users (ip, username, name, password, email) VALUES ('$ip', '$username', '$name', '$password', '$email')");
$result = $conn->query($sql);
if (!$result){
echo "Error";
} else {
echo "Geregistreerd!";
}
} else {
echo "Error: ";
foreach ($error as $key => $value) {
echo $value;
echo " ";
}
}
}
?>
Dit is alleen de php code, moet alleen nog reCAPTCHA er in maken.
Gewijzigd op 12/02/2017 11:14:43 door marco -
Als je na je query gebruikt, dan verniel je je data alleen maar met escapeings-karakters, dan dat je het gebruikt om deze te beschermen.
Verder raad ik ook aan om NIET de procedurele (mysqli_****()) en de object-georienteerde functies ($mysqli->********)DOORELKAAR te gebruiken. Dit zorgt vaak voor incompatibiliteit met elkaar, en gezien de notatie in beiden gevallen wel eens afwijkt zorgt het ook vaak voor verwarring.
Mijn voorkeur gaat uit naar de notitie met de pijl, en dus object georienteerd. Als je dan iets wilt escapen, dan gebruik je dit:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$username = $conn->real_escape_string($_POST["username"]); // eerst escapen!
$sql = "SELECT * FROM users WHERE username='".$checkusername."'";
$result = $conn->query($checkusernamesql); // query uitvoeren, en vervolgens wat ermee doen.
?>
$username = $conn->real_escape_string($_POST["username"]); // eerst escapen!
$sql = "SELECT * FROM users WHERE username='".$checkusername."'";
$result = $conn->query($checkusernamesql); // query uitvoeren, en vervolgens wat ermee doen.
?>
Met de object-georiënteerde versie van MySQLi kan je een hoop dingen meer doen. Je kan zelfs nieuwe classes maken om te extenden als je bijvoorbeeld nieuwe functies erbij wilt maken, of functies (methods) wilt uitbreiden.
Gewijzigd op 12/02/2017 11:36:00 door - Ariën -
quote:
Code (php)
1
2
3
2
3
<?php
$result = $conn->query($checkusernamesql); // query uitvoeren, en vervolgens wat ermee doen.
?>
$result = $conn->query($checkusernamesql); // query uitvoeren, en vervolgens wat ermee doen.
?>
hier die ik ook iets mee, namelijk kijken of de gebruikersnaam al ik gebruik is
En in de OO-versie is het $result->num_rows om te kijken hoeveel records er zijn.
Gewijzigd op 12/02/2017 11:38:18 door - Ariën -
Wat is dan het beste om die te gebruiken? bij de if (empty($_POST["username"])){ ?
Gewijzigd op 12/02/2017 12:08:53 door marco -
SQL-injection ga je alleen maar tegen met deze functie, vóór je query:
Gewijzigd op 12/02/2017 12:10:43 door - Ariën -
Oké, ik begin het nu een beetje te begrijpen. Heb nu ookal een paar tuts gekeken op youtube. Ik denk dat het nu wel goed is.
Laat je code nu eens zien, ik ben benieuwd hoe het nu geworden is.
De "if trim" heb ik alleen bij username, omdat de rest niet uitmaakt en de mail word al gecheckd.
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
include("config/database.php");
if(isset($_POST["submit"])){
$ip = $_SERVER['REMOTE_ADDR'];
$var = " ";
$url = "https://www.google.com/recaptcha/api/siteverify";
$privatekey = "--------------";
$response = file_get_contents($url."?secret=".$privatekey."&response=".$_POST["g-recaptcha-response"]."&remoteip=".$_SERVER["REMOTE_ADDR"]);
$data = json_decode($response);
$checkusername = $conn->real_escape_string($_POST["username"]);
$checkusernamesql = "SELECT * FROM users WHERE username='".$checkusername."'";
$resultcheck = $conn->query($checkusernamesql);
$error = array();
if(isset($data->success) AND $data->success==false){
$error[] = "Captcha fout!";
} else {
if (trim($var)!=($_POST["username"])){ //Check username
$error[] = "Deze gebruikersnaam kan niet!";
} else {
if($resultcheck->num_rows>=1){
$error[] = "Gebruikersnaam al ingebruik!";
} else {
$username = $conn->real_escape_string($_POST["username"]);
}
}
if (empty($_POST["name"])){ //Check name
$error[] = "Vul je naam in!";
} else {
$name = $conn->real_escape_string($_POST["name"]);
}
if (empty($_POST["password"])){ //Check password
$error[] = "Vul je wachtwoord in!";
} else {
if(($_POST["password"])!=($_POST["password2"])){ //check password is het zelfde
$error[] = "Je wachtwoord is niet het zelfde";
} else {
$password = $conn->real_escape_string(hash("sha512", $_POST["password"]));
}
}
if (empty($_POST["email"])){ //Check email
$error[] = "Vul een Email in!";
} else {
if (filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)){ //Check geldige email
$email = $conn->real_escape_string($_POST["email"]);
} else {
$error[] = "Vul een geldig Email in!";
}
}
}
if (empty($error)){
$conn->real_escape_string($sql);
$sql = ("INSERT INTO users (ip, username, name, password, email) VALUES ('$ip', '$username', '$name', '$password', '$email')");
$result = $conn->query($sql);
if (!$result){
echo "Error";
} else {
echo "Geregistreerd!";
}
} else {
echo "Error: ";
foreach ($error as $key => $value) {
echo $value;
echo " ";
}
}
}
$conn->close();
?>
include("config/database.php");
if(isset($_POST["submit"])){
$ip = $_SERVER['REMOTE_ADDR'];
$var = " ";
$url = "https://www.google.com/recaptcha/api/siteverify";
$privatekey = "--------------";
$response = file_get_contents($url."?secret=".$privatekey."&response=".$_POST["g-recaptcha-response"]."&remoteip=".$_SERVER["REMOTE_ADDR"]);
$data = json_decode($response);
$checkusername = $conn->real_escape_string($_POST["username"]);
$checkusernamesql = "SELECT * FROM users WHERE username='".$checkusername."'";
$resultcheck = $conn->query($checkusernamesql);
$error = array();
if(isset($data->success) AND $data->success==false){
$error[] = "Captcha fout!";
} else {
if (trim($var)!=($_POST["username"])){ //Check username
$error[] = "Deze gebruikersnaam kan niet!";
} else {
if($resultcheck->num_rows>=1){
$error[] = "Gebruikersnaam al ingebruik!";
} else {
$username = $conn->real_escape_string($_POST["username"]);
}
}
if (empty($_POST["name"])){ //Check name
$error[] = "Vul je naam in!";
} else {
$name = $conn->real_escape_string($_POST["name"]);
}
if (empty($_POST["password"])){ //Check password
$error[] = "Vul je wachtwoord in!";
} else {
if(($_POST["password"])!=($_POST["password2"])){ //check password is het zelfde
$error[] = "Je wachtwoord is niet het zelfde";
} else {
$password = $conn->real_escape_string(hash("sha512", $_POST["password"]));
}
}
if (empty($_POST["email"])){ //Check email
$error[] = "Vul een Email in!";
} else {
if (filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)){ //Check geldige email
$email = $conn->real_escape_string($_POST["email"]);
} else {
$error[] = "Vul een geldig Email in!";
}
}
}
if (empty($error)){
$conn->real_escape_string($sql);
$sql = ("INSERT INTO users (ip, username, name, password, email) VALUES ('$ip', '$username', '$name', '$password', '$email')");
$result = $conn->query($sql);
if (!$result){
echo "Error";
} else {
echo "Geregistreerd!";
}
} else {
echo "Error: ";
foreach ($error as $key => $value) {
echo $value;
echo " ";
}
}
}
$conn->close();
?>
Ik begin php nu een beetje te leren, alleen dat beveiligen enzo dat is nog een pain in the ass
Dit zie ik op lijn 29,36 en 45.
Zoals ik al eerder zei, heeft dat geen enkel nut.
En dit gaat ook niet:
Code (php)
1
2
3
2
3
$conn->real_escape_string($sql);
$sql = ("INSERT INTO users (ip, username, name, password, email) VALUES ('$ip', '$username', '$name', '$password', '$email')");
$result = $conn->query($sql);
$sql = ("INSERT INTO users (ip, username, name, password, email) VALUES ('$ip', '$username', '$name', '$password', '$email')");
$result = $conn->query($sql);
$sql bestaat allereerst nog niet eens, en verder moet je de waardes per stuk escapen met $conn->real_escape_string(...), als dat nog niet gebeurd is.
Gewijzigd op 12/02/2017 12:44:40 door - Ariën -
Ik heb de $conn->real_escape_string nog staan omdat ik dat nog niet helemaal snap
Script ik een beetje netjes of heb je nog wat tips?
Gewijzigd op 12/02/2017 12:44:27 door marco -