Gå til innhold

[Løst] Problemer med sikkerhet


Anbefalte innlegg

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 av Dimethyltryptamine
Lenke til kommentar
Videoannonse
Annonse

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 av Dimethyltryptamine
Lenke til kommentar

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 av Mr. Krangle
Lenke til kommentar

[/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 av Dimethyltryptamine
Lenke til kommentar

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.

  • Liker 2
Lenke til kommentar

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 av Dimethyltryptamine
Lenke til kommentar

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

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

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 av Dimethyltryptamine
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...