index navigation och uppbygnad

PHPportalen Forum Index » PHP Mjukstart
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
wonderwizard



Medlem i: 6590 dagar

Status: Offline



#742747
Inlägg Skrivet: 2020-04-03 23:07      Ämne: index navigation och uppbygnad Citera

hur gör ni ? är detta säkert ?
bäst ?

<?php include "header.php"; ?>

<a href="?p=home">Hem</a>
<a href="?p=about">Om Mig</a>
<a href="?p=contact">Kontakta mig</a><br><br>

<?php
$p = $_GET['p'];
switch($p)
{
default:
include('home.php');
break;

case "about":
include('about_me.php');

case "contact":
include('contact_form.php');
break;
}
?>
<?php include "footer.php"; ?>
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
harald_b
Moderator



Medlem i: 5238 dagar
Från: Tavesta
Status: Offline



#742748
Inlägg Skrivet: 2020-04-04 12:14      Ämne: Citera

Metoden du använder för att inkludera andra filer är nog att betrakta som säker.
Det som gör den säker är att det är lätt att se att koden inte kan göra något oväntat om det kommer oväntat indata.

Men du behöver tänka på att i ditt fall går det också att komma åt de inkluderade filerna direkt, om man bara känner till deras namn. En fil som inkluderas i en annan sida kommer bete sig något annorlunda än en sida som laddas direkt. I ditt fall kommer man åtminstone inte få fullständig html-kod om include-filerna laddas direkt.
Ett sätt att undvika detta är att placera de inkluderade filerna utanför webbroten.

Det här är kanske inte heller den mest flexibla lösning, ifall man t.ex skulle vilja kunna lägga till sidor dynamiskt.
Men mer flexibla lösningar tenderar också att bli svårare att genomskåda om de är säkra eller inte, så det är nog ingen större mening att ändra om inte behovet finns.

Jag har dock en liten invändning mot koden:
Det finns ingen break efter case "about", vilket gör att även contact_form.php kommer inkluderas, vilket kanske inte är så jätteuppenbart när man läser koden.
Om detta är avsiktligt hade det nog varit tydligare att skriva
PHP:
1:
 
2:
case "about":
3:
  include('about_me.php');
4:
  include('contact_form.php');
5:
  break; 
6:
 
7:
case "contact":
8:
  include('contact_form.php');
9:
  break; 
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
wonderwizard



Medlem i: 6590 dagar

Status: Offline



#742749
Inlägg Skrivet: 2020-04-04 17:11      Ämne: Citera

glömde break; på about.
min sida bygger enbart på php & html
inte dynamisk och med databaser, men det finns en framtida tanke på det

oavsett om personer "hittar" filerna direkt, så finns det inget att förstöra

en annan approach jag känner till är följande, men frågan vilket som är bäst av de 2

<?php
if ($_GET['p'] == "home")
include "home.php";

elseif ($_GET['p'] == "about")
include "about_me.php";

elseif ($_GET['p'] == "contact")
include "contact.php";

else
include "home.php";
?>
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
harald_b
Moderator



Medlem i: 5238 dagar
Från: Tavesta
Status: Offline



#742751
Inlägg Skrivet: 2020-04-05 11:57      Ämne: Citera

Det är ingen skillnad ur säkerhetssynvinkel, men jag tycker switch-varianten är något elegantare.
Du kan för övrigt hoppa över $p och använda switch($_GET['p']) direkt också.

Så länge det bara går att inkludera just de filer du själv bestämt att skall kunna inkluderas så är allt gott och väl.

En annan variant är att använda en array:
PHP:
1:
 $sidor = [
2:
  'home' => 'home.php',
3:
  'about' => 'about_me.php',
4:
  'contact' => 'contact.php',
5:
  'felsida' => 'felsida.php'
6:
];
7:
 
8:
//Om du vill ha en förvald sida
9:
if(!isset($_GET['p'])) $_GET['p'] = 'home';
10:
 
11:
//Inkludera vald sida
12:
if(isset($sidor[$_GET['p']])) include($sidor[$_GET['p']]);
13:
 
14:
//Om du vill ha en sida som laddas om man länkats fel
15:
else include($sidor['felsida']);
16:
 

Den här varianten kan sedan byggas vidare, så $sidor skapas på ett mer dynamiskt sätt, om du vill förfina vilka sidor som skall vara tillgängliga.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
LimpanDSS



Medlem i: 3007 dagar
Från: Stockholm
Status: Offline



#742757
Inlägg Skrivet: 2020-04-06 21:57      Ämne: Citera

Skulle rekommendera att du tittar på något som kallas MVC. Det är ett system (det populäraste) för att strukturera upp sidor på. Kolla något utav de vanligaste ramverken, sök på "php frameworks" på Google.

Annars om du vill vara riktigt modern och korrekt så har man mer och mer börjat röra sig mot att separera Frontend och Backend helt och hållet, via så kallade REST api:er. Du skriver alltså din backend kod i PHP (ramverk, ex: Lumen) i form av ett REST api där autentisering sker med oAuth (alt. JWT). Sedan skapar du en Frontend i ex. React, Cordova eller Javascript och kopplar dem via REST.

Kan vara värt att kika på om du vill bli riktigt duktig.
 

_________________
Github
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » PHP Mjukstart
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic