data veilig uit de database halen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 volgende »

Obelix Idefix

Obelix Idefix

29/09/2013 11:48:07
Quote Anchor link
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.
 
PHP hulp

PHP hulp

08/05/2024 22:30:56
 
Christian k

christian k

29/09/2013 11:48:25
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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

?>


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:
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)
PHP script in nieuw venster Selecteer het PHP script
1
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);

?>

<table>
<tr>
<td>
voornaam:
</td>
<td>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $row['voornaam']; ?>

</td>
</tr>
<tr>
<td>
achternaam:
</td>
<td>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $row['achternaam']; ?>

</td>
</tr>
<tr>
<td>
E-mail:
</td>
<td>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $row['email']; ?>

</td>
</tr>
</table>

kijk dit werkt dus prima zonder de mysql_real_escape_string
met blijfen de velden wit
 
- Ariën  -
Beheerder

- Ariën -

29/09/2013 11:53:07
Quote Anchor link
Wat voer je in, laat je relevante code bij het INSERTen een goed zien, en wat laat phpMyAdmin zien?
 
Christian k

christian k

29/09/2013 11:59:57
Quote Anchor link
registreren.php(dit is een stuk de rest voor op de invoer gecontroleerte enz.)

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
<?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';
}

?>


Toevoeging op 29/09/2013 12:00:33:

het komt goed in de database te staan als ik het in de phpadmin invoer
 
- Ariën  -
Beheerder

- Ariën -

29/09/2013 12:17:56
Quote Anchor link
En wat doet filter() precies?
Wat doet salt() ?
En pas regel 20 eens aan naar:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>
Gewijzigd op 29/09/2013 12:20:16 door - Ariën -
 
Obelix Idefix

Obelix Idefix

29/09/2013 12:19:33
Quote Anchor link
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
 
- Ariën  -
Beheerder

- Ariën -

29/09/2013 12:20:50
Quote Anchor link
Ik heb het idee dat salt() misschien niet bestaat en dat error_reporting uit staat?
 
Christian k

christian k

29/09/2013 12:20:51
Quote Anchor link
filter() verwijdert de xxs
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
<?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;
}

?>


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
 
- Ariën  -
Beheerder

- Ariën -

29/09/2013 12:24:29
Quote Anchor link
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.
Gewijzigd op 29/09/2013 12:24:49 door - Ariën -
 
Christian k

christian k

29/09/2013 12:24:37
Quote Anchor link
Obelix en Idefix op 29/09/2013 12:19:33:
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.


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
 
- Ariën  -
Beheerder

- Ariën -

29/09/2013 12:26:11
Quote Anchor link
Ik vind het vrij sterk. Overigens hoef je over je wachtwoord geen mysql_real_escape_string() te halen, want de uitkomst wordt toch direct voordat het in MySQL gaat al gehashed, en daar kan dan geen SQL-injectie meer inzitten.


Wat voor datatype is het veld voor je wachtwoord eigenlijk?
Gewijzigd op 29/09/2013 12:27:05 door - Ariën -
 
Christian k

christian k

29/09/2013 12:30:11
Quote Anchor link
- 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
 
- Ariën  -
Beheerder

- Ariën -

29/09/2013 12:31:10
Quote Anchor link
En heb je soms speciale tekens in je wachtwoord zitten, zoals quotes...?
En wat doet salt()????
Gewijzigd op 29/09/2013 12:32:00 door - Ariën -
 
Christian k

christian k

29/09/2013 12:32:32
Quote Anchor link
nee dat zit er niet in nee maar dat kan het probleem toch niet zijn ik echo het password sowiezo niet
 
- Ariën  -
Beheerder

- Ariën -

29/09/2013 12:35:02
Quote Anchor link
Die echo is voor test/debug doeleinden. Maar wat doet die salt() nou eigenlijk?
Een salt voeg je op een andere wijze toe. Tenzij je echt die functie aangemaakt hebt.
 
Christian k

christian k

29/09/2013 12:35:38
Quote Anchor link
dit is de saltpagina
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
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;
}

?>
 
- Ariën  -
Beheerder

- Ariën -

29/09/2013 12:38:09
Quote Anchor link
Dan vind ik het merkwaardig dat je wachtwoord leeg is.
Maar waarom voeg je die salt gewoon niet handmatig toe i.p.v. een hele functie? Misschien dat deze ergens de boel kapot maakt?
 
Christian k

christian k

29/09/2013 12:40:47
Quote Anchor link
nee het wachtwoord kun je niet meer zien in de database als je mysql_real_escape_string eroverheen doet
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)
 
- Ariën  -
Beheerder

- Ariën -

29/09/2013 12:44:38
Quote Anchor link
Gebruik gewoon eens consequent mysqli_real_escape_string(), want je gebruikt ook MySQLi.
Gewijzigd op 29/09/2013 12:47:11 door - Ariën -
 
Christian k

christian k

29/09/2013 12:51:44
Quote Anchor link
ja nu werkt het dank jullie wel voor alle moeite
 

Pagina: « vorige 1 2 3 volgende »



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.