data veilig uit de database halen
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
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.
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?
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.
onmogelijk maken?
Data kan je coderen (one-way!!!) met SHA1, en een salt.
Ook terug kunnen zetten naar text zodat je het weer
kan lezen
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 -
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
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 -
dit is een stuk van het registratie script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
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')");
?>
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?
Nogmaals: Alle input moet geescaped worden met die escapefunctie, en alleen wachtwoorden moeten extra door SHA1 met een salt.
De reactie van Erwin H op 28/09/2013 17:17:24 (goed) gelezen en begrepen?
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
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.
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.
En hoe kan ik de data escapen?
met alleen mysql_real_escape_string($firstname); kun je de data escapen.
daarna uit de database wil halen blijft het veld wit
en dat is dus het probleem
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?
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
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
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
foreach ($_POST as $key => $value){
$_POST[$key] = mysql_real_escape_string($value);
}
?>
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.
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