Gå til innhold

Lære get og sikkerhet


Anbefalte innlegg

Skrevet

<?php 
if($id == "") {$id=bilde.jpg;} 
echo "<img src=\"foto/$id\" alt=\"\">"; 

?> 
<?php 

//list($width, $attr) = getimagesize("foto/$id.jpg");   
$chk_isset_bilde = isset($bilde);     

if (($chk_isset_bilde)) { 
  
   $forbidden_1 = ereg("/", $bilde); 
   $forbidden_2 = ereg("\.\./", $bilde);   

   if ($forbidden_1 OR $forbidden_2) { 
       echo "<h1>FY! \n";   
       echo "Ikke lov!</h1>\n";   
   }  } 

echo "<img src=\"foto/$id\" alt=\"$id\" border=0 width=";   
if($width > 760) {   
 echo "760";" >"; } 
?> 
<p> 
</div> 
<div style="width: 100%;"> 
  <?php 
$dirnavn = "foto/thumbs"; 
$dir = opendir($dirnavn); 
while( false != ($file = readdir($dir) ) ) 
{ 
if( ($file != ".") and ( $file != ".." ) ) 
{ 
$file_list .= '<a href="index.php?side=bilder&id='.$file.'"><img src="foto/thumbs/'.$file.'" width="50" height="50" border="0"></a>'; 


} 
} 

closedir($dir
) 
?> 

 

ville gjerne hatt litt bedre sikkerhet i dette scriptet osv. kanskje noen andre forbedringer?

hvordan kan jeg få lagt inn get - ting der, forstår ikke det, men kanskje noen vil lære... hadde vært max!! :thumbs:

Videoannonse
Annonse
Skrevet

Hvis du ikke har register_globals=on vil det ikke virke.. da kan du bruke dette:

<?php 
$id=$_GET['id'];

if($id == "") {$id=bilde.jpg;} 
echo "<img src=\"foto/$id\" alt=\"\">"; 

//list($width, $attr) = getimagesize("foto/$id.jpg");   
$chk_isset_bilde = isset($bilde);     

if (($chk_isset_bilde)) { 
 
  $forbidden_1 = ereg("/", $bilde); 
  $forbidden_2 = ereg("\.\./", $bilde);   

  if ($forbidden_1 OR $forbidden_2) { 
      echo "<h1>FY! \n";   
      echo "Ikke lov!</h1>\n";   
  }  } 

echo "<img src=\"foto/$id\" alt=\"$id\" border=0 width=";   
if($width > 760) {   
echo "760";" >"; } 
?> 
<p> 
</div> 
<div style="width: 100%;"> 
 <?php 
$dirnavn = "foto/thumbs"; 
$dir = opendir($dirnavn); 
while( false != ($file = readdir($dir) ) ) 
{ 
if( ($file != ".") and ( $file != ".." ) ) 
{ 
$file_list .= '<a href="index.php?side=bilder&id='.$file.'"><img src="foto/thumbs/'.$file.'" width="50" height="50" border="0"></a>'; 


} 
} 

closedir($dir) 
?> 

 

Når det gjelder sikkerhet kunne du lagt inn en sjekk på hvilken filtype man skal vise (jpg, gif, png, osv). og i tillegg gjøre at man ikke får tilgang til undermapper (/bilder/mappe/).

Skrevet

takker :)

men med sikkerheten, for å finne ut hva endelsen.. må jeg vel bruke ereg et eller annet? hvordan ser det ut?

 

og hvordan sjekker jeg om bildene er fra undermapper?

:cry:

Skrevet (endret)

Hvis du ikke vil ha noe annet en filnavnet og ikke hvor fila ligger, og du bare vil sjekke om fila ender med .gif, .jpg eller .png, så kan du prøve deg på denne:

$subject = "../../../hei.gif";
$subject = basename($subject); // Gir deg bare filnavnet, path fjernes
echo "$subject<br/>";
echo preg_match("/^.+\.jpg|gif|png$/i", $subject) == 1 ? "true" : "false";

Endret av FuLu
Skrevet

For å sjekke filendelse: (ikke testet)

$type=array('.gif', '.png', '.jpg', '.gif');

if (!in_array(substr($file, strrpos($file, '.')), $type)) {
           echo "Ulovlig filtype!";
exit();
}

Skrevet

den funket fin fulu...

har ikke prøvd din zorac, men den virker sikkert ;)

 

så til neste sikkerhets problem :) :

