1827: Eine Scripturl / Priorität / Cronjob Sicherheit

Schönen guten Tag miteinander,

ich hätte da drei Fragen an Euch für die ich nirgendswo eine Anwort finde kann.

  • Eine Scripturl
    Ich habe eine art Shopsystem erstellt, soweit so gut. Dafür hab ich mehrere Dateien wie z.B. "registration.cgi", "bestellung.cgi", "login.cgi" usw., sprich: das Shopystem besteht aus einzelnen Dateien die "zusammengefasst" werden. Ich sehe des öfteren bei Shopsystemen o.ä. das die URl immer (egal wo man sich dort befindet) "shop.php/shop.cgi" etc. bleibt. Nur ich bekomme es einfach nicht gebacken und das ganze Shopsystem (zusammen etwa 1MB groß (ohne DB)) lediglich in eine Datei fließen zu lassen halte ich nicht für sinnvoll. Primär geht es mir darum, das bei mir im moment für eine Bestellung etwa 20 - 25 URl's im Verlauf gespeichert werden, Sekundär natürlich um die Optik.
    Wie schaff ich es das lediglich "shop.cgi" in der URl angezeigt werden?
    Ich möchte auf Frameset sowie IFrame verzichten.

  • Priorität
    Wo genau liegt der Unterschied zwischen:
    open my $fh, "<", $file || die "$!";
    und
    open my $fh, "<", $file or die "$!";
    ?
    Ich meine jetzt natürlich wo der Unterschied zwischen "||" und "or" liegt? Lese nur immer wieder das es sich nur durch die Priorität unterscheidet aber in welcher relevanz?

  • Cronjob Sicherheit
    Ich möchte ein Script per Cronjob zu einer festen Zeit starten lassen. So weit so gut. Dieses Script sollte jedoch NUR durch den Cronjob gestartet werden sollen und sollte nicht manuell (sprich über die URl) gestartet werden können.
    Im moment gebe ich dem Cronjob einen Parameter mit den ich erst überprüfen lasse und erst bei richtigkeit das Script weiterlaufen lasse. Das halte ich aber nicht für sehr sicher.
    Fällt euch da vielleicht eine bessere Idee ein?

