inlog probleemje
ik heb in extra al op browergeschiedenis verwijderen geklikt en de explorer al afgeloten en de wamp server ook al afgesloten.
Maar nadat ik die opnieuw had aan gezet kan gewoon inloggen zonder een naam en wachtwoord in te vullen.
EN nog iets, als ik dit script include boven in mijn admin script dus direct onder ?php dus voor de header en zo dan zou die toch alleen dat inlog form moeten laten zien neem ik aan en niet de rest van de admin.
het word wel geplaatst alleen niet zichtbaar doordat de <div id="header"> een background-color heeft, maar toch zie ik dan de hele inhoud van het script.
Alleen als ik dat inloggen op zich zelf gebruik dan werkt het wel en word ik door gestuurd naar de admin, Maar dat is niet erg veilig denk ik toch.
Code (php)
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
33
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
33
<?php
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
include('../includes/config.php');
// bovenstaan is om alle foutmeldingen op het beeldscherm te zetten.
// en we moeten natuurlijk de verbind.php include omdat we verbinding willen
// met de database
if(isset($_POST['inloggen']))
{
$gebruiker_query = "SELECT * FROM speler WHERE gebruiker_naam = '".mysql_real_escape_string(trim($_POST['gebruikersnaam']))."';";
$gebruiker_sql = mysql_query($gebruiker_query)or die(mysql_error());
$gebruiker_tellen= mysql_num_rows($gebruiker_sql);
if ($gebruiker_tellen == 1){
$rij = mysql_fetch_array($gebruiker_sql);
if(md5($_POST['wachtwoord']) == $rij['gebruiker_wachtwoord']){
session_start();
$_SESSION['id'] = $rij['id'];
$_SESSION['gebruiker_naam'] = $rij['gebruiker_naam'];
$_SESSION['gebruiker_rank'] = $rij['gebruiker_rank'];
header('Location: inloggen.php');
}else{
echo 'Fout bij het inloggen. Probeer het opnieuw';
}
}else{
echo 'Fout bij het inloggen. Probeer het opnieuw';
}
}else{
echo '<form method="POST" action="admin.php">
Naam: <input type="text" name="gebruikersnaam"><br/>
Wachtwoord: <input type="password" name="wachtwoord"><br />
<input type="submit" name="inloggen" value="Inloggen">';
}
?>
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
include('../includes/config.php');
// bovenstaan is om alle foutmeldingen op het beeldscherm te zetten.
// en we moeten natuurlijk de verbind.php include omdat we verbinding willen
// met de database
if(isset($_POST['inloggen']))
{
$gebruiker_query = "SELECT * FROM speler WHERE gebruiker_naam = '".mysql_real_escape_string(trim($_POST['gebruikersnaam']))."';";
$gebruiker_sql = mysql_query($gebruiker_query)or die(mysql_error());
$gebruiker_tellen= mysql_num_rows($gebruiker_sql);
if ($gebruiker_tellen == 1){
$rij = mysql_fetch_array($gebruiker_sql);
if(md5($_POST['wachtwoord']) == $rij['gebruiker_wachtwoord']){
session_start();
$_SESSION['id'] = $rij['id'];
$_SESSION['gebruiker_naam'] = $rij['gebruiker_naam'];
$_SESSION['gebruiker_rank'] = $rij['gebruiker_rank'];
header('Location: inloggen.php');
}else{
echo 'Fout bij het inloggen. Probeer het opnieuw';
}
}else{
echo 'Fout bij het inloggen. Probeer het opnieuw';
}
}else{
echo '<form method="POST" action="admin.php">
Naam: <input type="text" name="gebruikersnaam"><br/>
Wachtwoord: <input type="password" name="wachtwoord"><br />
<input type="submit" name="inloggen" value="Inloggen">';
}
?>
Edit:
Code-tag gefixxed
Gewijzigd op 28/08/2013 19:37:34 door - Ariën -
Verder begrijp ik uit je verhaal dat onder regel 38 nog meer code staat die niet uitgevoerd mag worden als je niet bent ingelogd. Oftewel: als $_SESSION['id'] niet bestaat. (hint)
Heel kort door de bocht zou je bij regel 38 iets kunnen doen als:
if(!isset($_SESSION['id'])) exit();
maar dat kan ongetwijfeld een stuk eleganter...
- je kan het beste ook zoeken of het wachtwoord en de gebruikersnaam gelijk zijn dn moet je dat later niet meer doen.
- probeer lijn 21 is helemaal bovenaan je pagina te zetten na de php tag
- je beveiliging van je andere pagina's is misschien niet goed, laat die ook eens zien
- gebruik geen * in sql maar geef de velden aan
- als je dit boven je header zet dan zal het contact formulier niet juist staan denk ik.
Toevoeging op 21/08/2013 02:19:35:
iemand was me voor
Php knipper op 21/08/2013 02:13:43:
probeer mysqli dat gaat vervallen binnen een paar php versies
Huh? Als je nu al weet dat het gaat vervallen, dan ga je dat toch ook niet gebruiken? Voor zover ik weet zijn er overigens geen plannen om van mysqli af te stappen...
Quote:
- je kan het beste ook zoeken of het wachtwoord en de gebruikersnaam gelijk zijn dn moet je dat later niet meer doen.
Specifieker: ik zou de wachtwoordcontrole ín de SQL-query doen. Als het wachtwoord verkeerd is, krijg je een lege resultset. Je kan dan niet meer onderscheiden of er een gebruikersnaam met een verkeerd wachtwoord is opgegeven of een niet-bestaande gebruikersnaam, maar een goed loginsysteem laat sowieso niet blijken waarom de inlog mislukt is.
Gewijzigd op 21/08/2013 02:29:16 door Willem vp
Misschien ook wel aan te raden om niet md5 te gebruiken voor je wachtwoord, hier zijn al ongelofelijk veel rainbow tables voor. Misschien voor een sha256 gaan met een salt erin, is een stukje veiliger dan een md5 hash.
want < ? php zonder spaties is blijkbaar al genoeg het in een codeblok te zetten
Gewijzigd op 21/08/2013 12:59:34 door Niek Kasius
Willem vp op 21/08/2013 02:23:36:
Huh? Als je nu al weet dat het gaat vervallen, dan ga je dat toch ook niet gebruiken? Voor zover ik weet zijn er overigens geen plannen om van mysqli af te stappen...
Php knipper op 21/08/2013 02:13:43:
probeer mysqli dat gaat vervallen binnen een paar php versies
Huh? Als je nu al weet dat het gaat vervallen, dan ga je dat toch ook niet gebruiken? Voor zover ik weet zijn er overigens geen plannen om van mysqli af te stappen...
kennelijk trek ik toch aan het langste eind: http://be2.php.net/manual/en/function.mysql-affected-rows.php
Willem vp op 21/08/2013 02:23:36:
Huh? Als je nu al weet dat het gaat vervallen, dan ga je dat toch ook niet gebruiken? Voor zover ik weet zijn er overigens geen plannen om van mysqli af te stappen...
Php knipper op 21/08/2013 02:13:43:
probeer mysqli dat gaat vervallen binnen een paar php versies
Huh? Als je nu al weet dat het gaat vervallen, dan ga je dat toch ook niet gebruiken? Voor zover ik weet zijn er overigens geen plannen om van mysqli af te stappen...
Het staat een beetje appart geformuleerd, wat Php knipper bedoeld is:
mysql_ komt te vervallen, dus maak gebruik van mysqli_ dat is de opvolger van mysql_.
Gewijzigd op 21/08/2013 13:02:59 door Chris PHP
aan de naam en wachtwoord ligt het niet, want als ik die login gewoon op zich zelf gebruik dan werkt het wel en stuurt die me door naar de admin via action="admin.php"
Maar als je nu op inloggen klikt zonder iets in te vullen gaat hij door? Dat is toch logisch?
Maar of dat logisch is, geloof ik niet want dan heeft een inlog gebeuren geen nut
Als je het nu zo doet zal het stukken beter werken denk ik.
Code (php)
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
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
<?php
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
include('../includes/config.php');
// bovenstaan is om alle foutmeldingen op het beeldscherm te zetten.
// en we moeten natuurlijk de verbind.php include omdat we verbinding willen
// met de database
if(isset($_POST['inloggen']))
{
$gebruiker_query = "SELECT * FROM speler WHERE gebruiker_naam = '".mysql_real_escape_string(trim($_POST['gebruikersnaam']))."'";
$gebruiker_sql = mysql_query($gebruiker_query)or die(mysql_error());
$rij = mysql_fetch_array($gebruiker_sql);
if ($_POST['gebruikersnaam'] == $rij['gebruiker_naam'] && md5($_POST['wachtwoord']) == $rij['gebruiker_wachtwoord']){
session_start();
$_SESSION['id'] = $rij['id'];
$_SESSION['gebruiker_naam'] = $rij['gebruiker_naam'];
$_SESSION['gebruiker_rank'] = $rij['gebruiker_rank'];
header('Location: inloggen.php');
}else{
echo 'Fout bij het inloggen. Probeer het opnieuw';
}
} else {
echo '<form method="POST" action="admin.php">
Naam: <input type="text" name="gebruikersnaam"><br/>
Wachtwoord: <input type="password" name="wachtwoord"><br />
<input type="submit" name="inloggen" value="Inloggen">';
}
?>
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
include('../includes/config.php');
// bovenstaan is om alle foutmeldingen op het beeldscherm te zetten.
// en we moeten natuurlijk de verbind.php include omdat we verbinding willen
// met de database
if(isset($_POST['inloggen']))
{
$gebruiker_query = "SELECT * FROM speler WHERE gebruiker_naam = '".mysql_real_escape_string(trim($_POST['gebruikersnaam']))."'";
$gebruiker_sql = mysql_query($gebruiker_query)or die(mysql_error());
$rij = mysql_fetch_array($gebruiker_sql);
if ($_POST['gebruikersnaam'] == $rij['gebruiker_naam'] && md5($_POST['wachtwoord']) == $rij['gebruiker_wachtwoord']){
session_start();
$_SESSION['id'] = $rij['id'];
$_SESSION['gebruiker_naam'] = $rij['gebruiker_naam'];
$_SESSION['gebruiker_rank'] = $rij['gebruiker_rank'];
header('Location: inloggen.php');
}else{
echo 'Fout bij het inloggen. Probeer het opnieuw';
}
} else {
echo '<form method="POST" action="admin.php">
Naam: <input type="text" name="gebruikersnaam"><br/>
Wachtwoord: <input type="password" name="wachtwoord"><br />
<input type="submit" name="inloggen" value="Inloggen">';
}
?>
Gewijzigd op 21/08/2013 13:32:35 door Chris PHP
denkmetode van een simpel inlogsysteem (geen brute force en zo)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
1. Zijn alle velden (gebruikersnaam en wachtwoord) ingevuld?
- ja
2. Geef mij de naam en de rang van de persoon waar de gebruikersnaam en wachtwoordt overeenkomen.
- gevonden
3. session maken
- gelukt
4. doorsturen
- mislukt
4. Geef error
- niet gevonden
3. de gegevens waren fout
- nee
2. gelieve alle gegevens in te vullen
- ja
2. Geef mij de naam en de rang van de persoon waar de gebruikersnaam en wachtwoordt overeenkomen.
- gevonden
3. session maken
- gelukt
4. doorsturen
- mislukt
4. Geef error
- niet gevonden
3. de gegevens waren fout
- nee
2. gelieve alle gegevens in te vullen
Php knipper op 21/08/2013 02:13:43:
tip: mysql gaat vervallen binnenkort, probeer mysqli dat gaat vervallen binnen een paar php versies
Zoals ik jouw tekst lees, komt mysqli dus ook binnen een paar php versies te vervallen?! Dat lees ik echter niet in
Php knipper op 21/08/2013 12:59:02:
kennelijk trek ik toch aan het langste eind: http://be2.php.net/manual/en/function.mysql-affected-rows.php
Dat gaat volgens mij over mysql (zonder i)?!
Ik had dit idd een paar berichten terug ook uitgelegd dat het wat appart geformuleerd stond, en uitgelegd wat Php knipper nu precies bedoelde.
Zijn link was om aan te tonen dat mysql idd deprecated zou worden.
klopt, ik was weer eens verstrooit
Als je bedoeld een script die de boel controleerd naardat je op inlogen hebt geklikt dat heb ik niet
Ik denk dat het zowiezo niet werkt. het is een kopie en komt van: www.phphulp.nl/php/tutorial/data-verwerking/2-simpel-forum-compleet-in-te-bouwen-v2/492/
En daarin werkt het wel, Alleen moet je daar al direct inloggen of eerst registreren om uberhaupt wat te zien, een forum alleen voor leden. Dus heb je al een session start aan het begin.
Ik heb al zowat alle inlog scripts en pagina beveilingen uitgeprobeerd die hier staan maar die werken allemaal op de een of andere manier niet.
En mijn kennis van de Engelse taal is ook niet je van het, ik kan me enigzins verstaanbaar maken en pot bier of vis and chips bestellen, maar veel verder kom je daar niet mee, laat staan technisch engels. en op die site van: http://be2.php.net/manual/en/function.mysql-affected-rows.php heb ik ook niks aan komt uit een land waar ze zowel nederlands,frans en duits spreken maar schrijven in het nederlands schijnbaar daar ook moeilijk.
Toevoeging op 21/08/2013 16:51:35:
Heb je tevens het jaar gezien van het script wat je gebruikt? Dat is van 8 jaar geleden! Ik zou zeggen weggooien en een nieuwe schrijven, je zult vast en zeker meer problemen tegenkomen met deprecated functies.
Niek Kasius op 21/08/2013 16:46:56:
Ik heb al zowat alle inlog scripts en pagina beveilingen uitgeprobeerd die hier staan maar die werken allemaal op de een of andere manier niet.
Wat houdt je tegen om zelf wat te gaan schrijven?
Leer je van en kun je ook zelf makkelijk(er)/sneller eventuele problemen die je in de toekomst tegenkomt in scripts oplossen.
neem nou deprecated god mag weten wat het betekent, zal wel iets met precair (als ik het schrijf) of zo iets te maken hebben denk ik. Nu kan ik het wel alle gaan opzoeken met google, maar tegen de tijd dat ik dan zo'n script heb geschreven bestaat er misschien geen PHP meer of zitten ze in versie 9 of hoger En moet ik minimaal 90 jaar worden, en dan heb ik nog maar 25 jaar.
En daarbij waar moet dan gaan zoeken waar men duidelijke uitleg geeft over hoe je iets moet doen, want uit boeken zoals PHP voor Dummies en de PHP-bijbel word ik niet wijzer van. en voor hello world op je scherm te krijgen hadden ze geen PHP hoeven uitvinden, hier in ieder geval niet want de meeste tutorials die hier op de site staan zijn ook al verouderd.
Gewijzigd op 22/08/2013 01:03:19 door Niek Kasius
Niek Kasius op 22/08/2013 00:49:52:
moet ik eerst engels geen leren, want ik weet niet wat die woorden allemaal betekenen.
Ja, en wat is nu het probleem? ;-)
Toen ik begon met programmeren was ik 13 jaar. Had op school amper 3 maanden Engels gehad. Internet bestond nog niet (tenzij je ARPAnet meerekent; die waren overigens net dat jaar overgestapt op een nieuw protocol dat TCP/IP heette). Boeken en tijdschriften over computers waren voornamelijk in het Engels.
Daar zat ik dan. Met een stapel Engelstalige boeken en een handwoordenboekje. Het duurde zeker een jaar voor ik zelfstandig een programma van meer dan 20 regels kon maken, maar op mijn 16e zat ik al maatwerksoftware te schrijven voor een autorijschool.
Technisch Engels heb ik sowieso nooit geleerd. Op de middelbare school werd dat niet onderwezen en op de HTS werd ervan uitgegaan dat je dat al kon lezen (of jezelf eigen kon maken). In het begin zul je heel vaak je woordenboek nodig hebben (en vaak ook nog ontdekken dat het woord dat je zoekt er niet eens in staat) maar hoe langer je ermee bezig bent, hoe vloeiender het zal gaan.
Overigens vind ik dat je je prioriteiten nogal verkeerd legt. Je wilt wel PHP leren, maar geen moeite doen voor Engels? Ik zou het juist andersom verwachten. Aan Engels heb je in (alle aspecten van) het leven veel meer dan aan PHP. En als je eenmaal een beetje Engels spreekt, dan blijkt PHP opeens ook een stuk eenvoudiger te gaan.
Enneh... wat betreft het woord 'deprecated', dat heeft niets te maken met 'precair' maar met 'depreciëren' (jawel, het tegenovergestelde van appreciëren).