hvordan kan jeg få til at bare bildene fra ei mappe åpnes? hvis ikke kan man jo legge inn masse rare bilder, og lure folk.. :) kanskje ikke så farlig, men kjekt å ha sikkert... :cool:

Skrevet
så til neste sikkerhets problem :) :

hvordan kan jeg få til at bare bildene fra ei mappe åpnes? hvis ikke kan man jo legge inn masse rare bilder, og lure folk.. :) kanskje ikke så farlig, men kjekt å ha sikkert... :cool:

Her skjønner jeg ikke hva du mener...?

Skrevet

bare hvordan jeg kan få bildene fra bare ei mappe til å åpnes. slik som scriptet er nå kan man åpne fra mange forskjellige mapper(ihvertfall på min server, har ikke sjekket om kan åpne fra andre)

Skrevet

Som FuLu skriver:

$subject = basename($subject); // Gir deg bare filnavnet, path fjernes

 

Dvs at du kan spesifisere mappen med f.eks:

echo "<img src=\"mappe/undermappe/$subject\">";

 

God Jul!

Skrevet

okei, da var det fikset :)

men en ting til...

 

  <?php
$dirnavn = "foto/thumbs";
$dir = opendir($dirnavn);
while( false != ($file = readdir($dir) ) )
{
if( ($file != ".") and ( $file != ".." ) )
{
$file_list .= '<a href="index.php?side=bilder&id='.$file.'"><img src="foto/thumbs/'.$file.'" width="50" height="50" border="0"></a>';


}
}

closedir($dir)
?>

 

bruker denne for å hente ut bildene. hvordan kan jeg få organisert de slik at det nyeste opplastede kommer først? nå kommer det nyeste sist.... det er :no:

 

takker veldig :) har lært en del av dette allerede :D

Skrevet

Denne putter filene i et flerdimensjonalt array. En med navnet/path til fila og en filemtime som er unix timestamp. Er bare eksempel, du får plukke ut det du trenger ;) Legg merke til cmp funksjonen. Bytter du om plassen til variablene i strcmp'en, så vil sorteringen putte eldste først og nyeste sist. Slik den er nå, så kommer nyeste først og eldste sist.

 

<?php
function cmp($a, $b)
{
   return strcmp($b["mtime"], $a["mtime"]);
}

$dirnavn = getcwd();
$dir = opendir($dirnavn);
$i = 0;
while( false !== ($file = readdir($dir) ) )
{
   if( ($file != ".") and ($file != "..") )
   {
       $files[$i]["name"] = $dirnavn."/$file";
       $files[$i]["mtime"] = filemtime($dirnavn."/$file");
       $i++;
   }
}
closedir($dir);

usort($files, "cmp");

while(list($key, $value) = each($files))
{
   echo "$key; name: " . $value["name"] . " mtime: " . date("Y/m/d H:i:s", $value["mtime"]) . "<br/>";
}
?>

Skrevet (endret)

får ikke det til å virke...

den lister bare opp alle filer og mapper i root(?) mappen....

eks:

0; name: /home/kenwo/public_html/includes mtime: 2003/12/26 00:03:45

1; name: /home/kenwo/public_html/foto mtime: 2003/12/25 17:59:42

2; name: /home/kenwo/public_html/poll mtime: 2003/12/24 00:57:40

 

det er vel bare å legge inn riktig dir, men hvordan? og echoen blir jo også litt rar :S

Endret av kennteh
Skrevet

Hmm, jo, den koden jeg skrev må du selvfølgelig ikke ta slavisk, som du ser så bruker jeg $dirnavn = getcwd(); Denne må du bytte ut med den mappa som du skal liste. Echo'en er bare "debug" for å vise at den sorterer. Den while-løkka trenger du egentlig ikke.

Skrevet (endret)

prøvde meg litt frem med den først :)

men var en litt for komplisert kode for meg å forstå helt uten videre....

skal prøve igjen nå etter en hard dag på jobb

 

$dirnavn = getcwd(); Denne må du bytte ut med den mappa som du skal liste

 

sånn:

$dirnavn = getcwd("foto/thumbs/"); ?

eller sånn:

$dirnavn = getcwd("foto/thumbs/"); ?

 

prøver meg frem fortsatt :)

 

 

 

nå har jeg satt sammen dette:

  <?php
$dirnavn = "foto/thumbs/";
$dir = opendir($dirnavn);