Mit freundlichen Grüßen,
1827

    • Eine Scripturl
      Ich habe eine art Shopsystem erstellt, soweit so gut. Dafür hab ich mehrere Dateien wie z.B. "registration.cgi", "bestellung.cgi", "login.cgi" usw., sprich: das Shopystem besteht aus einzelnen Dateien die "zusammengefasst" werden. Ich sehe des öfteren bei Shopsystemen o.ä. das die URl immer (egal wo man sich dort befindet) "shop.php/shop.cgi" etc. bleibt. Nur ich bekomme es einfach nicht gebacken und das ganze Shopsystem (zusammen etwa 1MB groß (ohne DB)) lediglich in eine Datei fließen zu lassen halte ich nicht für sinnvoll. Primär geht es mir darum, das bei mir im moment für eine Bestellung etwa 20 - 25 URl's im Verlauf gespeichert werden, Sekundär natürlich um die Optik.
      Wie schaff ich es das lediglich "shop.cgi" in der URl angezeigt werden?

    Da hast du dir wahrscheinlich eine grosse Redundanz gebastelt, die du hoffentlich vermieden hast, dadurch dass die Scripte die gleichen Module einbinden.

    Die eine Antwort lautet: Indem du deine Architektur änderst.
    Die andere: verwende mod rewrite

    Ein Script dermassen aufzusplitten wäre nicht nach meinem Geschmack.
    Modularisierung in Perl läuft anders.

    • Priorität
      Wo genau liegt der Unterschied zwischen:
      open my $fh, "<", $file || die "$!";

    = open( my $fh, "<", $file || die "$!"; )

    und

    open my $fh, "<", $file or die "$!";

    = open( my $fh, "<", $file)  or die "$!";

    Ich meine jetzt natürlich wo der Unterschied zwischen "||" und "or" liegt? Lese nur immer wieder das es sich nur durch die Priorität unterscheidet aber in welcher relevanz?

    Es gibt die Präzedenz der Operatoren.
    && || haben höhere Präzendenz als der Listoperator (das Komma)
    and or haben eine niedrigere.
    Siehe Doku.

    • Cronjob Sicherheit
      Ich möchte ein Script per Cronjob zu einer festen Zeit starten lassen. So weit so gut. Dieses Script sollte jedoch NUR durch den Cronjob gestartet werden sollen und sollte nicht manuell (sprich über die URl) gestartet werden können.

    Verwende .htaccess

    Im moment gebe ich dem Cronjob einen Parameter mit den ich erst überprüfen lasse und erst bei richtigkeit das Script weiterlaufen lasse.

    mfg Beat

    --
    Woran ich arbeite:
    X-Torah
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Hallo Beat,

      dank dir.

      Die eine Antwort lautet: Indem du deine Architektur änderst.
      Die andere: verwende mod rewrite

      Ein Script dermassen aufzusplitten wäre nicht nach meinem Geschmack.
      Modularisierung in Perl läuft anders.

      Wie sollte ich den dann vorgehen? Alles in einer Datei zusammenfassen ist doch schwachsinn oder? Gibt es dafür ein paar nützliche Seiten?

      1. Ein Script dermassen aufzusplitten wäre nicht nach meinem Geschmack.
        Modularisierung in Perl läuft anders.

        Wie sollte ich den dann vorgehen? Alles in einer Datei zusammenfassen ist doch schwachsinn oder? Gibt es dafür ein paar nützliche Seiten?

        Ich hätte echt keinen Bock, in jedem Skript
        -das gleiche IniFile einlesen zu müssen
        -die gleichen Initialisierungen durchführen musst
        -die identischen REX patterns zu kontrollieren und zu aktualiesieren.
        -die gleichen Regelfestlegungen kontrollieren musst
        -den grundsätzlich gleichen Kontrollfluss nach dem EVA Prinzip zu schreiben
        -die gleichen Module einzubinden

        Statt dessen würde ich eher darüber nachdenken, welche Teile sich auslagern lassen und mit require einbinden lassen. Dies gilt vor allem für Templates und selten gebrauchtem Code.

        Erkundige dich über die verschiedenen Möglichkeiten, Module via use oder require einzubinden.
        In der Doku gibt es dazu schon mal ein paar Seiten zum Thema Module.
        http://perldoc.perl.org/perlmod.html

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
        1. Erkundige dich über die verschiedenen Möglichkeiten, Module via use oder require einzubinden.

          Ich bin mir bewusst über die Möglichkeiten aber nicht über die realisierung damit.
          Mit require binde ich zwar andere Scripte ein, die jedoch wiederrum ein Formular enthalten und es spätestens nach der Nutzung sich die URl wieder ändert.

          Statt dessen würde ich eher darüber nachdenken, welche Teile sich auslagern lassen und mit require einbinden lassen. Dies gilt vor allem für Templates und selten gebrauchtem Code.

          Das heisst also dann doch: (fast) alles in eine Datei schreiben?

          1. Erkundige dich über die verschiedenen Möglichkeiten, Module via use oder require einzubinden.
            Ich bin mir bewusst über die Möglichkeiten aber nicht über die realisierung damit.
            Mit require binde ich zwar andere Scripte ein, die jedoch wiederrum ein Formular enthalten und es spätestens nach der Nutzung sich die URl wieder ändert.

            Statt dessen würde ich eher darüber nachdenken, welche Teile sich auslagern lassen und mit require einbinden lassen. Dies gilt vor allem für Templates und selten gebrauchtem Code.
            Das heisst also dann doch: (fast) alles in eine Datei schreiben?

            Kommt darauf an.
            Dein Shop hat sicher ein Frontend und ein Backend. Irgendwo muss ja das Lager betreut werden und Daten eingegeben werden. Diese Sektoren kannst du schon trennen, da hier ja auch sehr verschiedene Userdaten vorliegen.

            Ich würde eher darauf achten, einen sauber strukturierten Code zu erstellen. Du kannst bei Subfunktionen dann sehr schnell fragen:
            --Wieviel Readonly ist es.
            --Wie oft wird es ausgeführt
            --Braucht es Zugang zu allen Userdaten, oder genügt es, nur die relevanten Strings zu übergeben.

            So etwas lässt sich beizeiten dann in ein require Modul auslagern derweil du in der Entwicklung noch die sub im hauptprogramm behältst, was für das Debugging sicher einfacher ist.

            Du hast ein Formulartemplate für eine bestimmte Aufgabe.
            Das Template kann relativ viele hardkodierte Werte aufweisen. Das Template kann es in mehrsprachigen Ausführungen geben.
            Dem Template musst du aber zum Beispiel URLs und die Userdaten für die Feldbelegung übergeben können.
            Das ist ein typischer Fall für ein required Modul.
            Das Modul gibt selbst nichts aus. Es gibt dir eine Referenz zurück, die du dann im geeigneten Moment dereferenzieren und ausdrucken kannst.

            mfg Beat

            --
            ><o(((°>           ><o(((°>
               <°)))o><                     ><o(((°>o
            Der Valigator leibt diese Fische
    • Eine Scripturl
      Ich habe eine art Shopsystem erstellt, soweit so gut. Dafür hab ich mehrere Dateien wie z.B. "registration.cgi", "bestellung.cgi", "login.cgi" usw., sprich: das Shopystem besteht aus einzelnen Dateien die "zusammengefasst" werden. Ich sehe des öfteren bei Shopsystemen o.ä. das die URl immer (egal wo man sich dort befindet) "shop.php/shop.cgi" etc. bleibt. Nur ich bekomme es einfach nicht gebacken und das ganze Shopsystem (zusammen etwa 1MB groß (ohne DB)) lediglich in eine Datei fließen zu lassen halte ich nicht für sinnvoll.

    Ist es auch nicht. Das nennt sich Frontcontroller, dispatcher o.ä. Eine Funktion lädt, je nach Parameter, die zuständige(n) Module und führt die entsprechenden Funktionen aus.

    Wenn du OOP programmierst, wirst du sowas unter Entwurfmuster MVC zusammenfassen (bei einer Webanwendung benutzt man auch gerne den Begriff MVC2)

    Struppi.