data veilig uit de database halen
Pagina: « vorige 1 2 3 volgende »
Obelix en Idefix op 29/09/2013 11:43:35:
Aangezien mijn glazen bol op dit moment bij de glassenwasser is, kan ik zonder meer informatie / code niet zeggen waar het fout gaat.
Als je wilt dat we je helpen, zul je toch meer informatie moeten geven.
Aan alleen mysql_real_escape_string kan het, normaal gesproken, echt niet liggen.
Albert de Wit op 29/09/2013 11:44:31:
Als je al je $_POST data wilt gebruiken om met de database te communiceren moet je ervoor zorgen dat er geen commando's in zitten waarmee iemand in je database mee kan klooien. Om het even erg makkelijk voor je te maken:
Je gebruikt een encryptie (dit kun je eenmalig doen, niet meer omkeerbaar) voor wachtwoorden. Als je database zichtbaar is voor hackers dan zien ze alleen het emailadres in plain-text en niet het wachtwoord. Daardoor kunnen hackers niet het wachtwoord en emailadres in combinatie gebruiken bij andere websites (facebook/youtube/hotmail/etc). Encryptie gebruik je dus alleen voor dingen die je niet wilt tonen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
foreach ($_POST as $key => $value){
$_POST[$key] = mysql_real_escape_string($value);
}
nee het inloggen enzo werkt prima
alleen ik ben nu bezig met een mijn profiel pagina
waarbij ze hun eigen voornaam en achternaam enzo kunnen zien
alleen dat werkt dus niet met de mysql_real_escape_string
zonder werkt het prima
?>
foreach ($_POST as $key => $value){
$_POST[$key] = mysql_real_escape_string($value);
}
nee het inloggen enzo werkt prima
alleen ik ben nu bezig met een mijn profiel pagina
waarbij ze hun eigen voornaam en achternaam enzo kunnen zien
alleen dat werkt dus niet met de mysql_real_escape_string
zonder werkt het prima
?>
Je gebruikt een encryptie (dit kun je eenmalig doen, niet meer omkeerbaar) voor wachtwoorden. Als je database zichtbaar is voor hackers dan zien ze alleen het emailadres in plain-text en niet het wachtwoord. Daardoor kunnen hackers niet het wachtwoord en emailadres in combinatie gebruiken bij andere websites (facebook/youtube/hotmail/etc). Encryptie gebruik je dus alleen voor dingen die je niet wilt tonen.
Toevoeging op 29/09/2013 11:49:39:
Obelix en Idefix op 29/09/2013 11:48:07:
Als je wilt dat we je helpen, zul je toch meer informatie moeten geven.
Aan alleen mysql_real_escape_string kan het, normaal gesproken, echt niet liggen.
Obelix en Idefix op 29/09/2013 11:43:35:
Aangezien mijn glazen bol op dit moment bij de glassenwasser is, kan ik zonder meer informatie / code niet zeggen waar het fout gaat.
Als je wilt dat we je helpen, zul je toch meer informatie moeten geven.
Aan alleen mysql_real_escape_string kan het, normaal gesproken, echt niet liggen.
dat snap ik maar wat voor info moet ik nog meer geven want het registratie pagina heb ik al gepost hier
Toevoeging op 29/09/2013 11:52:45:
myaccount.php
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
include_once 'php/check.php';
include_once 'php/connect.php';
$email = $_SESSION['user_id'];
$select = mysqli_query($connection, "SELECT voornaam, achternaam, email FROM `users` WHERE id = '$user_id'");
$row = mysqli_fetch_array($select);
?>
include_once 'php/check.php';
include_once 'php/connect.php';
$email = $_SESSION['user_id'];
$select = mysqli_query($connection, "SELECT voornaam, achternaam, email FROM `users` WHERE id = '$user_id'");
$row = mysqli_fetch_array($select);
?>
<table>
<tr>
<td>
voornaam:
</td>
<td>
</td>
</tr>
<tr>
<td>
achternaam:
</td>
<td>
</td>
</tr>
<tr>
<td>
E-mail:
</td>
<td>
</td>
</tr>
</table>
kijk dit werkt dus prima zonder de mysql_real_escape_string
met blijfen de velden wit
Wat voer je in, laat je relevante code bij het INSERTen een goed zien, en wat laat phpMyAdmin zien?
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
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
<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
include_once 'php/connect.php';
include_once 'php/uwx3g.php';
include_once 'php/xxsfilter.php';
$mail = filter($email);
$select = mysqli_query($connection,"SELECT email FROM `users` WHERE email = '$mail'");
$controle = mysqli_num_rows($select);
if($controle == 0)
{
$firstname = filter($voornaam);
$lastname = filter($achternaam);
$password2 = mysql_real_escape_string(sha1(salt($password)));
mysqli_query($connection,"INSERT INTO `users` (email, password, voornaam, achternaam, activatie) VALUES ('$mail', '$password2', '$firstname', '$lastname', '$random')");
echo 'succesvol geregistreert je kan nu inloggen';
}
else
{
echo 'het ingevoerde emailadres is al ingebruik';
}
?>
error_reporting(E_ALL);
ini_set('display_errors',1);
include_once 'php/connect.php';
include_once 'php/uwx3g.php';
include_once 'php/xxsfilter.php';
$mail = filter($email);
$select = mysqli_query($connection,"SELECT email FROM `users` WHERE email = '$mail'");
$controle = mysqli_num_rows($select);
if($controle == 0)
{
$firstname = filter($voornaam);
$lastname = filter($achternaam);
$password2 = mysql_real_escape_string(sha1(salt($password)));
mysqli_query($connection,"INSERT INTO `users` (email, password, voornaam, achternaam, activatie) VALUES ('$mail', '$password2', '$firstname', '$lastname', '$random')");
echo 'succesvol geregistreert je kan nu inloggen';
}
else
{
echo 'het ingevoerde emailadres is al ingebruik';
}
?>
Toevoeging op 29/09/2013 12:00:33:
het komt goed in de database te staan als ik het in de phpadmin invoer
Wat doet salt() ?
En pas regel 20 eens aan naar:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php // deze en de laatste afsluitende regel is puur om kleurtjes in het codeblok te krijgen
$sql = "INSERT INTO `users` (email, password, voornaam, achternaam, activatie) VALUES ('".$mail."', '".$password2."', '".$firstname."', '".$lastname."', '".$random."')";
echo "De query is: ".$sql;
mysqli_query($connection,$sql);
?>
$sql = "INSERT INTO `users` (email, password, voornaam, achternaam, activatie) VALUES ('".$mail."', '".$password2."', '".$firstname."', '".$lastname."', '".$random."')";
echo "De query is: ".$sql;
mysqli_query($connection,$sql);
?>
Gewijzigd op 29/09/2013 12:20:16 door - Ariën -
Christian k op 29/09/2013 11:59:57:
het komt goed in de database te staan als ik het in de phpadmin invoer
En wat als je het via je script invoert?
Daarnaast zie ik geen $_POST-waarden meer staan in je script, maar alleen variabelen. Waarom komen die vandaan? Waarom niet werken met de $_POST-waarden?
Als je gegevens opvraagt:
Wat zit er in $_SESSION['user_id'] (controleren of dat klopt met wat je verwacht!)
Wat levert $select op als query?
Wat gebeurt er als je die direct in phpadmin uitvoert?
Waar is foutafhandeling van je query?
Waarom een nieuwe variabele aanmaken?
T.a.v. je select-query:
Variabelen buiten quotes
Mis beveiliging
Je controleert een veld id met een $mailadres. Klinkt niet logisch; id is doorgaans een volgnummer.
Gewijzigd op 29/09/2013 12:22:29 door Obelix Idefix
Ik heb het idee dat salt() misschien niet bestaat en dat error_reporting uit staat?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function filter($text, $img = "true")
{
$text = stripslashes($text);
$text = strip_tags($text);
$text = htmlentities($text, ENT_QUOTES);
$text = nl2br($text);
$text = preg_replace('(\[b\](.+?)\[/b\])', '<strong>$1</strong>', $text);
$text = preg_replace('(\[img\]http://([a-z0-9_\-\.\/:]+?)\[/(?:img)?\])', '<img src="http://$1">', $text);
$text = preg_replace('(\[img\]([a-z0-9_\-\.\/:]+?)\[/(?:img)?\])', '<img src="http://$1">', $text);
return $text;
}
?>
function filter($text, $img = "true")
{
$text = stripslashes($text);
$text = strip_tags($text);
$text = htmlentities($text, ENT_QUOTES);
$text = nl2br($text);
$text = preg_replace('(\[b\](.+?)\[/b\])', '<strong>$1</strong>', $text);
$text = preg_replace('(\[img\]http://([a-z0-9_\-\.\/:]+?)\[/(?:img)?\])', '<img src="http://$1">', $text);
$text = preg_replace('(\[img\]([a-z0-9_\-\.\/:]+?)\[/(?:img)?\])', '<img src="http://$1">', $text);
return $text;
}
?>
Toevoeging op 29/09/2013 12:23:06:
en ik heb de regel aangepast maar wat is daar het nut van
ik zie gewoon mijn query
In dat geval zou het gewoon in phpmyadmin zichtbaar moeten zijn.
na afloop kan je die echo weg-commentariseren.
Gewijzigd op 29/09/2013 12:24:49 door - Ariën -
Obelix en Idefix op 29/09/2013 12:19:33:
En wat als je het via je script invoert?
Daarnaast zie ik geen $_POST-waarden meer staan in je script, maar alleen variabelen. Waarom komen die vandaan? Waarom niet werken met de $_POST-waarden?
Als je gegevens opvraagt:
Wat zit er in $_SESSION['user_id'] (controleren of dat klopt met wat je verwacht!)
Wat levert $select op als query?
Wat gebeurt er als je die direct in phpadmin uitvoert?
Waar is foutafhandeling van je query?
Waarom een nieuwe variabele aanmaken?
T.a.v. je select-query:
Variabelen buiten quotes
Mis beveiliging
Je controleert een veld id met een $mailadres. Klinkt niet logisch; id is doorgaans een volgnummer.
Christian k op 29/09/2013 11:59:57:
het komt goed in de database te staan als ik het in de phpadmin invoer
En wat als je het via je script invoert?
Daarnaast zie ik geen $_POST-waarden meer staan in je script, maar alleen variabelen. Waarom komen die vandaan? Waarom niet werken met de $_POST-waarden?
Als je gegevens opvraagt:
Wat zit er in $_SESSION['user_id'] (controleren of dat klopt met wat je verwacht!)
Wat levert $select op als query?
Wat gebeurt er als je die direct in phpadmin uitvoert?
Waar is foutafhandeling van je query?
Waarom een nieuwe variabele aanmaken?
T.a.v. je select-query:
Variabelen buiten quotes
Mis beveiliging
Je controleert een veld id met een $mailadres. Klinkt niet logisch; id is doorgaans een volgnummer.
dat werkt allemaal prima alleen is het script dan lek (sql injections)
als ik dat lek dicht met de mysql_real_escape_string dan kan ik de data niet meer echo'en
en dat is dus het probleem
Toevoeging op 29/09/2013 12:26:06:
- Aar - op 29/09/2013 12:24:29:
Klopt de query wel? Wel zo handig om te controleren. Staat je wachtwoord daar wel in?
In dat geval zou het gewoon in phpmyadmin zichtbaar moeten zijn.
na afloop kan je die echo weg-commentariseren.
In dat geval zou het gewoon in phpmyadmin zichtbaar moeten zijn.
na afloop kan je die echo weg-commentariseren.
ja ik kan gwn inloggen als ik geregistreert ben en alles is gwn zichtbaar
in de database via php myadim alleen met de mysql_real_escape_string staat er niks meer in die velden terwijl het veld NOT NULL is
Wat voor datatype is het veld voor je wachtwoord eigenlijk?
Gewijzigd op 29/09/2013 12:27:05 door - Ariën -
- Aar - op 29/09/2013 12:26:11:
Wat voor datatype is het veld voor je wachtwoord eigenlijk?
Toevoeging op 29/09/2013 12:30:29:
varchar 255
En wat doet salt()????
Gewijzigd op 29/09/2013 12:32:00 door - Ariën -
nee dat zit er niet in nee maar dat kan het probleem toch niet zijn ik echo het password sowiezo niet
Een salt voeg je op een andere wijze toe. Tenzij je echt die functie aangemaakt hebt.
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
function salt($pass, $salt="alBH1Q2NsJ^nS&Y3%DA+PeG#t*MR?=rZmukIXT<C>@OLwqoW4zFxb!Uv5yVpfKEh67jc8gi90d", $str="")
{
$pass = str_replace(" ", "", $pass);
$pass = strrev($pass);
$arr[0] = strlen($pass);
$arr[1] = strlen($salt);
while($arr[0] > $arr[1] + 1)
{
$salt = $salt.$salt;
$arr[1] = strlen($salt);
}
$split_len = floor(max($arr) / (min($arr) - 1));
$salt = explode(" ", chunk_split($salt, $split_len, " "));
array_pop($salt);
$salt = array_reverse($salt);
$j = $arr[0] > count($salt) ? $arr[0] : count($salt);
for($i=0; $i<$j; $i++)
{
if(isset($pass{$i})) $str .= $pass{$i};
if(isset($salt[$i])) $str .= $salt[$i];
}
return $str;
}
?>
function salt($pass, $salt="alBH1Q2NsJ^nS&Y3%DA+PeG#t*MR?=rZmukIXT<C>@OLwqoW4zFxb!Uv5yVpfKEh67jc8gi90d", $str="")
{
$pass = str_replace(" ", "", $pass);
$pass = strrev($pass);
$arr[0] = strlen($pass);
$arr[1] = strlen($salt);
while($arr[0] > $arr[1] + 1)
{
$salt = $salt.$salt;
$arr[1] = strlen($salt);
}
$split_len = floor(max($arr) / (min($arr) - 1));
$salt = explode(" ", chunk_split($salt, $split_len, " "));
array_pop($salt);
$salt = array_reverse($salt);
$j = $arr[0] > count($salt) ? $arr[0] : count($salt);
for($i=0; $i<$j; $i++)
{
if(isset($pass{$i})) $str .= $pass{$i};
if(isset($salt[$i])) $str .= $salt[$i];
}
return $str;
}
?>
Maar waarom voeg je die salt gewoon niet handmatig toe i.p.v. een hele functie? Misschien dat deze ergens de boel kapot maakt?
dat heb ik inmiddels weggehaalt maar over de andere variberelen heb ik nog wel
de mysql_real_escape_string erover heen staan en die velden zijn dan wel leeg
zonder de mysql_real_escape_string doet alles het prima
daarom vroeg ik ook naar een alternatief voor de mysql_real_escape_string()
of kan het daar niet aan liggen?(volgens mij zit daar het probleem)
Gewijzigd op 29/09/2013 12:47:11 door - Ariën -
ja nu werkt het dank jullie wel voor alle moeite