data veilig uit de database halen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 volgende »

Christian k

christian k

28/09/2013 17:12:26
Quote Anchor link
hallo allemaal,
ik heb nu een site waar je op kan registreren en inloggen
ik sla de data op met sha1 + salt en nog een mysqli_real_escape_string eroverheen
het werkt prima alleen wil ik de user met zijn voornaam verwelkomen met zijn naam
ik kan de data al uit de database halen maar dan krijg je allemaal cijvers en letters te zien
hoe kan ik de data weer terug naar tekst zetten?
alvast bedankt voor je reactie
 
PHP hulp

PHP hulp

11/12/2024 21:59:43
 
Erwin H

Erwin H

28/09/2013 17:17:24
Quote Anchor link
Klok horen luiden maar niet weten waar de klepel hangt....

sha1 (of welke encryptie methode dan ook) moet je natuurlijk niet gebruiken voor normale data die je ook weer wilt kunnen tonen. Data die op die manier geencrypt is kan je niet meer decrypten.
Data die je wel moet encrypten (zoals passwords) hoef je weer niet meer te escapen. In een string die uit zo'n encrypt functie komt kan geen probleem meer zitten voor sql injectie.

Dus:
- escape de data die gewoon, leesbaar in je database komt te staan. Doe je dat niet dan ben je kwetsbaar voor sql injectie.
- password encrypt je, want die mogen nooit gelezen kunnen worden.
 
Christian k

christian k

28/09/2013 17:21:04
Quote Anchor link
oke en hoe kan ik de data veilig escapen
en bedankt voor je snelle reactie

Toevoeging op 28/09/2013 17:33:43:

ik heb ff gegooglet maar met de
mysqli_real_escape_string() kan je het toch niet meer terug halen?
 
- Ariën  -
Beheerder

- Ariën -

28/09/2013 20:25:38
Quote Anchor link
mysqli_real_escape_string() heeft niets met coderen van data te maken, maar het escapen van je data om SQL-injection-hacks tegen te gaan.
 
Christian k

christian k

28/09/2013 20:31:51
Quote Anchor link
Hoe kan ik dan de data coderen en sqlinjections
onmogelijk maken?
 
- Ariën  -
Beheerder

- Ariën -

28/09/2013 20:37:40
Quote Anchor link
SQL-injection onmogelijk maken: mysqli_real_escape_string()
Data kan je coderen (one-way!!!) met SHA1, en een salt.
 
Christian k

christian k

28/09/2013 20:42:36
Quote Anchor link
Daar ben ik inmiddels achter maar ik moet de data
Ook terug kunnen zetten naar text zodat je het weer
kan lezen
 
- Ariën  -
Beheerder

- Ariën -

28/09/2013 20:44:10
Quote Anchor link
Waarom moet dat volgens jouw?

Als je dat zou kunnen doen, waarom zou je het dan nog coderen? ;-)?
met andere woorden, de hash die je krijgt na het 'coderen' is niet zomaar terug te draaien, en maar goed ook.
Gewijzigd op 28/09/2013 20:45:33 door - Ariën -
 
Christian k

christian k

28/09/2013 20:48:00
Quote Anchor link
Hahah als je het zonder mysql_real_escape_string()
En zonder sha1 en salt is het toch niet veilig? En kunnen
hackers email adressen en namen achterhalen toch?
Of zit ik nu helemaal fout
 
- Ariën  -
Beheerder

- Ariën -

28/09/2013 20:54:00
Quote Anchor link
Nogmaals: mysql(i)_real_escape_string() heeft niks met coderen te maken, alleen met bescherming tegen SQL-injection. Bepaalde tekens (zoals quotes) die schadelijk zijn worden onschadelijk gemaakt.

Verder is een SHA1() voor zover ik weet nog niet gekraakt, maar het kan geen kwaad het originele password te verlengen met een salt. Zo voorkom je dat er dictionairy-attacks worden gebruikt.
Als iemand het wachtwoord 'boom' heeft, dan is de kans groot dat dat met brute-force in no time geraden zal zijn. Als je als salt bijv. G&B&^b&^%v&^V76 hebt. Dan wordt het password dus boomG&B&^b&^%v&^V76.

Uiteraard moet je in alle controles die salt dan meenemen. Ook moet je deze NOOIT zomaar tussentijds wijzigen.
Gezien SHA1() en andere encrypties one-way zijn, kunnen deze NIET worden teruggedraaid. Ideaal voor wachtwoorden. Voor e-mail minder, omdat deze gebruikt kunnen worden voor mailings etc. Maar het is gewoon de zorg om je applicatie gewoon veilig te houden.
Gewijzigd op 28/09/2013 20:59:27 door - Ariën -
 
Christian k

christian k

29/09/2013 08:58:12
Quote Anchor link
dat snap ik ook maar dit is nu het punt
dit is een stuk van het registratie script:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

include_once 'php/xxsfilter.php';
$firstname    = filter($_POST['voornaam']);
$lastname     = filter($_POST['achternaam']);
$mail         = filter($_POST['mail'])
$password     = mysql_real_escape_string(sha1(salt($_POST['password'])));
                                  
include_once 'php/connect.php';                    
 mysqli_query($connection,"INSERT INTO `users` (email, password, voornaam, achternaam) VALUES ('$mail', '$password2', '$firstname', '$lastname')");
                                  
?>


waar ik dus nu mee zit is dat $firstname, $lastname en $mail niet beveiligd zijn tegen sqlinjections
als ik er een mysql_real_escape_string() over heen doe is het veilig maar ik de data later niet meer tonen
en daarom dacht ik dat sha1+salt overheen doe kan een hacker de data niet zien en wou ik de data later weer gewoon maken
maar dat kan dus niet
en daarom is mijn vraag is het erg als ik er geen mysql_real_escape_string over de $firstname, $lastname en $mail
doe?
 
- Ariën  -
Beheerder

- Ariën -

29/09/2013 09:14:39
Quote Anchor link
Volgens mij begrijp je het verschil tussen encrypten en mysqli_real_escape_string niet.
Nogmaals: Alle input moet geescaped worden met die escapefunctie, en alleen wachtwoorden moeten extra door SHA1 met een salt.
 
Obelix Idefix

Obelix Idefix

29/09/2013 10:20:27
Quote Anchor link
De reactie van Erwin H op 28/09/2013 17:17:24 (goed) gelezen en begrepen?
 
Christian k

christian k

29/09/2013 11:00:41
Quote Anchor link
Ik snap het verschil wel alleen jullie snappen mijn
vraag niet mijn vraag is:
Hoe kan ik de $firstname $lastname en $mail varibilen
beveiligen tegen sql injections en hoe kan ik ze wel
echo'en
 
Obelix Idefix

Obelix Idefix

29/09/2013 11:04:22
Quote Anchor link
Krijg toch echt het idee dat wij de vraag wel begrijpen, maar jij het antwoord niet......

Erwin H op 28/09/2013 17:17:24:
Klok horen luiden maar niet weten waar de klepel hangt....

Dus:
- escape de data die gewoon, leesbaar in je database komt te staan. Doe je dat niet dan ben je kwetsbaar voor sql injectie.
- password encrypt je, want die mogen nooit gelezen kunnen worden.
 
Christian k

christian k

29/09/2013 11:10:02
Quote Anchor link
En hoe kan ik de data escapen?
 
Lano Heeren

Lano Heeren

29/09/2013 11:30:52
Quote Anchor link
Christian,

met alleen mysql_real_escape_string($firstname); kun je de data escapen.
 
Christian k

christian k

29/09/2013 11:37:27
Quote Anchor link
Dat snap ik ook wel maar als ik de data
daarna uit de database wil halen blijft het veld wit
en dat is dus het probleem
 
Obelix Idefix

Obelix Idefix

29/09/2013 11:43:35
Quote Anchor link
Christian k op 28/09/2013 17:12:26:
ik kan de data al uit de database halen maar dan krijg je allemaal cijvers en letters te zien
hoe kan ik de data weer terug naar tekst zetten?

En dat gaat je dus niet lukken, omdat je de gegevens beveiligd (met encryptie) hebt opgeslagen.

Christian k op 29/09/2013 11:37:27:
Dat snap ik ook wel maar als ik de data
daarna uit de database wil halen blijft het veld wit
en dat is dus het probleem


Dan zit er dus (mogelijk) iets fout in:
-je databaseverbinding
-je (SELECT)query
-het weergeven van de gegevens

Aangezien mijn glazen bol op dit moment bij de glassenwasser is, kan ik zonder meer informatie / code niet zeggen waar het fout gaat.

Tips:
-error reporting aanzetten
-foutafhandeling inbouwen
-debuggen
Gewijzigd op 29/09/2013 11:46:17 door Obelix Idefix
 
Albert de Wit

Albert de Wit

29/09/2013 11:44:31
Quote Anchor link
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
<?php

foreach ($_POST as $key => $value){
    $_POST[$key] = mysql_real_escape_string($value);
}


?>


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.
 
Christian k

christian k

29/09/2013 11:46:25
Quote Anchor link
sorry ik had het niet echt duidelijk uitgelegt nee

volgens mij zit daar de fout niet want alles werkt prima
totdat ik de mysql_real_escape_string over de variabelen haal
dan blijft het veld wit zonder de mysql_real_escape_string werkt alles
prima
 

Pagina: 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.