[PHP/MySQL] Probleem met login check script

Pagina: 1
Acties:

Onderwerpen


  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
Ik ben bezig met een applicatie en hierbij is het de bedoeling dat er ingelogt word.
Hierbij is er een keuze tussen 3 modules van het systeem.
Zo is er een Sales Support, Verkoop en Administratie module.
De gebruiker moet vervolgens mbv een radiobutton de gewenste module kiezen en vervolgens zijn/haar login + wachtwoord invoeren.
De gebruiker staat in de db opgeslagen(id,lognaam,pass,soort) en dus moet de login de user checken.

PHP:
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
33
<?php 
mysql_connect("localhost","dbadmin","test");
mysql_select_db("test") or die("Unable to select database");

$naam = $_POST['login'];
$passquery = ("SELECT TABEL_Gebruikers.pass FROM TABEL_Gebruikers WHERE TABEL_Gebruikers.lognaam = '$naam'");

$passresult = mysql_query($passquery); 

// Check result
// This shows the actual query sent to MySQL, and the error. Useful for debugging.
if (!$passresult) {
   $message  = 'Invalid query: ' . mysql_error() . "\n";
   $message .= 'Whole query: ' . $passquery;
   die($message);
}

//Hier komt de script om te checken of de user wel de module mag gebruiken
//Deze kan pas gemaakt worden als de vorige check werkt......

    if (($_POST['group'] == "sales") && ($_POST['pass'] == "$passresult")) {
        header("Location: Sales support/s_home.htm");
    }
    if (($_POST['group'] == "verk") && ($_POST['pass'] == "welkom2")) {
        header("Location: Verkoop/v_home.htm");
    }
    if (($_POST['group'] == "admin") && ($_POST['pass'] == "welkom3")) {
        header("Location: Administratie/a_home.htm");
    }
?>


Zoals je ziet heb ik alleen de sales ingevoerd, de andere 2 modules kan ik zo doen als de sales werkt.
[php=4]($_POST['group'] == "sales") [php] check welke module is gekozen mbv radiobuttons (Deze werkt)
[php=4]($_POST['pass'] == "$passresult") [php] Deze moet vervolgens de ingevoerde login en pass checken en controleren of deze wel bij elkaar horen.
Nu zit dus volgens mij het probleem in deze check.
Het is ook de bedoeling dat er een derde check komt die vervolgens na gaat of de user wel in de module mag, want een user van de administratie mag alleen in de administratie module komen etc.
Maar deze valt zo te maken als eenmaal deze login/pass check werkt.

Ik heb zoals je kan zien een check script gebruikt en deze geeft hetvolgende aan.
Invalid query: You have an error in your SQL syntax near '' at line 1 Whole query: SELECT TABEL_Gebruikers.pass FROM TABEL_Gebruikers WHERE TABEL_Gebruikers.lognaam =
Dus ik neem aan dat de fout in de sqp query zit maar kan hem niet echt vinden.
Waarschijnlijk zal het wel iets heel simpels zijn waar ik overheen kijk.
Maar het kan ook zo zijn dat ik het helemaal verkeerd heb aangepakt..
Ik hoop dat iemand mij hiermee kan helpen.

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


  • Wokkels
  • Registratie: Juli 2000
  • Laatst online: 29-10-2024

Wokkels

Het lekkerste zoutje

PHP:
1
$passquery = ("SELECT TABEL_Gebruikers.pass FROM TABEL_Gebruikers WHERE TABEL_Gebruikers.lognaam = '$naam'");


moet

PHP:
1
$passquery = ("SELECT TABEL_Gebruikers.pass FROM TABEL_Gebruikers WHERE TABEL_Gebruikers.lognaam ='" . $naam . "'");


zijn :)

Ennuh, klopt dat "lognaam" wel? moet dat niet "loginnaam" zijn?

[ Voor 37% gewijzigd door Wokkels op 01-09-2005 10:40 ]

Permanent wintericon!


Verwijderd