function cmp($a, $b)
{
  return strcmp($b["mtime"], $a["mtime"]);
}

$dirnavn = getcwd();
$i = 0;
while( false !== ($file = readdir($dir) ) )
{
  if( ($file != ".") and ($file != "..") )
  {
      $files[$i]["name"] = $dirnavn."/$file";
      $files[$i]["mtime"] = filemtime($dirnavn."/$file");   //her er linje 45
      $i++;
  }
}
closedir($dir);

usort($files, "cmp");

while( false != ($file = readdir($dir) ) )
{
if( ($file != ".") and ( $file != ".." ) )
{
$file_list .= '<a href="index.php?side=bilder&id='.$file.'"><img src="foto/thumbs/'.$file.'" width="50" height="50" border="0"></a>';


}
}

closedir($dir)

?>

 

 

men får bare eroren:

Warning: filemtime(): Stat failed for /home/kenwo/public_html/ball.jpg (errno=2 - No such file or directory) in /home/kenwo/public_html/includes/bilder.inc.php on line 45

 

Warning: filemtime(): Stat failed for /home/kenwo/public_html/bat.jpg (errno=2 - No such file or directory) in /home/kenwo/public_html/includes/bilder.inc.php on line 45

 

Warning: filemtime(): Stat failed for /home/kenwo/public_html/bjorkestol.jpg (errno=2 - No such file or directory) in /home/kenwo/public_html/includes/bilder.inc.php on line 45

 

Warning: filemtime(): Stat failed for /home/kenwo/public_html/christer.jpg (errno=2 - No such file or directory) in /home/kenwo/public_html/includes/bilder.inc.php on line 45

 

Warning: filemtime(): Stat failed for /home/kenwo/public_html/engel.jpg (errno=2 - No such file or directory) in /home/kenwo/public_html/includes/bilder.inc.php on line 45

 

Warning: filemtime(): Stat failed for /home/kenwo/public_html/esben.jpg (errno=2 - No such file or directory) in /home/kenwo/public_html/includes/bilder.inc.php on line 45

 

Warning: filemtime(): Stat failed for /home/kenwo/public_html/fjell.jpg (errno=2 - No such file or directory) in /home/kenwo/public_html/includes/bilder.inc.php on line 45

 

Warning: filemtime(): Stat failed for /home/kenwo/public_html/fleste.jpg (errno=2 - No such file or directory) in /home/kenwo/public_html/includes/bilder.inc.php on line 45

 

 

osv osv osv

Endret av kennteh
Skrevet
prøvde meg litt frem med den først :)

men var en litt for komplisert kode for meg å forstå helt uten videre....

 

sånn:

$dirnavn = getcwd("foto/thumbs/"); ?

eller sånn:

$dirnavn = getcwd("foto/thumbs/"); ?

 

prøver meg frem fortsatt :)

 

Sist jeg sjekket tar ikke getcwd() argumenter.

Prøv heller $dirnavn = getcwd()."/foto/thumbs/";

Skrevet

Det som sven-o sa kan du prøve. Men jeg ser noe annet feil i koden din. Du skal jo ikke kjøre readdir og hele den regla på nytt etter du har allerede har gjort det. Du har jo sortert filene inni $files arrayet. Det du skal nå gjøre er å bruke dette arrayet å liste opp bildene ferdig sortert ;) Du kjører også readdir etter at en closedir er blitt kjørt, så dette vil nok feile.

Skrevet

ok.. hehe :dontgetit:

 

nå ser koden slik ut:

<?php
$dir = "foto/thumbs";
 
 
function cmp($a, $b)
{
  return strcmp($b["mtime"], $a["mtime"]);
}

$dirnavn = getcwd()."/foto/thumbs/";
$dir = opendir($dirnavn);
$i = 0;
while( false !== ($file = readdir($dir) ) )
{
if( ($file != ".") and ( $file != "$.." ) )
{

       	$files[$i]["name"] = $dirnavn."/$file";
       	$files[$i]["mtime"] = filemtime($dirnavn."/$file");
        $i++;
   }
}
closedir($dir);

usort($files, "cmp");

while(list($key, $value) = each($files))
{
$file_list .= '<a href="index.php?side=bilder6&id='.$file.'"><img src="foto/thumbs/'.$file.'" width="50" height="50" border="0"></a>';
}


echo "$file_list";
?>

 

men på thumbsene blir kodene bare slik:

