Leon: Problem mit include

Moin,

in meiner Website verwende ich an 2 Stellen in der index.php "include-scripte".
Dargestellt werden sollen einmal der Inhalt des Hauptfensters und ein Vote an der Seite.
Dafür habe ich über dem html-Teil der Datei dieses hier stehen:
------------------------------
<?
if ($p=='') {
 $p="sites/news/news";
 $l="?";
}
else {
 $variable="$p";
}
?>
<?
if ($q=='') {
 $q="vote/myPoll.php";
 $l="?";
}
else {
 $variable="$q";
}
?>
------------------------------
was ja im prinzip beides das gleiche ist. Beim unteren habe ich die p's durch q's ersetzt.

weiter unten auf der seite dann das hier:
-----
<?php include ("$p.htm") ; ?>
-----
(weil dort nur htm's angezeigt werden sollen)
und das hier:
-----
<?php include ("$q") ; ?>
-----
(wo php's angezeigt werden sollen)

Das anzeigen der gewünschten Dateien klappt soweit auch gut.
In der myPoll.php gibt es nun 2 links:
-----
<FORM ACTION="?q=vote/myResults.php" METHOD="post">
-----
und:
-----
<a href="?q=vote/myResults.php?voted=getResults">View Results</a>
-----
Klickt man auf den oberen, klappt alles - die gewünschte Seite wird richtig dargestellt.

Beim unteren allerdings kommt die Fehlermeldung:
-----
Warning: Failed opening 'vote/myResults.php?voted=getResults' for inclusion (include_path='.:..') in /home/seetheronline.webshells.net/www/index.php on line 205
-----

Zeile 205 in der index.php ist diese:
-----
<?php include ("$q") ; ?>
-----

Ich vermute, dass es damit zusammenhängt, dass der zweite Link nicht nach ".php" zuende ist.

zum besseren Verständnis könnt ihr es ja mal ausprobieren:
http://www.seether-online.de

Ich wäre um Hilfe äußerst dankbar :)

MfG,
Leon

  1. Hm das ganze ist jetzt ziemlich lang geworden, sorry.
    Nochmal kurz:

    oben in der index.php steht:

    -----
    <?
    if ($q=='') {
     $q="vote/myPoll.php";
     $l="?";
    }
    else {
     $variable="$q";
    }
    ?>
    -----

    weiter unten:
    -----
    <?php include ("$q") ; ?>
    -----

    Es soll etwas includiert werden, dass "dateiname.php?undnoch=weiter" heisst, dabei kommt eine fehlermeldung mit dem verweis auf die Zeile mit "<?php include ("$q") ; ?>"

    Ich hoffe jetzt ist es verständlicher ;-)

    1. wozu die hochkommatas? es ist doch eine variabel.
      änder es mal folgendermassen ab:

      <?
      if($q == '') {
      $q = "vote/myPoll.php";
      $l = "?";
      }
      else {
      $variable = $q;
      }
      ?>

      <?php include($q); ?>

    2. Hallo,

      Es soll etwas includiert werden, dass "dateiname.php?undnoch=weiter" heisst

      Geht nicht. Bitte lies die dclp-FAQ:
      Wie übergebe ich Variablen an eingebundene Dateien?
      http://www.dclp-faq.de/q/q-datei-uebergabe.html

      Gruesse,

      Thomas

      --
      Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
      Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
      Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/
      1. Hallo,

        erst mal danke, jetzt weiss ich, dass es nicht geht.
        Allerdings bin ich leider des PHP's nicht wirklich mächtig und bin nicht in der Lage den Script richtig anzupassen.

        Könntest du (oder jemand anders) mir den Script so anpassen, dass er funktioniert?
        (Ich hoffe das ist jetzt nicht zu dreist gefragt. Wenn nicht ist auch ok...)

  2. Hallo Leon,

    $variable="$p";
    <?php include ("$p.htm") ; ?>

    du weißt, dass du dir damit ein scheunentorgroßes Sicherheitsloch einfängst? Da muss nur jemand daherkommen und die Seite mit index.php?http://www.example.com/boesesscript aufrufen - an deiner Stelle würde ich die Datei _sofort_ vom Server löschen.

    <a href="?q=vote/myResults.php?voted=getResults">View Results</a>

    damit bekommst du keine Variable $q[1] nur eine $voted[1] ...

    Warning: Failed opening 'vote/myResults.php?voted=getResults' for inclusion (include_path='.:..') in /home/seetheronline.webshells.net/www/index.php on line 205

    ich weiß nicht, was php macht wenn $q leer ist, aber vermutlich versucht es die Datei selbst nochmal einzubinden?

    [1] die Variablen $q und $p (und $voted) bekommst du nur wenn register_globals auf on steht (was bei dir so ist) - wenn diese Einstellung auf off steht (und das ist in neueren Versionen standardmäßig so) musst du das Array $_GET verwenden - das was vorher in $q steht, steht dann in $_GET['q'].

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    1. Hallo Leon,

      $variable="$p";
      <?php include ("$p.htm") ; ?>
      du weißt, dass du dir damit ein scheunentorgroßes Sicherheitsloch einfängst? Da muss nur jemand daherkommen und die Seite mit index.php?http://www.example.com/boesesscript aufrufen - an deiner Stelle würde ich die Datei _sofort_ vom Server löschen.

      ähm... nein, wusste ich nicht. Ich kenne mich mit PHP leider kaum aus, habe den code von einer anderen Seite genommen.

      Wo liegt das problem daran?
      Überhaupt mit include zu arbeiten?

      hmm, was soll ich tun?

      1. Hallo,

        ähm... nein, wusste ich nicht. Ich kenne mich mit PHP leider kaum aus, habe den code von einer anderen Seite genommen.

        Das ist gefaehrlich.
        Viel gefaehrlicher als z.B. bei JavaScript, weil JS
        nur auf dem Browser ausgefuehrt wird und dieser
        dafuer zustaendig ist, dass nichts boeses passiert.

        PHP laeuft auf dem Webserver und hat dort viele
        Moeglichkeiten, z.B. Dateien zu veraendern oder
        Mails zu verschicken.

        Wo liegt das problem daran?

        Jemand kann Dir so "boesen" PHP-Quellcode unterjubeln
        und damit z.B. saemtliche Dateien in Deinem Verzeichnis
        des Servers loeschen, Deinen Server zum Versenden
        von Spam-Mails missbrauchen u.s.w.

        Entferne dieses Script sofort.
        Alles andere ist grobfahrlaessig, fast "virtueller Selbstmord"!

        Überhaupt mit include zu arbeiten?

        ... ist nicht gefaehrlich, solange Du nur
        Deinen eigenen Code ausfuehren laesst und
        verstehst, was Du tust.

        Lerne PHP, z.B. mit einem guten, aktuellen Buch,
        oder mit einer der folgenden Websites:

        http://www.php.net/manual/en/ (englisch, aktuell und vollstaendig)
        http://www.php.net/manual/de/ (deutsch, z.T. veraltet/unvollstaendig)
        http://www.php.net/manual/de/getting-started.php (deutsche Grundlagen)
        http://www.dclp-faq.de/ (sehr aktuelle, deutsche FAQ)
        http://schattenbaum.net/php/ (leicht veraltet, dafuer einfach)
        Weitere Links:
        http://www.dclp-faq.de/q/q-php-mehr-info.html

        Gruesse,

        Thomas

        P.S. "Fertige Loesungen" kriegst Du hier normalerweise nicht.
        Schliesslich heisst es SELF-Forum. ;-)

      2. Hallo Leon,

        ähm... nein, wusste ich nicht. Ich kenne mich mit PHP leider kaum aus, habe den code von einer anderen Seite genommen.

        Das ist schon mal Grundsätzlich nicht so toll!
        1. Es soll schon vorgekommen sein das sich solche spendable Coder eine nette Backdoor eingebaut haben um lustig Deine persönlichen Daten auf dem Server auszuspionieren/löschen/ändern/missbrauchen.

        2. Wolfgang Wiese alias XWolf (ist Dir vielleicht ein Begriff,jedenfalls jemand der es wissen muss), schrieb mal hier im Forum glaub ich das er freie Script mal stichprobenartig untersucht hat und eklatante Sicherheitslücken gefunden hat.

        3. Aus 1. und 2. folgt das man sich schon ein wenig auskennen sollte wenn man fremden Code nutzen möchte. Am besten fährst Du noch mit so gescheiten repositories wie http://pear.php.net/. Allerdings ist ein Anfänger AFAIK damit z.T. ein wenig überfordert.

        4. Aus 3. folgt also, lieber langsam an die Sache rangehen, selber versuchen die Lösung zu finden und ggf. im Forum um Hilfe bei konkreten Problemen ersuchen.

        Wo liegt das problem daran?

        Das Problem ist das Du einem importierten Parameter blind vertraust und das ist insbesondere bei include() aber auch bei file(), fopen etc; eigentlich alles wo Du Dir ganze Dateien herholst sehr gefährlich. Wenn man das so lösen möchte sollte Dein Script schauen ob es das bekommt was es erwartet und ggf. eine Fehlermeldung schmeissen bzw. ein Standardwert nehmen. Importierte Parameter über Formulare und insbesondere über die URL sollten _IMMER_ (zwanzig Ausrufezeichen) über die Superglobalen $_POST, $_GET etc. bzw. bei Cookies über $_COOKIE importiert und anschliessend auf Plausibelität geprüft werden! Warum schreib ich eigentlich so viel? :-) Alles weitere und viel besser erklärt findest Du bei http://www.dclp-faq.de/q/q-sicherheit-parameter.html

        Überhaupt mit include zu arbeiten?

        Nee das ist nicht so schlimm, es geht mehr um die Parameterannahme und Verwertung derselben...

        hmm, was soll ich tun?

        Beschäftige Dich auf jeden Fall mit den Grundlagen (http://de3.php.net/manual/de/ und http://www.dclp-faq.de/) oder lass die Finger davon und übergebe das an jemand der sich damit auskennt :-)

        Grüsse AndreD

        1. ok, langsam raucht mir die birne... so viel auf einmal :-o

          auf alle fälle aber danke, dass ihr so viel schreibt. Damit ich die Seite weiter laufen lassen kann hab ich das mit dem include erst mal an jemanden weitergegeben, der sich damit auskennt.

          Und dann werde ich sehn obs mein Zeitplan zulässt, mich selber mal etwas mehrmit PHP zu beschäftigen. Habe schon vor ewigkeiten mal nen Buch gekauft aber bin nie dazu gekommen das auch zu lernen...

          1. ok, langsam raucht mir die birne... so viel auf einmal :-o

            *gg*

            auf alle fälle aber danke, dass ihr so viel schreibt. Damit ich die Seite weiter laufen lassen kann hab ich das mit dem include erst mal an jemanden weitergegeben, der sich damit auskennt.

            Ja, das Thema ist halt IMHO ziemlich wichtig und daher finde ich es echt gut das Du die Problemlösung an jemanden mit mehr Erfahrung weitergibst, Du tust Dir glaub selbst ein Gefallen damit :-)

            Und dann werde ich sehn obs mein Zeitplan zulässt, mich selber mal etwas mehrmit PHP zu beschäftigen. Habe schon vor ewigkeiten mal nen Buch gekauft aber bin nie dazu gekommen das auch zu lernen...

            Die Einsteigerbücher die ich bisher so angeschaut habe, haben das Thema Sicherheit nicht wirklich angesprochen. Das ging höchstens soweit das gesagt wurde das register_globals ab PHP4.2 standardmässig auf off steht... Persönlich kann ich Dir ein Buch empfehlen das auch Einsteiger weiterhelfen könnte: http://www.amazon.de/exec/obidos/ASIN/3897211777/qid=1076349674/sr=1-1/ref=sr_1_2_1/028-2416760-1668554 find ich persönlich super und hat auch ein eigenes Kapitel in dem das Thema Sicherheit noch mal recht gut erläutert wird.

            Grüsse AndreD

            1. Danke für den Tipp, aber ein Buch über PHP habe ich ja erst mal schon. Erst mal sollte das reichen um reinzukommen. Sonst gibts ja auch noch online ne Menge zu erfahren, wegen sicherheit und so ;)
              An Geld fürs Buch mangelt es bei mir nebenbei auch.

              Allerdings um überhaupt was hinzukriegen muss man erst mal Zeit haben dafür... und da liegt im moment etwas der haken ;)

              Aber ich werd mal sehn wie ich zu potte komme...

              1. Hoi,

                Danke für den Tipp, aber ein Buch über PHP habe ich ja erst mal schon. Erst mal sollte das reichen um reinzukommen. Sonst gibts ja auch noch online ne Menge zu erfahren, wegen sicherheit und so ;)

                Siehe den Link den Thomas und ich gesendet haben, der ist sehr nützlich!

                An Geld fürs Buch mangelt es bei mir nebenbei auch.

                Ok stimmt, die Schinken sind nicht wirklich günstig und das von mir Empfohlene ist auch erste Auflage, d.h. da gibts keine älteren Auflagen die günstiger verscheuert werden :-(

                Allerdings um überhaupt was hinzukriegen muss man erst mal Zeit haben dafür... und da liegt im moment etwas der haken ;)

                ACK!

                Aber ich werd mal sehn wie ich zu potte komme...

                Ok, weiterhin viel Spass beim scripten usw.

                Grüsse AndreD

                1. Hello,

                  ein beständig wachsendes Tutorial findest Du auch unter
                  http://tut.php-q.net
                  Zuletzt hatte es ca. 510 Seiten in der A4-Druckversion.

                  Liebe Grüße aus http://www.braunschweig.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen