Hoe maak ik MYSQL case sensitive?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Bart V B

Bart V B

28/08/2013 10:40:06
Quote Anchor link
Hey phphulpers.

Een paar dagen ben ik aan het stoeien met laravel 4.
Na veel lezen ben ik maar eens een simpel stukje login code aan het maken gegaan.
Alles werkt, alleen stuitte ik op een probleem waar ik om eerlijk te zijn nog nooit van had gehoord.
De situatie schets:
Ik heb een record username : admin en password : password. (We moeten toch wat test data hebben hehe)
Dus vul netjes mij formulier in admin password, voial, werkt.
Nog een keer testen in het formulier bart en password test, mooi! Een mooie error van de validator.

Denk zal het nog eens testen:
username: Admin en password: password, ik verwacht mijn mooie error, maar tevergeefs ben ingelogd.
Ik zoeken, print_r, var_dump gedaan, bijna laravel eraf geknikkert, kom ik er achter dat mysql case insensitive is. :s Wat dus wil zeggen dat Admin === admin.
Daar ben ik het niet mee eens.

Nu ben ik al aan het googlen geweest, en vond wel wat in de documentatie maar ben een beetje huiverig om aan die instellingen te zitten zonder dat ik er heel veel ervaring mee heb.
http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html
Heeft iemand goede en dan wel veilige handvaten om mysql case sensitive te maken zonder dat ik de rest sloop?
 
PHP hulp

PHP hulp

17/11/2024 14:33:53
 
Chris PHP

Chris PHP

28/08/2013 10:47:26
Quote Anchor link
@Bart,

Dit is raar, bij mij is het namelijk niet zo wel moet ik zeggen dat ik PDO->prepare gebruik en bindParam misschien dat dit het al case sensitive maakt.

Als ik gebruikernaam Admin maak, en log in met admin krijg ik een foutmelding dat de gebruikersnaam of wachtwoord niet klopt.

Toevoeging op 28/08/2013 10:55:06:

P.S. dit zou je Database case sensitive moeten maken.

Case sensitive
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
CREATE DATABASE test_database CHARACTER SET utf8 COLLATE utf8_general_cs;


Case insensitive
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
CREATE DATABASE test_database CHARACTER SET utf8 COLLATE utf8_general_ci;
 
Bart V B

Bart V B

28/08/2013 11:04:18
Quote Anchor link
Ja Chris, dat verwachte ik dus ook een mooie foutmelding.
Zoals ik het nu zie gebruikt laravel wel PDO.
Ik zie zo snel niet waar die query word uitgevoerd.

Gebruik de Auth driver van laravel.
Ik weet niet, maar ik zie nog iets vreemds.
Als ik in auth de table verander naar iets onzinnigs dan kan ik nog steeds inloggen.. hmm..
Toch nog iets niet helemaal pluis denk ik.

EDIT dank je voor de edit. :)
Die had ik nog niet gezien.
Gewijzigd op 28/08/2013 11:04:58 door Bart V B
 
Erwin H

Erwin H

28/08/2013 11:06:39
Quote Anchor link
En als je niet je hele database, danwel tabel case insensitive wil maken, kan je het ook per kolom doen: http://dev.mysql.com/doc/refman/5.0/en/charset-column.html

Overigens vind ik het persoonlijk wel beter als de username insensitive is, maar het password niet (wat vaak al het geval is door hashing). Als ik bij aanmelden eens mijn email met een hoofdletter heb opgegeven wil ik dat later liever niet als een probleem hebben als ik eens met een kleine letter inlog.
 
Bart V B

Bart V B

28/08/2013 11:19:06
Quote Anchor link
Dank je Erwin.
Op zich is het geen heel groot probleem, als ik een beetje door heb hoe laravel werkt en een echte applicatie ga maken dan zal de optie email met password dan ook wel het meest voor de hand liggen.
Het viel me gewoon op dat het zo is dat een database case insensitive is.
En onwetendheid kan eenmaal voor onnodig zoekwerk zorgen.
Dus vandaar dat ik het wilde weten hoe ik het zou kunnen oplossen.
 
Ward van der Put
Moderator

Ward van der Put

28/08/2013 11:44:56
Quote Anchor link
Als je inderdaad niet het wachtwoord opslaat maar een hash, bijvoorbeeld die van SHA-1, is de vergelijking automatisch hoofdlettergevoelig.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
echo sha1('wachtwoord');  // 9c2028963dc9f7fbb4cb30140428a210c61dbb2c
echo sha1('WACHTWOORD');  // 32a4f096fd4e6faaafca119f595c9d5077eee688
?>


En veiliger...
Gewijzigd op 28/08/2013 11:45:19 door Ward van der Put
 
Bart V B

Bart V B

28/08/2013 12:55:40
Quote Anchor link
Het ging niet om een wachtwoord string Ward, maar om de username.
Die hash je normaal gesproken niet.
Het wachtwoord heeft een hash in de database dus dat is/was het probleem niet.
 
Ward van der Put
Moderator

Ward van der Put

28/08/2013 13:06:52
Quote Anchor link
Dan nog werkt het: de clausule WHERE SHA1(...) = SHA1(...) maakt namelijk elke stringvergelijking hoofdlettergevoelig.

Maar goed, alles hashen is niet bepaald efficiënt bij grote hoeveelheden data. Je kunt bij MySQL beter het sleutelwoord BINARY gebruiken voor een binaire vergelijking, zoals in SELECT BINARY. Binair zijn a en A namelijk ongelijk:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
mysql> SELECT 'a' = 'A';
        -> 1

mysql> SELECT BINARY 'a' = 'A';
        -> 0
 
Bart V B

Bart V B

28/08/2013 17:41:46
Quote Anchor link
Dat is op zich wel een nette oplossing mocht het nodig zijn.
Het was een leerzame dag.
Bedankt voor jullie input allen.
 
- Raoul -

- Raoul -

29/08/2013 01:12:17
Quote Anchor link
Kleine aanvulling op de reactie Ward:

Maak zeker dat je Hash::make($wachtwoord) gebruikt en een goede application key hebt als je Laravel 4 hebt.
Gewijzigd op 29/08/2013 01:12:38 door - Raoul -
 
Bart V B

Bart V B

29/08/2013 08:06:55
Quote Anchor link
Hoi Raoul, Hash::make() had ik al uitgevonden. :)
De application key heb ik inderdaad nog niet ingesteld.
Had al wel gelezen dat die ingesteld moet worden.
 



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.