Ik neem aan dat dit een versimpeld voorbeeld betreft anders is deze code gevoelig voor injectie van SQL.

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Je hebt op regel 11 staan: $passresult = mysql_query($passquery);
en op regel 24: if (($_POST['group'] == "sales") && ($_POST['pass'] == "$passresult")) {
Dan gaat het me vooral om het laatste gedeelte : $_POST['pass'] == "$passresult".
Waarom behandel je je variabelen als strings, je zet er "" omheen. $passresult uit regel 11 levert een resource op, volgens de manuel en ik denk dat je die nooit in je $_POST array hebt staan.

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Je vergelijkt met een result-set; ik mis nog ergens een fetch_ ;)

Intentionally left blank


  • Wokkels
  • Registratie: Juli 2000
  • Laatst online: 29-10-2024

Wokkels

Het lekkerste zoutje

Ja ik ging er eigenlijk vanuit dat hij vanzelf wel verder ging debuggen na het oplossen van het simpele SQL-foutje :)

@TS: Misschien is het verstandig om je te verdiepen in PHP voordat je aan zo'n belangrijk systeem gaat klussen. Zo te zien maak je nogal wat beginnersfouten, en dat is voor een inlogsysteem niet echt wenselijk denk ik :)

Permanent wintericon!


  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
Wokkels schreef op donderdag 01 september 2005 @ 10:39:
PHP:
1
$passquery = ("SELECT TABEL_Gebruikers.pass FROM TABEL_Gebruikers WHERE TABEL_Gebruikers.lognaam = '$naam'");

moet
PHP:
1
$passquery = ("SELECT TABEL_Gebruikers.pass FROM TABEL_Gebruikers WHERE TABEL_Gebruikers.lognaam ='" . $naam . "'");

zijn :)
Bedankt voor de snele reacties!!
jah ik had al eerder zoiets like:
PHP:
1
2
"SELECT TABEL_Gebruikers.pass FROM TABEL_Gebruikers 
WHERE TABEL_Gebruikers.lognaam =" . $naam . "");

maar ik miste dus die quotes ' ' :), thnx
nu heb ik meteen de check eruit gehaald want hij geeft nu geen foutmelding meer aan.
Ennuh, klopt dat "lognaam" wel? moet dat niet "loginnaam" zijn?
Ja dit heet nu op dit moment zow maar dat pas ik later allemaal nog aan :)
Op dit moment zijn de naamgevingen niet zo heel erg dat komt later wel.
Sybr_E-N schreef op donderdag 01 september 2005 @ 10:46:
Je hebt op regel 11 staan: $passresult = mysql_query($passquery);
en op regel 24: if (($_POST['group'] == "sales") && ($_POST['pass'] == "$passresult")) {
Dan gaat het me vooral om het laatste gedeelte : $_POST['pass'] == "$passresult".
Waarom behandel je je variabelen als strings, je zet er "" omheen. $passresult uit regel 11 levert een resource op, volgens de manuel en ik denk dat je die nooit in je $_POST array hebt staan.
Klopt maar dat dat fout is weet ik al ;) en dat hoort gewoon zonder de "" te zijn.
crisp schreef op donderdag 01 september 2005 @ 10:47:
Je vergelijkt met een result-set; ik mis nog ergens een fetch_ ;)
Ik ga meteen ff opzoek, want dat ken ik niet :)
Wokkels schreef op donderdag 01 september 2005 @ 10:50:
Ja ik ging er eigenlijk vanuit dat hij vanzelf wel verder ging debuggen na het oplossen van het simpele SQL-foutje :)
@TS: Misschien is het verstandig om je te verdiepen in PHP voordat je aan zo'n belangrijk systeem gaat klussen. Zo te zien maak je nogal wat beginnersfouten, en dat is voor een inlogsysteem niet echt wenselijk denk ik :)
Idd ik ben vrij nieuw in PHP, maar ik leer vrij snel en heb al enige ervaring met SQL, HTML, Java, VBscript (studie). Ik was dan ook van plan om PHP erbij te leren zodat een leuk pakketje heb :)
Maar ik loop nu stage en dit is dus een opdracht voor mij (moet verder gaan waar een vorige student is gebleven).
Ik heb niet voor niets een leuk PHP boek naast me liggen. Ben trouwens pas 2 dagen bezig heb nog een half jaar te gaan dus komt goed hoop ik ;)
Maar ik hoop dat als ik vragen heb dat jullie me kunnen helpen.

[ Voor 37% gewijzigd door Tijgertje84 op 01-09-2005 12:14 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
Ik denk dat ik het heb gevonden..
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php 
mysql_connect("localhost","dbadmin","charlie");
mysql_select_db("charlie_test") or die("Unable to select database");

$naam = $_POST['login'];
$passquery = ("SELECT TABEL_Gebruikers.pass FROM TABEL_Gebruikers WHERE TABEL_Gebruikers.lognaam ='" . $naam . "'");

$passresult = mysql_query($passquery); 
$passresult1 = mysql_result($passresult,0,0); 

    if (($_POST['group'] == "sales") && ($_POST['pass'] == $passresult1)) {
        header("Location: Sales support/s_home.htm");
    }
    if (($_POST['group'] == "verk") && ($_POST['pass'] == "welkom2")) {
        header("Location: Verkoop/v_home.htm");
    }
    if (($_POST['group'] == "admin") && ($_POST['pass'] == "welkom3")) {
        header("Location: Administratie/a_home.htm");
    }
?>

hij werkt nu ik moest dus nog de result gebruiken.:x

Maar ik weet niet of dit ook korter kan of anders want dan zou ik dat graag willen weten. Want dat voor mij alleen maar les stof :)

[ Voor 17% gewijzigd door Tijgertje84 op 01-09-2005 12:22 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

Maar ik weet niet of dit ook korter kan of anders want dan zou ik dat graag willen weten. Want dat voor mij alleen maar les stof
Kijk eens naar SQL Injection, want het is nu mogelijk om je complete database leeg te gooien of iig flink te manipuleren. :)

[ Voor 6% gewijzigd door gorgi_19 op 01-09-2005 12:25 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • japaveh
  • Registratie: Maart 2003
  • Laatst online: 20-09 20:47

japaveh

Jield BV

en wat nu als ik naar:

www.jouwsite.nl/Sales support/s_home.htm

surf? Is die pagina wel beveiligd?

[ Voor 32% gewijzigd door japaveh op 01-09-2005 12:27 ]

Solo Database: Online electronic logbook and database system for research applications


  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
gorgi_19 schreef op donderdag 01 september 2005 @ 12:25:
[...]

Kijk eens naar SQL Injection, want het is nu mogelijk om je complete database leeg te gooien of iig flink te manipuleren. :)
Sorry maar daar begrijp ik niet wat je bedoeld...
japaveh schreef op donderdag 01 september 2005 @ 12:26:
en wat nu als ik naar:

www.jouwsite.nl/Sales support/s_home.htm

surf? Is die pagina wel beveiligd?
Nee het is geen site online. Het staat op het netwerk van het bedrijf en is niet online op te komen ;)
Het is dus alleen maar intern te bereiken.

[ Voor 4% gewijzigd door Tijgertje84 op 01-09-2005 13:03 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


  • japaveh
  • Registratie: Maart 2003
  • Laatst online: 20-09 20:47

japaveh

Jield BV

Hier is een artikel waarin uitgelegd wordt wat SQL injection precies is. Het komt erop neer dat je als gebruiker query's kunt veranderen tot bijvoorbeeld DROP TABLE ... je mag nooit zomaar $_POST variabelen zonder controle in een query zetten. Dat is vragen om problemen.

Wat ik bedoelde is dat men dus zonder login ook gewoon kan surfen naar die sites waar jij na het login naar doorstuurt met die header functie. Op die manier is je inlogmethode makkelijk te omzeilen door direct ernaar te surfen.

Solo Database: Online electronic logbook and database system for research applications


  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
japaveh schreef op donderdag 01 september 2005 @ 13:14:
Hier is een artikel waarin uitgelegd wordt wat SQL injection precies is. Het komt erop neer dat je als gebruiker query's kunt veranderen tot bijvoorbeeld DROP TABLE ... je mag nooit zomaar $_POST variabelen zonder controle in een query zetten. Dat is vragen om problemen.

Wat ik bedoelde is dat men dus zonder login ook gewoon kan surfen naar die sites waar jij na het login naar doorstuurt met die header functie. Op die manier is je inlogmethode makkelijk te omzeilen door direct ernaar te surfen.
ik vraag me af of de mensen hier uberhaupt verstand hebben van SQL laat staan een simple siteje bouwen.
Maar naast dat is het natuurlijk wel beter om het goed te beveiligen.
Je kan idd als je die links eenmaal kent kan je zonder in te loggen op die paginas komen jah.
Ik zal morgen (vandaag geen tijd meer) daar eens op uit gaan hoe dat zit. iig bedankt!! :)

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

