Dimethyltryptamine Skrevet 30. mars 2013 Del Skrevet 30. mars 2013 (endret) Har en personlig startside med en del linker som jeg henter fra en database og plasserer på forsiden, problemet er at noen har kommet seg inn og slettet samtlige linker. Er ikke helt sikker på hvor problemet ligger, da jeg ikke kan spesielt mye PHP. mistenker at noen har bruteforcet seg til riktig passord, men det er fult mulig at det er noe helt annet. 1. Er det noen åpenbare feil som gjør det mulig for noen å komme seg inn uten å vite passordet? 2. Hvis det er blitt bruteforcet, er det en enkel måte å hindre flere login forsøk, uten at jeg må bytte om til et annet login system? Login: <title>Login</title> </head> <body> <div id="login"> <form action="<?php echo $PHP_SELF;?>" method="post"> Brukernavn: <input type="text" name="username"><br/> Passord: <input type="password" name="password"><br/> <input type="submit" name="submit"> </div> <?php if (isset($_POST['submit'])) { $u = $_POST['username']; $p = $_POST['password']; if($u == "Burkernavn" && $p == "Passord" || $u == "Brukernavn" && $p == "Passord" || $u == "Brukernavn" && $p == "Passord"){ session_start(); $_SESSION['user'] = $u; $_SESSION['logged'] = "yes"; header('Location: index.php'); }else{ print "<div id='loginerror'>Feil brukernavn eller passord.</div>"; } } ?> </body> Jeg bruker kodesnutten include_once("auth.php"); for å sjekke om man er logget inn på sidene som jeg vil ha passordbeskyttet auth.php <? session_start(); if(isset($_SESSION['logged']) && $_SESSION['logged'] == yes) { // DO NOTHING } else { header('Location: login.php'); } ?> bare for sikkerhetskyld, her er koden som jeg bruker for å slette linker slett.php <?php include_once("auth.php"); require_once "connect_to_mysql.php"; $id = $_GET['id']; $id = strip_tags($id); $id = htmlspecialchars($id, ENT_QUOTES); mysql_query("DELETE FROM link WHERE id = {$id}"); mysql_close(); header('Location: slettlink.php'); ?> utdrag fra slettlink.php <li><h4>Nyheter</h4></li> <?php $sqlCommand = "SELECT * FROM link WHERE kategori='nyheter'"; $query = mysql_query($sqlCommand) or die (mysql_error()); while ($row = mysql_fetch_array($query)) { $link = $row["link"]; $id = $row["id"]; $linktext = $row["linktext"]; $bildelink = $row["bildelink"]; echo '<li><img src="../../'.$bildelink.'" width="25px" height="25px" "><a class="linkslett2" href="'.$link.'" class="link1" target="_blank"> '.$linktext.'</a> <a href="slett.php?id='.$id.'" class="linkslett" title="Slett" >X</a></li>'. PHP_EOL; } ?> </ul> </div> kopi av posten under: prøvde noe rett etter at jeg postet dette. det ser ut som kan være mulig å slette linker uten å være logget inn så lenge du vet id på linken eksempel på link: http://side.no/admin/forside/slett.php?id=49 hvordan kan jeg hindre noen fra å slette linker uten å være logget inn? slett.php er den nest siste kodesnutten i posten over. Endret 30. mars 2013 av Dimethyltryptamine Lenke til kommentar
Dimethyltryptamine Skrevet 30. mars 2013 Forfatter Del Skrevet 30. mars 2013 (endret) prøvde noe rett etter at jeg postet dette. det ser ut som kan være mulig å slette linker uten å være logget inn så lenge du vet id på linken eksempel på link: http://side.no/admin/forside/slett.php?id=49 hvordan kan jeg hindre noen fra å slette linker uten å være logget inn? slett.php er den nest siste kodesnutten i posten over. Endret 30. mars 2013 av Dimethyltryptamine Lenke til kommentar
Mr. Krangle Skrevet 30. mars 2013 Del Skrevet 30. mars 2013 (endret) hvordan kan jeg hindre noen fra å slette linker uten å være logget inn? Det sier jo seg selv, du utfører kun slettingen hvis vedkommende er innlogget (gjør en sjekk). Forøvrig: Om passordet ditt er kort og ukomplisert kan det knekkes. Det spørs om vedkommende visste brukernavnet ditt da.. Hvis ikke ville det gjort knekkingen verre.. Det krever også litt skills, så spørsmålet er om noen faktisk gidder. Endret 30. mars 2013 av Mr. Krangle Lenke til kommentar
Dimethyltryptamine Skrevet 30. mars 2013 Forfatter Del Skrevet 30. mars 2013 (endret) [/size]Det sier jo seg selv, du utfører kun slettingen hvis vedkommende er innlogget (gjør en sjekk). Forøvrig: Om passordet ditt er kort og ukomplisert kan det knekkes. Det spørs om vedkommende visste brukernavnet ditt da.. Hvis ikke ville det gjort knekkingen verre.. Det krever også litt skills, så spørsmålet er om noen faktisk gidder. har include_once("auth.php"); på slettlink.php og slett.php Forøvrig: Om passordet ditt er kort og ukomplisert kan det knekkes. Det spørs om vedkommende visste brukernavnet ditt da.. Hvis ikke ville det gjort knekkingen verre.. Det krever også litt skills, så spørsmålet er om noen faktisk gidder. Passordet er en rekke tall og bokstaver, har endret det et par ganger. Har ingen ide om hvem som gidder å bruke tid på slette ting fra en side kun jeg bruker, men det er tydeligvis noen som synes det er underholdende. Endret 30. mars 2013 av Dimethyltryptamine Lenke til kommentar
Mr. Krangle Skrevet 30. mars 2013 Del Skrevet 30. mars 2013 har include_once("auth.php"); på slettlink.php og slett.php Ja, la merke til det nå, beklager. Hmm, ikke godt å si hvordan de har gjort det. PHP-sikkerhet er ikke alltid like enkelt. Denne tråden skal jeg følge videre. Lenke til kommentar
Paull Skrevet 30. mars 2013 Del Skrevet 30. mars 2013 Om auth.php er nøyaktig slik du har limt inn ovenfor, så stopper jo ikke execution av sida selv om man ikke er innlogget. Dvs, i slett.php, så vil jo browseren få returnert en redirect-header tilbake, men i tillegg så vil jo slette-koden utføres. Det du trenger er et kall til exit etter du har sendt location-headeren til login.php, så ikke mer kode utføres. 2 Lenke til kommentar
Dimethyltryptamine Skrevet 30. mars 2013 Forfatter Del Skrevet 30. mars 2013 (endret) prøvde og legge til die(); så når ser koden sånn her ut: session_start(); if(isset($_SESSION['logged']) && $_SESSION['logged'] == yes) { // DO NOTHING } else { header('Location: login.php'); die(); } Men den sletter fremdeles linken. Tok også en rask titt inne på php manual http://php.net/manua...nction.exit.php, og prøvde og bytte ut die, med exit; Kan som sagt veldig lite PHP, så hadde blitt takknemlig hvis noen hadde gitt meg noen tips på hva jeg gjør feil Endret 30. mars 2013 av Dimethyltryptamine Lenke til kommentar
magnus_123 Skrevet 30. mars 2013 Del Skrevet 30. mars 2013 Du kan jo lage en php fil som sjekker om di er innlogget. Jeg gjør slik at jeg går gjennom hver enkelt bruker og passord som er lagret i auth.php auth.php: <?php $auth=Array('Bruker1'=>'Passord1','Bruker2'=>'Passord2','Bruker3'=>'Passord3',) >? og så har jeg en cookie som er blitt lagret som inneholder md5($brukernavnet."&&&".$passordet) og hvis jeg får resultatet med en bruker som ligger inne i auth med cookie så kan brukeren slette eller gjøre det brukeren skal gjøre hvis ikke den er logget inn kan ikke brukeren gjøre handlingen du kan lage en php fil som heter "checklogin.php" $loggedin=file_get_contents("http://website.com/checklogin.php?bruker=brukeren&passord=passordet"); eller hvis du ikke har brukernavnet eller passordet trenger du ikke det, du må bare tenke gjennom hva du har av informasjon for at det skal gå automatisk... Da må du lage i checklogin.php: <?php foreach($auth as $bruker=>$passord) { if(md5($bruker."&&&".$passord)==$_COOKIE[test]) { die('1'); } } echo '0'; ?> Dette er bare et eksempel for å få fram noe du kan gjøre, jeg skrev dette uten å på frihånd hvis dere skjønner, men dette er noe du kan gjøre eller ha dette i begynnelsen av hver fil en bruker trenger å logge inn. Siden du kan noe om php håper jeg du/dere skjønner hva jeg mener med dette. Kanskje teit skrevet, og litt forvirrende, men håper dere skjønner hva jeg mener med dette! Lenke til kommentar
Dimethyltryptamine Skrevet 30. mars 2013 Forfatter Del Skrevet 30. mars 2013 Om auth.php er nøyaktig slik du har limt inn ovenfor, så stopper jo ikke execution av sida selv om man ikke er innlogget. Dvs, i slett.php, så vil jo browseren få returnert en redirect-header tilbake, men i tillegg så vil jo slette-koden utføres. Det du trenger er et kall til exit etter du har sendt location-headeren til login.php, så ikke mer kode utføres. Tror jeg fikk dette til å virke nå, ble nødt til å flette auth.php inn i slett.php Da det ikke ser ut som om det virker med die(); når den var i auth.php filen. Takk Lenke til kommentar
Boil In Bag Skrevet 4. april 2013 Del Skrevet 4. april 2013 Tror jeg fikk dette til å virke nå, ble nødt til å flette auth.php inn i slett.php Da det ikke ser ut som om det virker med die(); når den var i auth.php filen. Takk Kan du poste sluttresultatet? Har slitt med noe av det samme selv. Lenke til kommentar
Dimethyltryptamine Skrevet 4. april 2013 Forfatter Del Skrevet 4. april 2013 (endret) Kan du poste sluttresultatet? Har slitt med noe av det samme selv. slett.php session_start(); if(isset($_SESSION['logged']) && $_SESSION['logged'] == yes) { // DO NOTHING } else { header('Location: ../login.php'); die(); } require_once "connect_to_mysql.php"; $id = $_GET['id']; $id = strip_tags($id); $id = htmlspecialchars($id, ENT_QUOTES); mysql_query("DELETE FROM link WHERE id = {$id}"); mysql_close(); header('Location: slettlink.php'); Endret 4. april 2013 av Dimethyltryptamine Lenke til kommentar
Crowly Skrevet 5. april 2013 Del Skrevet 5. april 2013 die() er ikke en pen måte å avslutte på, du kan gjøre det slik session_start(); if(isset($_SESSION['logged']) && $_SESSION['logged'] == yes) { require_once "connect_to_mysql.php"; $id = $_GET['id']; $id = strip_tags($id); $id = htmlspecialchars($id, ENT_QUOTES); mysql_query("DELETE FROM link WHERE id = {$id}"); mysql_close(); header('Location: slettlink.php'); } else { header('Location: ../login.php'); } Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå