?etusivu

empty 02.12.02 18:04

Oma käyttämäni versio. Haluaisin kommentteja tietoturvasta ynm!

 Tekstiversio  Arvo: 4 (38 ääntä)  Äänestä: +  -
<?php
//Kommentteja pätkän tietoturvasta.
//Lysti on vedelty päästä, eli korjailen jos virheitä löytyy :)

switch($SERVER['query_string']){

case etusivu:
include("etusivu.php");
break;

case tähän:
include("voi_sitten_jatkaa_tähän_tyyliin.php");
break;

case :
include("etusivu.php");
break;

default:
include("404_sivu.php");
}
?>

Akiro 21:19 2.12.02 
Ei tuossa oikein tietoturvan kannalta mitään kommentoitavaa ole, juuri tuohon tyyliin se pitääkin tehdä. Ok perusskripti.
ane 16:30 3.12.02 
Katso kumminkin file_exists() - komennon avulla...tai sitten käytä @include("filu.php"); niin ei tule näytölle virheitä.
empty 17:12 3.12.02 
Eli onko tuossa pahoja aukkoja?
empty 17:14 3.12.02 
Muokkaaminen kusee...
thefox 15:56 4.12.02 
Mitäs aukkoja noin lyhyeen koodinpätkään mahtuisi? :) Ja ynm ei muuten ole tietääkseni mikään lyhenne ;)
Joo on ihan asiallinen vinkki kyllä.
empty 16:59 4.12.02 
njaa.. tollahan tyylillä ei voi muuta dataa sendii urlin mukana...........
jip 23:03 5.12.02 
Joo eipä skriptissä mitään vikaa, mut noi kaks asiaa on vähän ristiriidassa keskenään.

"Oma käyttämäni versio."
ja
"//Lysti on vedelty päästä"
empty 08:07 7.12.02 
Jip:Olen käyttänyt tuota. En kopioinut sitä mistään(levynputsauksen jälkeen varmaan hukkunut).
edward 21:55 16.12.02 
Ei toiminut netscapella...
empty 14:10 17.12.02 
Skriptin toimivuus EI riipu selaimesta.
daqu 20:00 20.12.02 
Eikös tuohon defaulttiin lähinnä kannattaisi laittaa vaikkapa etusivu eikä error-sivu?
d0ggie 13:34 21.12.02 
Ääh, sunhan pitäisi rakentaa sellainen sysyteemi, että sinulla on globalit header ja footer (siis kaikille sivuille) samat, ja sitten siihen väliin luet jostain tiedostosta sisällön.

Ite olen juuri sellaista rakentamassa (tai no skriptistä on eka versio ollut jo koulun käytössä alkuvuodesta -02) ja kohtahan tuo on valmistumassa, kaikki hakemistolistaukset, konffitiedostot, authentikointi, jne. on jo valmiina, enää viilaus puuttuu.
bluebyte 11:33 24.12.02 
Miten tätä käytetään?
bluebyte 15:49 24.12.02 
Tässä on virhe. Muuta $QUERY_STRING -> $_SERVER['QUERY_STRING']
Toi vanha ei ainakaan näyttänyt toimivan minulla.
ane 19:26 25.12.02 
GeoHound: sulla ei ole ilmeisesti register_globals päällä. Älä kumminkaan pistä.
tezi 17:58 27.12.02 
Haluaisiko joku kertoa miten tota käytetään. Kun ei oikeen juntti ymmärrä :)
empty 15:30 1.1.03 
vaihdettu superglobaaliksi muuttuja
Phydax 20:58 1.1.03 
en saa tota toimiman :P
mixture 13:58 2.1.03 
Sen pitäisi kait olla $_SERVER['QUERY_STRING']
empty 19:07 3.1.03 
toi ei sit varmaa toimi enää jos laittaa vaiks näin
index.php?info&nimi=fage
et aukeis info sivu?
empty 17:50 10.1.03 
fage, ei niin. sen takia itekkin vaihdoin ?id=etusivu tyyppiseen. ja toi pitäs olla $_SERVER['QUERY_STRING'] alaviiva mukaan.
Tiiffi 06:56 23.2.03 
hmm... kuinka tuota käytännössä sovelletaan?
En ole oikein vielä perillä php:n käytöstä.
empty 14:29 24.5.03 
Tohon vois jotenkin tehä sillee et ku on siinä sivussa, niin se linkki ei olis linkki vaan vaikka teksti. Tyyliin:
- Etusivu
- Vitsit <- linkki
- Gallup <- linkki
- Vieraskija <- linkki
- Ja muut <- linkki
Jos oisit sillä hetkellä etusivulla...
empty 11:35 14.6.03 
Ihan kiva perusversio... toimii jos haluaa vain includata data suoraan filestä.. Itselläni käytössä kantapohjainen ratkaisu, jolla helpompi lisätä / poistaa / piilottaa sivuja.. ylläpito helppoa kun siihen on lisätty vielä OnLine WySiWyg editori..
rofl 10:49 21.6.03 
Toivottavasti toimii.Aion kokeilla sunpointissa.
morkkis 13:08 12.7.03 
ei sunpointis toimi php
Flander 22:23 25.7.03 
Aika tyhmää, sillä joku tahtoo bugittaa mbnetilläkin.
Flander 22:24 25.7.03 
Hassua sillä nyt se sitten rupes toimimaan
rainmikko 09:13 23.1.04 
Tuota noin... Miten toi käytännössä toimii? Toimiiko niin että on linkki jokuSivu.php?etusivu ja sit menee etusivulle, tai jokuSivu.php?toinenSivu ja sit menee toiselle sivulle? Ymmärsinkö eli en?
McH 14:45 20.2.04 
Itse käytän tätä tyyliä:
if($_GET['toiminto'] == "etusivu") {
@include_once("etusivu.php");
}elseif($_GET['toiminto'] == "palaute") {
@include_once("palaute_lomake.php");
}else{
@include_once("etusivu.php");
}

Näin ollen GETissä pystyy kuskaa usean muuttujan ja tietoturva on kohdallaan, niin pitkään kun includet on puhtaita, oikeat polut ja ilman muuttujia.
Petesku 14:52 2.4.04 
Miten tälläistä käytetään?
MattRaven 18:53 19.4.04 
Olen juuri aloittelemassa PHP:tä :)
Koodia osaan jotenkin lukea.

Muutin tuota hieman omaan tarpeeseen.
Vai onko jokin muu keino liittä php tiedosto johinkin
kohtaan sivussa.

tein index.php ja siihen alkuun tästä muokatun koodin
<?php
switch($SERVER['query_string']){
case menu:
include("menu.php");
break;
}
?>

No... ainakin toistaiseksi toimii.
editoitu: 06:31 6.7.04
Nixu89 06:30 6.7.04 
Minä käytän tätä:
<?php

$sivu = $_GET['sivu'];

echo "Tekstiä...";

switch ($sivu) {
case $sivu:

if (file_exists("$sivu.php")) {
include $sivu.".php";
}
else {
echo "Hakemaasi sivua ei löydy";
}

break;
default:

echo "...";

break;
}

echo "Täälläkin tekstiä...";

?>

Ja näyn voi olla useampi muuttuja kerrallaan tuolla urlissa...
lahtis 03:07 23.7.04 
itse käytän tämmoistä viritystä joka käyttää vielä skinejä.
<?PHP
require_once("./inc/functions.inc.php");
require_once("config.php");
if(isset($config_skin) and $config_skin != "" and file_exists("./skins/${config_skin}.skin.php")){
require_once("./skins/${config_skin}.skin.php");
}else{
require_once("./skins/default.skin.php");

}

// ********************************************************************************
// Include System Modules
// ********************************************************************************
//name of mod //access
$system_modules = array('main' => 'any',
'news' => 'any',
'tokasivu' => 'any',
'kolomas' => 'any',
'admin' => 'admin',

);


if($mod == ""){ require("./inc/main.mdu"); }
elseif( $system_modules[$mod] )

{
if($system_modules[$mod] == "user"){ require("./inc/". $mod . ".mdu"); }
elseif($system_modules[$mod] == "admin" and $member_db[1] == 1){ require("./inc/". $mod . ".mdu"); }
elseif($system_modules[$mod] == "admin" and $member_db[1] != 1){ msg("error", "Access denied", "Only admin can access this module"); exit;}
elseif($system_modules[$mod] == "any") {require("./inc/{$mod}.mdu");}
else{ die("Module access must be set <b>admin</b>"); }
}
else{ die("$mod is NOT a valid module. $mod module not found."); }



?>
editoitu: 19:27 24.7.04
Kaksois-W 19:26 24.7.04 
Itse näkisin suurimmaksi virheeksi sen, että tiedosto ovat sijoitettuna public_html -kansioon, toisaalta jos sinun saitti on mbnetissä, niin ei sitten voi mitään.

Eli itse tekisin sen näin, eli ainoastaan kuvat ja index.php olisivat public_html -kansiossa:

<?php
//Kommentteja pätkän tietoturvasta.
//Lysti on vedelty päästä, eli korjailen jos virheitä löytyy :)

switch($SERVER['query_string']){

case etusivu:
include("/home/kayttajatunnus/sivut/etusivu.php");
break;

case tähän:
include("/home/kayttajatunnus/sivut/voi_sitten_jatkaa_tähän_tyyliin.php");
break;

case :
include("/home/kayttajatunnus/sivut/etusivu.php");
break;

default:
include("/home/kayttajatunnus/sivut/404_sivu.php");
}
?>
eldonor 12:23 22.1.05 
<?php
switch($_SERVER['QUERY_STRING']) {
case "index":
@include("index2.php");
break;

case "jatkuu":
@include("jatkuu.php");
break;

case "":
@include("index2.php");
break;

default:
@include("404.php");
}
?>


En tosin ole postannut yhtään koodinpätkää, joten en tiedä voiko noita sitten muokata (on kylläkin ihme jos ei voi), muuten ainakin ihmettelisin miksei tätä ole korjattu.
nlcci 14:18 16.2.05 
Mitens jos tekis suoraan näin:

<?php
$osoite = $_SERVER['QUERY_STRING'];
switch($osoite)
{
case "$osoite":
@include("$osoite.php");
break;
}
?>

Vai onko tuossa tietoturva ongelmia... Vai oliko joku jo tehnyt näin....
tomik 09:56 22.2.05 
Hieman offtopikkia, mutta sellasta kysyisin, että mitä tuo "@" -merkki tarkoittaa tuolla includen alussa?
editoitu: 17:25 5.5.05
empty 17:25 5.5.05 
tomik kirjoitti:
...mitä tuo "@" -merkki tarkoittaa tuolla includen alussa?


Eli ei tulosta virheitä käytetystä komennosta vaikka tiedostoa ei löytyisikään..
Ezku 00:32 25.7.05 
smile kirjoitti:
tomik kirjoitti:
...mitä tuo "@" -merkki tarkoittaa tuolla includen alussa?
Eli ei tulosta virheitä käytetystä komennosta vaikka tiedostoa ei löytyisikään..
@ estää virheiden tulostumisen käytetystä funktiosta. Include-funktioiden kanssa sillä on sellainen "kiva" sivuvaikutus, että itse includetussa tiedostossakin ilmenneet virheet nielaistaan, ja sitten sitä ihmetellään kun näkyy pelkkää tyhjää.
Grimmi- 08:53 11.8.05 
Itelläni menee etusivuni tyyliin:

meta tagit
linkit
vaihtuva alue
footter

Elikkä, linkit vievät vaihtuva alueella oleviin include ja muihin ehtoihin. esim, jos haluan selata linkkejä, koodi hakee urlista ?area=link kohan mukaan mitä sieltä nyt tarvitsee. omassa koodissani se tekee tämän -> include("link.txt");

Voin sendiä koodin jos haluat.
editoitu: 18:57 15.12.05
sumu 18:56 15.12.05 
Itse olen tehnyt asian jotakuinkin näin. Onko kuinka hyvä tapa? Alottelija kun vielä olen... :)

<?php
   if (isset($_GET["menu"]))
   {
   $type = $_GET["menu"];
   if ($type == 0) include "main.html";
   if ($type == 1) include "linkit.html";
   if ($type == 2) include "tiedostot.html";
   }
   else
   {
   include "error.html";
   }
?>


linkit menee sitte tällein.

<a href="index.php?menu=0">Etusivu</a>

jne.
Ape 15:34 22.12.05 
Näin on paras:

<?php

$sivu = $_GET["sivu"];
if(isset($sivu) && is_file($sivu.".php"))
{
include ($sivu.".php");
}
elseif(!is_file("$sivu.php") && $sivu)
{
include ("virhe.php");
}
else
{
include ("sivut/etu.php");
}
?>

Linkit tyyliin:

<a href="?sivu=sivut/pelit">Pelit</a>
tkr7 14:33 26.12.05 
MIe oon yleensä tehny tämän niin, että listaan määrätyn/määrättyjen tiedostoloppujen tiedostot tietystä hakemistosta (ja tarvittaessa myös sen alihakemistoista) ja mahdollistan vain näiden tiedostojen sisällyttämisen. Siis kun listaan ne ensin taulukkoon, niin sitten vain katson, löytyykö tästä taulukosta syötetyn merkkijonon mukaista tiedostoa.

Ja tuohon Apen tapaan kummentoisin: Tuossa tuos $sivu voi olla missä vain (myös toisella palvelimella) ja is_file-funktio palauttaa tällöinkin true, joten __kyseessä on suuremman luokan tietoturvariski__. Ajattellaanpas käyttäjää, joka pistää vaikkapa omalle palvelimelleen hakemistoon (olkoon vaikka sivut), jossa php-tulkkaus ei ole .php-tiedostoille päällä, tiedoston sivu.php. Näin tuo koodi suoritetaan vasta siellä includaajan päässä. Hän vain syöttää URL:n perään merkkijonon ?sivu=http://omapalvelin.org/sivut/sivu ja hänellä on täysi valta tuolla kohdepalvelmiellla (PHP:n käyttäjäoikeuksilla).

Tässä versio itse käyttämästäni sivupohjasta. Se on varsin helppokäyttöinen, tukee rajattomasti tai rajoitetuisti sisäkkäisiä hakemistoja, valittuja tiedostpäätteitä, syötteen tai tiedostonimien kirjasinkoolla ei ole väliä ja tämän pitäisi olla turvallinen:

<?php

### Sivupohja:

// Asetukset:
$sivuHakemisto = "sivut"; // hakemisto, jossa sisällytettävät sivut ovat
$listaaAliHakemistot = true; // numeroarvolla syvyysrajoitus, true=kaikki syvyydet, false|0 = ei listausta
$sallitutTiedostopäätteet = array( ".php", ".inc", ".html", ".xhtml" ); // voi olla merkkijono tai taulukko
$haettuSivu = $_GET["sivu"];
$virhe404sivu = "404"; // Sivu (hakemistossa), joka ladataan, kun haettua sivua ei löydetä
$etusivu = "etusivu"; // Sivu, joka ladataan, kun syötettä ei ole annettu


// Testataan, onko hakemisto $sivuHakemisto olemassa:
if( is_dir( $sivuHakemisto ) ) {
   // Listataan tiedostot hakemistosta $sivuHakemisto:
   $tiedostot = listFiles( $sivuHakemisto, $sallitutTiedostopäätteet, false,
                     $listaaAliHakemistot, false, true, true );

   // Sisällytetään valittu tiedosto:
   if( ! isset( $haettuSivu ) || trim( $haettuSivu ) == "" ) {
      // Haettavaa sivua ei ole määritelty,
      // olkoon se etusivu:
      $haettuSivu = $etusivu;
   }
   
   $haettuSivu = strToLower( $haettuSivu );
   if( isset( $tiedostot[ $haettuSivu ] ) ) {
      // Haettu sivu löydyettiin tiedostoista, sisällytetään se:
      include_once( $sivuHakemisto . "/" . $tiedostot[ $haettuSivu ] );
   } else {
      // Haettua sivua ei löytynyt:
      // Sisällytetään 404-virhesivu, jos se löydetään:
      if( isset( $tiedostot[ $virhe404sivu ] ) ) {
         include_once( $sivuHakemisto . "/" . $tiedostot[ $virhe404sivu ] );
      } else {
         // Sivua ei löydy -sivua ei löytynyt. Käsittele itse:
         print "404-virhesivua \"$virhe404sivu\" ei lötynyt yritettäessä etsiä löytymätöntä sivua \"$haettuSivu\".";
      }
   }
} else {
   // Sivuhakemistoa ei löydy:
   print "Sivuhakemistoa $sivuHakemisto ei löytynyt.";
}


// Tiedostolistausfunktiot:
function listFiles( $dir = ".", $fileNameEnd = true, $dirs = true,
      $subDirs = false, $multiArrayListing = true, $assosiativeList = false, $caseInsensitive = false ) {
   if( $fileNameEnd === false && $dirs === false ) {
      // Do not list any files or directories:
      return array();
   }
   $list = array();
   $dh = openDir( $dir );
   while( false !== ( $file = readDir( $dh ) ) ) {
      if( is_file( $dir . "/" . $file ) ) {
         if( $fileNameEnd !== false && ( $fileNameEnd === true
               || false !== ( $end = endMatch( $file, $fileNameEnd, $caseInsensitive ) ) ) ) {
            if( $assosiativeList ) {
               $list[ strtolower( substr( $file, 0, -strlen($end) ) ) ] = $file;
            } else {
               $list[] = $file;
            }
         }
      } else if( $file != "." && $file != ".." ) {
         if( $dirs && ! $multiArrayListing )
            $list[] = $file;
         if( $subDirs ) {
            $sub = listFiles( $dir . "/" . $file, $fileNameEnd,
               $dirs, (is_int( $subDirs ) ? ($subDirs-1) : $subDirs),
               $multiArrayListing, $assosiativeList, $caseInsensitive );
            if( ! $multiArrayListing ) {
               foreach( $sub as $fileKey => $subFile ) {
                  if( $assosiativeList )
                     $list[ strtolower($file) . "/" . $fileKey ] = $file . "/" . $subFile;
                  else
                     $list[] = $file . "/" . $subFile;
               }
            } else {
               $list[ $file ] = $sub;
            }
         }
      }
   }
   closeDir( $dh );
   return $list;
}

function endMatch( $str, $array, $caseInsensitive = false ) {
   if( is_array( $array ) ) {
      foreach( $array as $value ) {
         if( strlen( $str ) >= ($len = strlen( $value ) )
               && match( substr( $str, -$len ), $value, $caseInsensitive ) )
            return $value;
      }
   } else if( is_string( $array )
         && strlen( $str ) >= ($len = strlen( $array ) )
         && match( substr( $str, -$len ), $array, $caseInsensitive ) )
      return $array;
   return false;
}

function match( $str1, $str2, $caseInsensitive ) {
   if( $caseInsensitive )
      return ( strToLower( $str1 ) == strToLower( $str2 ) );
   else
      return ( $str1 == $str2 );
}

?>
cMaster 18:55 6.1.07 
Mä käytän seuravanlaista sivuillani:

<?php

$polku = "inc/";

$sivu = $_GET["sivu"];

if ($sivu == "etusivu"){

$sivu == "etusivu";

}
elseif ($sivu == "palaute"){

$sivu == "palaute";

}
else {

$sivu == "404";

}
@include_once("{$polku}$sivu.php");

?>

Tämä on simppeli :)
Plutonium 15:04 25.9.08 
<?php
if (isset($_GET["menu"]))
{
$type = $_GET["menu"];
if ($type == 0) include "main.html";
if ($type == 1) include "linkit.html";
if ($type == 2) include "tiedostot.html";
}
else
{
include "error.html";
}
?>

Mitäs tuos meinataan ja miten ton menu=0 jutun voi vaihtaa vaikka sivu=etusivu
editoitu: 21:49 23.2.09
defer 21:48 23.2.09 
Tässä olis mun versio. Tossa saa eri tyylin sille näkyvissä olevalle sivulle ja muutenkin ihan toimiva pätkä.


PHP
<html>
<head>
<style type="text/css">
body { background: #FFF; margin: 100px; color: #000; font: 16px Arial; }
a.other { background: #999; padding: 10px; color: #000; text-decoration: none; }
a.other:hover { background: #BBB; padding: 10px; }
a.active { background: #DDD; padding: 10px; color: #000; text-decoration: none; }
</style>
</head>
<body>
<?php
$links = array("main", "info", "me", "wtf");
$page = $_GET['page'];

# tulostetaan linkit
foreach ($links as $value) {
  if ( $page == $value ) {
  echo "<a class=\"active\" href=\"?page=".$value."\">".$value."</a>\n";
  }
  else {
  echo "<a class=\"other\" href=\"?page=".$value."\">".$value."</a>\n";
  }
}
echo "<br /><br />";

# haetaan oikea sivu kansiosta "inc"
if ( $page == "" ) {
  include('inc/main.php');
}
elseif ( file_exists('inc/'.$page.'.php') ) {
  include('inc/'.$page.'.php');
}
else {
  echo "Page \"".$page."\" not found.";
}
?>
</body>
</html>
 
editoitu: 00:53 21.7.09
Julli 00:52 21.7.09 
On kyllä vanha keskustelu jo tämäkin, mutta jos tästä on jollekkin hyötyä, niin hyvä.
Käyttäjä & hakukone ystävällisemmät linkit voi tämän "?etusivu" lisäksi vielä tehdä halutessaan näin .htaccess avulla.

RewriteRule ^etusivu$ index.php
RewriteRule ^sivu1$ index.php?sivu=sivu1
RewriteRule ^sivu2$ index.php?sivu=sivu2

Nämä osoitteet näkyvät siis .htaccess tiedostoon lisäyksen jälkeen esim:
http://www.sinun-osote.fi/sivu1
http://www.sinun-osote.fi/sivu2

Jos haluat käyttää ns hakemisto muotoa, lisää $ merkin eteen / merkki ja osoitteet näkyvät http://www.sinun-osote.fi/sivu1/

tai myös näin:

RewriteRule ^sivu1$ sivu1.php
Tämä siis näkyy esim http://www.sinun-osote.fi/sivu1.php -> http://www.sinun-osote.fi/sivu1

Tai esim:

RewriteRule ^sivu1/$ sivu1.php
Tämä siis näkyy esim http://www.sinun-osote.fi/sivu1.php -> http://www.sinun-osote.fi/sivu1/

Tämä vaatii .htaccess tiedoston, ja sielä nämä yllä mainitut rivit.