<img src="foto/thumbs/" width="50" height="50" border="0"></a><a href="index.php?side=bilder6&id=">

 

slik er alle linkene til bildene, de viser altså bare til en mappe.. ikke til bilder...

 

stresser litt, men har allerede lært en del :) derfor jeg satte igang å lage galleriet. kanskje jeg kan lage noe uten hjelp en gang snart? :scared:

Skrevet

det ser ut til å virke mer nå ja :)

men ikke helt... :blush:

 

<?php
$dir = "/foto/thumbs";


function cmp($a, $b)
{
  return strcmp($b["mtime"], $a["mtime"]);
}

$dirnavn = getcwd()."/foto/thumbs";
$dir = opendir($dirnavn);
$i = 0;
while( false !== ($file = readdir($dir) ) )
{
if( ($file != ".") and ( $file != "$.." ) )
{

       	$files[$i]["name"] = $dirnavn."/$file";
       	$files[$i]["mtime"] = filemtime($dirnavn."/$file");
        $i++;
   }
}
closedir($dir);

usort($files, "cmp");

while(list($key, $value) = each($files))
{
$file_list .= '<a href="index.php?side=bilder6&id='.$value['name'].'"><img src="'.$value['name'].'" width="50" height="50" border="0"></a>';
}


echo "$file_list";
echo "<br>";

echo "<br>dir=$dir";
echo "<br>file=$file";
echo "<br>files=$files";
echo "<br>key=$key";
echo "<br>value=$value<br>";

?>

 

nå åpner den bilder helt fra root

eksempel:

/home/kenwo/public_html/foto/thumbs/plassen.jpg

det virker ikke med inkluderingen av bildene virker det som

 

inkluderingen av bildet scriptet ser slik ut hvis det er til noe hjelp:

<?php

//list($width, $attr) = getimagesize("http://www.kenwo.net/foto/$id.jpg");  
$chk_isset_bilde = isset($bilde);    

if (($chk_isset_bilde)) { 
 
   $forbidden_1 = ereg("/", $bilde); 
   $forbidden_2 = ereg("\.\./", $bilde);  

   if ($forbidden_1 OR $forbidden_2) { 
       echo "<h1>FY! \n";  
       echo "Ikke lov!</h1>\n";  
   }  }

echo "<img src=\"foto/$id\" width=\"760\" alt=\"$id\" border=0>";  

?>

 

det er ikke mye igjen nå ser det ut til... :thumbs:

Skrevet

Du får prøve deg på denne, studer litt, har kommentert litt smått her og der:

<?php
// Compare funksjon som sorterer dato synkende
function cmp($a, $b)
{
   return strcmp($b["mtime"], $a["mtime"]);
}


// Relative og absolute path's
//$relative_path = "/foto/thumbs";
$relative_path = "foto/thumbs";
$absolute_path = getcwd()."/".$relative_path;


// Her lister vi bare filer som slutter på en bestemt extension
$dir_resource = opendir($absolute_path);
$i = 0;
while( false !== ($file = readdir($dir_resource) ) )
{
   if( eregi("/$.+\.jpeg|jpg|png|gif^/", $file) )
   {
       $files[$i]["name"] = $file;
       $files[$i]["mtime"] = filemtime($absolute_path."/$file");
       $i++;
   }
}
closedir($dir_resource);


// Sorterer arrayet etter dato synkende
usort($files, "cmp");


// Viser en html-liste over filene i arrayet
foreach($files as $file)
{
   echo "<a href=\"listebilder.php?side=bilder6&id=".basename($file['name'])."\"><img src=\"$relative_path/".basename($file['name'])."\" width=\"50\" height=\"50\" border=\"1\"></a><br/>\n";
}


/**
* Koden som kommer under her tilhører kanskje en annen php fil, men slang alt i en test fil
*/

$relative_path = "foto";
$absolute_path = getcwd()."/".$relative_path;


// Dette er vel en form for sjekk at id'en ikke er noe annet en filnavnet
if( isset($_REQUEST['id']) )
{
   // Denne gir oss bare filnavnet og ikke noe paths
   $id = basename($_REQUEST['id']);
   
   // Sjekker om fila eksisterer
   if(file_exists($absolute_path."/$id"))
   {
       echo "<img src=\"$relative_path/$id\" width=\"760\" alt=\"$id\" border=0>";
   }
   else
   {
       echo "<h2>FY skamme deg!</h2>";
   }
}
?>

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...