textarea-eingabe erzeugt fehler

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • textarea-eingabe erzeugt fehler

    hallo community!

    ich beschäftige mich seit kurzem mit php und bin nun auf ein problem gestoßen zu dem ich keine hilfe finden konnte. ich versuche eine php-basierte, kleine, simple webseite zu basteln auf der man mittels admin-oberfläche den inhalt bestimmter dateien im webbrowser ändern kann.

    das script funktioniert für meine zwecke völlig ausreichend, jedoch führt die eingabe einer ganz bestimmten zeichenkette zu einer fehlermeldung - und ich weiß nicht warum.

    zunächst - ein paar codeschnipsel. um es übersichtlich zu halten verwende ich getrennte php- und html-bereiche. ich war so frei unwichtige angaben zu kürzen

    - die eingabemaske in html:
    Code:
    <?php 
    include('editor.php'); 
    ?>
    
    <form action="<?php echo $PHP_SELF;?>" method="get">
    <p><a href="admin.php?action=edit&file=file1">file 1</a></p>
    <p><a href="admin.php?action=edit&file=file2">file 2</a></p>
    </form>
    
    <form action="<?php echo $PHP_SELF;?>" method="post">
    <p><textarea cols="50" rows="10" name="editor"><?php echo $source ;?></textarea></p>
    <p><?php echo $button ;?></p>
    </form>

    - die zugehörige 'editor.php':
    PHP-Code:
    <?php
    if (empty($_GET["file"])) {
      
    $source "please choose a file to edit...";
      
    $button "";}
    else {
      
    $file $_GET["file"];
      
        if (
    $file == "file1") {
          
    $path "file1.htm";
          
    $source file_get_contents($path);
          
    $button "<input type=\"submit\" class=\"submit\" name=\"save\" value=\"save\">";}
        else if (
    $file == "file2") {
          
    $path "file2.htm";
          
    $source file_get_contents($path);
          
    $button "<input type=\"submit\" class=\"submit\" name=\"save\" value=\"save\">";}      
        else {
          
    $path "";
          
    $source "please choose a file to edit...";
          
    $button "";}
    }
          
    if (isset(
    $_POST["save"])){
      
    $content $_POST["editor"];
      
    $tmpfile "edited_file.tmp";
      
    $newfile fopen($tmpfile,"wb");
      
    chmod($tmpfile0777);
      
    fwrite($newfile,$content);
      
    fclose($newfile);
      
    unlink($path);
      
    rename($tmpfile,$path);
      
    $source "file saved!";
      
    $button "";} 
    ?>

    ... damit kann ich also nun die dateien 'file1.htm' und 'file2.htm' wunderbar bearbeiten, doch sobald in der textarea die zeichenfolge ".tmp" (ohne anführungsstriche) vorkommt erhalte ich beim versuch die eingabe zu speichern folgende rückmeldung:

    Zugriff verweigert!

    Der Zugriff auf das angeforderte Objekt ist nicht möglich. Entweder kann es vom Server nicht gelesen werden oder es ist zugriffsgeschützt.

    Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
    im übrigen ist es egal welche zeichen direkt nach den genannten getippt werden - sobald die eingabe in dieser form irgendwo im textfeld auftaucht führt ein speichern zum fehler. und schon ein leerzeichen reicht völlig um dieses problem zu umgehen.


    zwar ist in meinem fall äusserst unwarscheinlich dass der benutzer (ich bzw. bekannte denen man das ja problemlos mitteilen kann) ausgerechnet das eingeben möchte, aber mir geht es eher darum zu verstehen was da passiert - und vor allem warum.

    noch besser wäre natürlich ein lösungsvorschlag, damit soetwas garnicht erst passieren kann.


    im übrigen würde ich mich auch für (angebrachte) kritik, meinungen, gedanken dazu freuen - doch bitte nicht vergessen dass ich keine große webapplikation coden möchte, sondernd lediglich ein auf die bedürfnisse des anwenders zugeschnittenes feature

    danke fürs lesen & für die hoffentlich folgenden, klärenden antworten,

    grüße,

    sph

  • #2
    habe deinen code mal getestet. bei mir läufts einwandfrei.


    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      mod_security?

      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
      Wie man Fragen richtig stellt

      Kommentar


      • #4
        Ist nicht Dein eigener Server, oder ?
        Schildere die Problematik mal Deinem Hoster ´- vielleicht kann der das in den Kontext seines Systems einordnen ...
        Yeah !

        Kommentar


        • #5
          Original geschrieben von DaGuertliz
          Ist nicht Dein eigener Server, oder ? [...]
          a-ha!

          nein, ist es nicht. ein freund ist so nett mir etwas platz auf seinem root zur verfügung zu stellen.

          also - kein scriptfehler sondernd konfigurationssache? immerhin komm ich mir nichtmehr so doof vor und das große fragezeichen über meinem kopf wird kleiner


          Original geschrieben von ghostgambler
          mod_security?
          ginge das vielleicht etwas genauer/ausführlicher? oder mit link?

          natürlich könnte ich versuchen das zu verstehen, mich einlesen, texte übersetzen, how-tos abgrasen etc. aber scheinbar weißt du ja was gemeint ist und mir hilft eine simpel gehaltene erklärung in eigenen worten weit mehr als schwerverständliche dokumentationen. wenn ich das prinzip verstanden habe fällt mir eine genauere auseinandersetzung damit auch wesentlich leichter.


          eine frage noch: wäre es ohne größeren aufwand zu bewerkstelligen den textarea-inhalt ($content) auf das vorkommen dieser zeichenfolge zu durchsuchen und diese durch zb. . tmp (mit leerzeichen) zu ersetzen? oder besser gefragt: wie?

          oder, weitergedacht: sofern es sich dabei um eine server-einstellung handelt (ich denke da an dieses mir schleierhafte 'mod_security') - wie könnte man das script so abändern dass beim auftreten des fehlers (ich hab das bisher zwar nur bei '.tmp' festgestellt aber natürlich längst nicht alle kombinationen getestet ) die auslösende zeichenkette (sofern aufspürbar) in etwas unproblematisches geändert wird?

          also etwa nach diesem schema:

          #
          wenn save-button gedrückt und rückmeldung = fehler
          >>dann suche problematische textstelle(n)
          >>und ändere problematische textstelle(n) zu etwas verwertbarem
          >>und speichere dann erst das dokument
          andernfalls speichere das dokument
          #


          ... wunschdenken eines php-laien, vermute ich - oder aber ein mammutscript. aber fragen darf man wohl


          danke für euere antworten!

          sph

          Kommentar


          • #6
            eine frage noch: wäre es ohne größeren aufwand zu bewerkstelligen den textarea-inhalt ($content) auf das vorkommen dieser zeichenfolge zu durchsuchen und diese durch zb. .tmp (mit leerzeichen) zu ersetzen? oder besser gefragt: wie?
            PHP-Code:
            $editor str_replace ('.tmp','.tmp  '$_POST['editor']); 
            EDIT:
            hab was übersehen

            gruß
            peter
            Zuletzt geändert von Kropff; 10.05.2007, 11:03.
            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
            Meine Seite

            Kommentar


            • #7
              mod_security untersucht einen Request nach Auffälligkeiten/Fehlern - wenn etwas gefunden wird, wird der Request einfach fallen gelassen.
              Sollte es also wirklich daran liegen, kannst du an deinem Skript ändern was du willst, das kriegst du so nicht weg, dafür muss man die Regeln von mod_security entschärfen

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar

              Lädt...
              X