Verwijderd

Je denkt op een verkeerde manier als je het mij vraagt.
Je wilt nu twee dingen in één keer doen.
1) Inloggen én
2) ... de gebruiker naar een pagina laten verwijzen

Waarom denk je niet op een andere manier?
Laat eerst de gebruiker inloggen. Als dit vervolgens gelukt is, dán ga je pas opties tonen voor modules en verwijzingen daar naar toe. Want waarom laat je iemand die niet in mag of kan loggen, tóch de opties zien? Dan geef je een kwaadwillende al te veel informatie.
Kortom;

- Inloggegevens in laten voeren
- Checken of dit klopt
- Klopt dit niet, een foutmelding geven en een BACK-button plaatsen
- Klopt dit wel, een melding geven en navigatiemogelijkheden tonen (toon alleen de mogelijkheden die de gebruiker mág zien, zo voorkom je dat een gebruiker naar een pagina wilt gaan en te zien krijgt dat dit niet mag!)

Verder maak je in al je modules als allereerste code een check of de browser - de gebruiker - wel ingelogd is. M.a.w., of er wel de juiste SESSIE- of COOKIE-variabelen gezet zijn (bijvoorbeeld). Succes!

Acties:
  • 0 Henk 'm!

  • ShadowLord
  • Registratie: Juli 2000
  • Laatst online: 18-09 22:12
* ShadowLord slaat Tijgertje84 om de oren met addslashes().

Ik zou van je start code in ieder geval er dit van maken:
PHP:
1
2
$naam = addslashes($_POST['login']);
$passquery = ("SELECT TABEL_Gebruikers.pass FROM TABEL_Gebruikers WHERE TABEL_Gebruikers.lognaam ='" . $naam . "'");

You see things; and you say, "Why?" But I dream things that never were; and I say, "Why not?"


Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
ShadowLord schreef op vrijdag 02 september 2005 @ 11:27:
* ShadowLord slaat Tijgertje84 om de oren met addslashes().
Bedankt voor de tip ;)
Verwijderd schreef op vrijdag 02 september 2005 @ 10:48:
Je denkt op een verkeerde manier als je het mij vraagt.
Je wilt nu twee dingen in één keer doen.
1) Inloggen én
2) ... de gebruiker naar een pagina laten verwijzen

Waarom denk je niet op een andere manier?
Laat eerst de gebruiker inloggen. Als dit vervolgens gelukt is, dán ga je pas opties tonen voor modules en verwijzingen daar naar toe. Want waarom laat je iemand die niet in mag of kan loggen, tóch de opties zien? Dan geef je een kwaadwillende al te veel informatie.
Kortom;

- Inloggegevens in laten voeren
- Checken of dit klopt
- Klopt dit niet, een foutmelding geven en een BACK-button plaatsen
- Klopt dit wel, een melding geven en navigatiemogelijkheden tonen (toon alleen de mogelijkheden die de gebruiker mág zien, zo voorkom je dat een gebruiker naar een pagina wilt gaan en te zien krijgt dat dit niet mag!)

Verder maak je in al je modules als allereerste code een check of de browser - de gebruiker - wel ingelogd is. M.a.w., of er wel de juiste SESSIE- of COOKIE-variabelen gezet zijn (bijvoorbeeld). Succes!
Het is zo dat het programma alleen binnen het bedrijf geopend kan worden (staat op server). Er komt verder niemand op de computers en het is niet van buitenaf te bereiken. Het gaat er dus om dat men eenvoudig maar wel met wachtwoord in kan loggen.
Maar wat je verteld over die session en dat het systeem checkt of de user heeft ingelogt begrijp ik wel, maar kan dat zeker nog niet zelf oplossen. Ik zal dat ook wel gaan uitzoeken hoe dat werkt.
Misschien wel handig om te gaan gebruiken maar dat week ik nog niet zeker.

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

Verwijderd

mischien is het eventueel handig om standaard login en sessies te maken met dreamweaver. die poept ze zo voor je uit en voor zo ver uik weet werkt dat allemaal super veilig....
Pagina: 1