Beste sitedealers,
Voor een klant heb ik een website gemaakt met daarbij een beheerdersgedeelte, beveiligd met gebruikersnaam en wachtwoord.
Het is voor een lokaal bedrijfje en hoeft volgens mij niet beschermd te worden tegen hackorganisaties of iets dergelijks, maar dan nog moet het veilig zijn.
De code ziet er als volgt uit:
Wachtwoord genereren:Code:<?php if(isset($_POST['gebruikersnaam'])){ if(basename($_SERVER['HTTP_REFERER']) == basename($_SERVER['PHP_SELF'])){ $Beheerders = mysql_query("SELECT * FROM beheerders WHERE Gebruikersnaam = '".v($_POST['gebruikersnaam'])."' AND Wachtwoord = '".v(genereer_wachtwoord($_POST['wachtwoord']))."' LIMIT 1"); if(mysql_num_rows($Beheerders) != 0){ setcookie("ID", rand(50000000, 60000000), time() + 7200); mysql_query("INSERT INTO Adminlogin VALUES('".v($_POST['gebruikersnaam'])."','".date("Y-m-d H:i:s", time())."', '".$_SERVER['REMOTE_ADDR']."', '0')"); echo '<script type="text/javascript">alert("U bent ingelogd!")</script>'; header("refresh:1;index.php"); }elseif(mysql_num_rows($Beheerders) == 0){ mysql_query("INSERT INTO Adminlogin VALUES('".v($_POST['gebruikersnaam'])."','".date("Y-m-d H:i:s", time())."', '".$_SERVER['REMOTE_ADDR']."', '1')"); echo '<script type="text/javascript">alert("De ingevulde gegevens zijn onjuist!")</script>'; } }else{ header("location:".$root."/fout.php"); } } ?>
De functie v() is om sql injectie etc. tegen te gaan, maar minder typwerk dan bijvoorbeeld mysql_real_escape_string().Code:function genereer_wachtwoord($wachtwoord){ $salt = '146-25h2otohasf6-76'; $ww = sha1($salt.$wachtwoord.md5($salt)); return $ww; }
Ik vroeg me af of jullie hier op- of aanmerkingen over hebben, of dat er misschien wel heel makkelijk in te breken valt.
Alvast bedankt,
B. Korteweg
- Nakijken inlogscriptje
-
22-12-2013, 14:50 #1
- Berichten
- 158
- Lid sinds
- 14 Jaar
Nakijken inlogscriptje
-
In de schijnwerper
Professionele tekstschrijver (actie: 2,5 cent per woord)Freelance / Werkwegens beëindiging bedrijf beschikbaar | HappyHuisdier.nl DA13 - DR16Website te koopOutreachxxl.com || Outreach/linkbuilding zelf doen? Internationaal. Laagste prijzenFreelance / WerkPopi.nl | Linkbuilding Platform| 14.000+ MogelijkhedenSEO/Linkbuilding -
22-12-2013, 16:26 #2
- Berichten
- 433
- Lid sinds
- 17 Jaar
Re: Nakijken inlogscriptje
Ik heb even je code wat aangepast.
Wat overzichtelijker gemaakt, en de datum die je in de database zet vervangen door een mysql functie.
Verder, waarom alles (*) selecteren van je tabel als je vervolgens helemaal niets ervan gebruikt? Dat is alleen maar onnodige geheugen/tijdverspilling.
Ook vind ik het netter/beter bij een insert query ook de kolommen waar je wat in wilt zetten mee te geven in je query. Dit is later bij terugkijken overzichtelijker, en voorkomt ook insert fouten als je per ongeluk de verkeerde volgorde aanhoudt.
Meestal maak je bij het inloggen een sessie aan, maar jij maakt een cookie aan en zet een record in een database.
Dat is wellicht ook wel een mogelijkheid, maar niet waar ik voor zou kiezen.
Daarnaast, een waarde 0 bij inloggen, en een waarde 1 bij niet ingelogd? Klopt dat?
Als je alleen a.d.h.v. die cookie bepaalt of iemand is ingelogd, dan is het niet zo heel moeilijk om binnen te komen. Cookies zijn gewoon tekstbestandjes op je eigen computer. Dat is zo aangemaakt.
Je hoeft dan in dit geval alleen maar het id van de admin te weten, en meestal is dat de eerst aangemaakte gebruiker.
Code:<?php if(isset($_POST['gebruikersnaam'])) { if(basename($_SERVER['HTTP_REFERER']) == basename($_SERVER['PHP_SELF'])) { $Beheerders = mysql_query("SELECT * FROM beheerders WHERE Gebruikersnaam = '".v($_POST['gebruikersnaam'])."' AND Wachtwoord = '".v(genereer_wachtwoord($_POST['wachtwoord']))."' LIMIT 1"); if(mysql_num_rows($Beheerders) != 0) { setcookie("ID", rand(50000000, 60000000), time() + 7200); mysql_query("INSERT INTO Adminlogin VALUES ('".v($_POST['gebruikersnaam'])."', NOW(), '".$_SERVER['REMOTE_ADDR']."', '0')"); echo '<script type="text/javascript">alert("U bent ingelogd!")</script>'; header("refresh:1;index.php"); } elseif(mysql_num_rows($Beheerders) == 0) { mysql_query("INSERT INTO Adminlogin VALUES ('".v($_POST['gebruikersnaam'])."', NOW(), '".$_SERVER['REMOTE_ADDR']."', '1')"); echo '<script type="text/javascript">alert("De ingevulde gegevens zijn onjuist!")</script>'; } } else { header("location:".$root."/fout.php"); } } ?>
Laatst aangepast door stefanvi : 22-12-2013 om 16:35
-
22-12-2013, 16:51 #3
- Berichten
- 158
- Lid sinds
- 14 Jaar
Re: Nakijken inlogscriptje
Hallo Stefan,
Bedankt voor de tips, allereerst wil ik even zeggen dat het overzicht enigszins verpest is doordat de regels eerder afgebroken worden in het forum dan in mijn bestandjes.
Daarnaast, de (*) is inderdaad wel onnodig, klopt.
De waardes 0 en 1 bij het inloggen zijn voor de tabel waar ik bijhoud hoe vaak en vanaf welk IP er pogingen worden gedaan om in te loggen.
Hierbij is 1 een "faal" en wanneer dit te vaak gebeurt vanaf een bepaald IP adres, ga ik hier achteraan.
-
22-12-2013, 16:54 #4
- Berichten
- 433
- Lid sinds
- 17 Jaar
Re: Nakijken inlogscriptje
Als je foute inlogpogingen dan toch al bijhoudt, kun je beter gelijk inbouwen dat je bijv. max 5 keer per 5 minuten in kan loggen.
Dit om bots die duizenden combinaties proberen tegen te houden.
Want zodra jij erachter komt dat dit gebeurt is het al minimaal enkele uren, zoniet dagen later.
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic