Gå til innhold

Lære get og sikkerhet


Anbefalte innlegg

<?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:

Lenke til kommentar
Videoannonse
Annonse

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/).

Lenke til kommentar

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

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:

Lenke til kommentar

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

Lenke til kommentar

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/>";
}
?>

Lenke til kommentar

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

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.

Lenke til kommentar

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
Lenke til kommentar
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/";

Lenke til kommentar

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.

Lenke til kommentar

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:

Lenke til kommentar

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:

Lenke til kommentar

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>";
   }
}
?>

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...