Can't locate CGI/Carp.pm in @INC (you may need to install the CGI::Carp module)

MyOOS [Dumper]ist ein Sicherungsprogramm für MySQL-Datenbanken. Damit können Sicherungskopien der Daten (Forum, Shop, Blog, usw.) erstellt und bei Bedarf auch wieder hergestellt werden. Besonders bei Web-Space ohne Shell-Zugang bietet sich MyOOS [Dumper] als sinnvolle Alternative an.
Antworten
dloos
Beiträge: 8
Registriert: 11.01.2024, 09:16

Can't locate CGI/Carp.pm in @INC (you may need to install the CGI::Carp module)

Beitrag von dloos »

Hallo zusammen,

ich benutze seit längerem ein Managed Server von Strato. Also bin leider ein Newby was Server management angeht und habe keine Rechte auf dem Server selber was zu instalieren.

Seit dem OS Update auf dem Server erhalte ich folgende Fehlermeldung.

Can't locate CGI/Carp.pm in @INC (you may need to install the CGI::Carp module) (@INC contains: /usr/local/lib64/perl5/5.32 /usr/local/share/perl5/5.32 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at ....../mod_cron/crondump.pl line 55.

MyOOS [Dumper] - Version: 5.0.23
Betriebssystem: Linux (Linux h2734193.stratoserver.net 5.15.103-r202303221028120000.x86_64 #1 SMP PREEMPT Wed Mar 22 10:28:55 UTC 2023 x86_64)
MySQL-Version: 10.5.22-MariaDB

heißt es, dass die PErl Installation nicht ok ist und Strato es nachziehen soll, oder gibt es andere Möglichkeiten? Strato ist an der Stelle leider öfters recht unkooperativ.

DAnke und Grüße
dloos
Beiträge: 8
Registriert: 11.01.2024, 09:16

Re: Can't locate CGI/Carp.pm in @INC (you may need to install the CGI::Carp module)

Beitrag von dloos »

Wie erwartet

Das CGI::Carp Modul kann nicht angeboten werden.
Bitte schauen Sie, dass für ihr Script eine Alternative geschaffen werden kann.

Typisch Strato....

Gibt es eine Alternative für CGI::Carp Modul?
r23
Beiträge: 2696
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Re: Can't locate CGI/Carp.pm in @INC (you may need to install the CGI::Carp module)

Beitrag von r23 »

Hallo,

herzlich willkommen im Forum

CGI::Carp ist ein Perl-Modul, das erweiterte Fehlerbehandlungsfunktionen für CGI-Skripte bietet. Es ermöglicht es, Fehlermeldungen an den Browser zu senden, anstatt sie nur in den Server-Logdateien zu protokollieren. Es bietet auch Funktionen, um die Fehlermeldungen anzupassen oder die Standard-Fehlerbehandlung von Perl wiederherzustellen.

CGI::Carp kann mit dem use-Befehl in einem Perl-Skript eingebunden werden, wobei man die gewünschten Funktionen auswählen kann. Zum Beispiel:

```perl
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
```

Dieser Befehl lädt die Funktionen fatalsToBrowser und warningsToBrowser, die dafür sorgen, dass alle schwerwiegenden Fehler (die mit die erzeugt werden) und alle Warnungen (die mit warn erzeugt werden) an den Browser gesendet werden. Dies kann nützlich sein, um Fehler in der Entwicklung zu finden, aber es kann auch ein Sicherheitsrisiko in der Produktion darstellen.

Wenn CGI::Carp nicht auf dem Server verfügbar ist, muss man das Perl-Skript so ändern, dass es die Fehlerbehandlung selbst übernimmt. Du kannst dies tun, indem du die globale Variable $SIG{__DIE__} auf eine Referenz zu einer Subroutine setzt, die die Fehlermeldung ausgibt oder protokolliert.

Zum Beispiel:

Code: Alles auswählen

use strict;
use warnings;

# Define a custom die handler
$SIG{__DIE__} = sub {
  my $error = shift;
  # Print the error to STDERR
  print STDERR "Fatal error: $error\n";
  # Exit with non-zero status
  exit 1;
};
  

Ich halte die Fehlerbehandlungsfunktionen in unserem Script für dringend notwendig. Und sehe keine Möglichkeit, dass wir auf CGI::Carp verzichten.


Viele Grüße

Ralf
r23
Beiträge: 2696
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Re: Can't locate CGI/Carp.pm in @INC (you may need to install the CGI::Carp module)

Beitrag von r23 »

Chat mit einer KI für Entwickler:

Warum kann das CGI:Carp Modul auch ein Sicherheitsrisiko in der Produktion darstellen?

Das CGI::Carp Modul kann ein Sicherheitsrisiko in der Produktion darstellen, weil es möglicherweise zu viele Informationen über die Fehler an den Browser sendet¹. Dies kann einem Angreifer, der versucht, den Server zu knacken, Hinweise auf Schwachstellen in den Geschäftsprozessen, der Datenbank oder dem Betriebssystem geben². Außerdem kann die Ausgabe von Fehlermeldungen an den Browser die Benutzererfahrung beeinträchtigen und das Vertrauen in die Anwendung verringern³.

Deshalb wird empfohlen, die Funktionen fatalsToBrowser und warningsToBrowser nur in der Entwicklungsphase zu verwenden und sie in der Produktionsphase auszuschalten oder durch eine benutzerdefinierte Fehlerbehandlung zu ersetzen¹³. Dies kann die Sicherheit und die Leistung der Anwendung verbessern. 😊

(1) In Perl, how can I disable CGI::Carp that was loaded in a required .... https://stackoverflow.com/questions/112 ... red-script.
(2) Testing in Production: Risks, Benefits, and Best Practices. https://www.qamadness.com/testing-in-pr ... practices/.
(3) WWW Security FAQ: CGI Scripts - World Wide Web Consortium (W3C). https://www.w3.org/Security/faq/wwwsf4.html.

Wie kann ich die Funktionen fatalsToBrowser und warningsToBrowser in einem Perl-Skript deaktivieren?

Es gibt mehrere Möglichkeiten, die Funktionen fatalsToBrowser und warningsToBrowser in einem Perl-Skript zu deaktivieren. Eine Möglichkeit ist, die Variable `$CGI::Carp::TO_BROWSER` auf 0 zu setzen, um die Ausgabe der Fehlermeldungen an den Browser zu unterdrücken¹. Eine andere Möglichkeit ist, die Funktion `CGI::Carp::set_die_handler` zu verwenden, um die Standard-Fehlerbehandlung von Perl wiederherzustellen². Eine dritte Möglichkeit ist, die globale Variable `$SIG{__DIE__}` auf eine Referenz zu einer Subroutine zu setzen, die die Fehlermeldung ausgibt oder protokolliert³.

Hier sind einige Beispiele für diese Methoden:

Code: Alles auswählen

# Methode 1: $CGI::Carp::TO_BROWSER auf 0 setzen
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
$CGI::Carp::TO_BROWSER = 0; # unterdrückt die Fehlerausgabe an den Browser

# Methode 2: CGI::Carp::set_die_handler verwenden
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
CGI::Carp::set_die_handler(\&CGI::Carp::realdie); # stellt die Standard-Fehlerbehandlung von Perl wieder her

# Methode 3: $SIG{__DIE__} auf eine Subroutine setzen
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
$SIG{__DIE__} = sub {
  my $error = shift;
  # Gib den Fehler an STDERR aus
  print STDERR "Schwerwiegender Fehler: $error\n";
  # Beende das Skript mit einem Nicht-Null-Status
  exit 1;
};
(1) In Perl, how can I disable CGI::Carp that was loaded in a required script?. https://stackoverflow.com/questions/112 ... red-script.
(2) perl - How can I tell my dev environment to always load CGI::Carp .... https://stackoverflow.com/questions/157 ... stobrowser.
(3) Display or view the perl cgi errors in a web browser - nixCraft. https://www.cyberciti.biz/faq/display-o ... b-browser/.
(4) Debugging Perl Scripts | Tiger Technologies Support. https://support.tigertech.net/perl-debugging.

Wie kann ich eine benutzerdefinierte Fehlerbehandlung in Perl implementieren?

Eine benutzerdefinierte Fehlerbehandlung in Perl können Sie implementieren, indem Sie die globale Variable `$SIG{__DIE__}` auf eine Referenz zu einer Subroutine setzen, die die Fehlermeldung ausgibt oder protokolliert¹. Zum Beispiel:

Code: Alles auswählen

# Definieren Sie eine benutzerdefinierte die-Handler
$SIG{__DIE__} = sub {
  my $error = shift;
  # Gib den Fehler an STDERR aus
  print STDERR "Schwerwiegender Fehler: $error\n";
  # Beende das Skript mit einem Nicht-Null-Status
  exit 1;
};

# Einige Codezeilen, die möglicherweise die ausführen
my $x = 10 / 0;
Dieses Skript gibt die folgende Ausgabe aus:

```
Schwerwiegender Fehler: Illegal division by zero at script.pl line 15.
```

Sie können die Subroutine anpassen, um die Fehlermeldung in einer Datei zu speichern oder eine E-Mail zu senden, je nach Ihren Anforderungen. Sie können auch die Variable `$SIG{__WARN__}` verwenden, um die Warnungsbehandlung anzupassen².


(1) How To Handle Perl Code Errors Effectively - MarketSplash. https://marketsplash.com/tutorials/perl ... -handling/.
(2) What is the best way to handle exceptions in Perl?. https://stackoverflow.com/questions/400 ... ns-in-perl.
(3) How To Handle Perl Code Errors Effectively - MarketSplash. https://marketsplash.com/tutorials/perl ... -handling/.
(4) What is the best way to handle exceptions in Perl?. https://stackoverflow.com/questions/400 ... ns-in-perl.
(5) perl - Custom error handling is catching errors that normally are not .... https://stackoverflow.com/questions/807 ... -displayed.
(6) Perl - Custom Error Output - Stack Overflow. https://stackoverflow.com/questions/427 ... ror-output.
(7) How to create and to throw exceptions in Perl? - Stack Overflow. https://stackoverflow.com/questions/668 ... ns-in-perl.
r23
Beiträge: 2696
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Re: Can't locate CGI/Carp.pm in @INC (you may need to install the CGI::Carp module)

Beitrag von r23 »

Hallo,

auf Basis der Informationen kann der Verzicht auf CGI::Carp sinnvoll sein...

Was passiert, wenn du in dem Perl Script die Zeile 55 und 56 löschst?

Code: Alles auswählen

use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
warningsToBrowser(1);
dloos
Beiträge: 8
Registriert: 11.01.2024, 09:16

Re: Can't locate CGI/Carp.pm in @INC (you may need to install the CGI::Carp module)

Beitrag von dloos »

Hallo Ralf,

danke für deine Erklärung und die Hinweise.

dies kommt.

Can't locate CGI.pm in @INC (you may need to install the CGI module) (@INC contains: /usr/local/lib64/perl5/5.32 /usr/local/share/perl5/5.32 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at .../mod_cron/crondump.pl line 55.
BEGIN failed--compilation aborted at /pages/82/71/d0013732/home/htdocs/dbBackup/DB2/mod_cron/crondump.pl line 55.

Ich vermute, dass bei mir auf dem Server nach dem OS Update etwas mit Perl bzw. CGI generell nicht stimmt. Habe das Thema erneut bei Strato adressiert.
r23
Beiträge: 2696
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Re: Can't locate CGI/Carp.pm in @INC (you may need to install the CGI::Carp module)

Beitrag von r23 »

Hallo,

ja, man kann auch auf CGI.pm bei einem Perl-Script verzichten, aber es hängt davon ab, was man mit dem Script machen will.

CGI.pm ist ein Perl-Modul, das die Kommunikation zwischen einem Webserver und einem Perl-Script erleichtert. Es bietet Funktionen an, um HTTP-Anfragen zu verarbeiten, HTTP-Antworten zu erzeugen, HTML- oder XHTML-Ausgaben zu erstellen und andere nützliche Aufgaben zu erledigen.

Allerdings ist CGI.pm nicht mehr Teil des Perl-Kerns seit der Version 5.22, und es gibt auch modernere Alternativen, um Perl-Programme für das Web zu schreiben, wie z.B. Dancer, CGI::Application, Catalyst, etc.

Außerdem kann man auch direkt auf die Umgebungsvariablen zugreifen, die vom Webserver gesetzt werden, um die HTTP-Anfragen zu lesen und zu beantworten. Das erfordert aber mehr Programmierkenntnisse und ist fehleranfälliger.

Vielen Dank für dein TESTEN!

Beste Grüße

Ralf
r23
Beiträge: 2696
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Re: Can't locate CGI/Carp.pm in @INC (you may need to install the CGI::Carp module)

Beitrag von r23 »

Chat mit einer KI für Entwickler:

Warum wird das CGI.pm script nicht mehr empfhohlen?

Das CGI.pm-Modul wird nicht mehr empfohlen, weil es veraltet, langsam und unsicher ist. Es gibt viele Nachteile bei der Verwendung von CGI.pm, wie z.B.:

- Es erzeugt HTML-Ausgaben, die nicht den aktuellen Standards entsprechen¹.
- Es verwendet globale Variablen, die zu unerwarteten Fehlern führen können².
- Es ist anfällig für Cross-Site-Scripting (XSS) und andere Sicherheitslücken³.
- Es ist ineffizient, weil es für jede Anfrage einen neuen Prozess startet⁴.
- Es ist nicht kompatibel mit modernen Web-Frameworks, die das PSGI-Protokoll verwenden⁵.

Deshalb wird CGI.pm nicht mehr als gute Praxis für die Entwicklung von Web-Anwendungen angesehen. Es gibt bessere, modernere und sicherere Alternativen, wie z.B. Dancer, CGI::Application, Catalyst, etc²⁵. Diese Module verwenden oft das PSGI-Protokoll, um eine standardisierte Schnittstelle zwischen Perl-Webanwendungen und Webservern zu bieten.

(1) CGI-Skripte auf dem Apache aktivieren - IONOS. https://www.ionos.de/digitalguide/serve ... uf-apache/.
(2) Perl-Programmierung: CGI - Wikibooks. https://de.wikibooks.org/wiki/Perl-Programmierung:_CGI.
(3) Wie kann ich CGI-Skripte verwenden? | Host Europe. https://www.hosteurope.de/faq/webhostin ... verwenden/.
(4) CGI-Programmierung I - LMU. https://www.cis.uni-muenchen.de/~micha/ ... ung_I.html.
(5) CGI leicht gemacht! - jmarshall.com. https://jmarshall.com/easy/cgi/german/.
(6) CGI-Skripte auf dem Apache aktivieren - IONOS. https://www.ionos.de/digitalguide/serve ... uf-apache/.
(7) Perl-Programmierung: CGI - Wikibooks. https://de.wikibooks.org/wiki/Perl-Programmierung:_CGI.
(8) Wie kann ich CGI-Skripte verwenden? | Host Europe. https://www.hosteurope.de/faq/webhostin ... verwenden/.
(9) CGI-Programmierung I - LMU. https://www.cis.uni-muenchen.de/~micha/ ... ung_I.html.
r23
Beiträge: 2696
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Re: Can't locate CGI/Carp.pm in @INC (you may need to install the CGI::Carp module)

Beitrag von r23 »

Hallo,

wenn du möchtest, kannst du MOD Version ohne CGI.pm testen

https://github.com/r23/MyOOS-Dumper

ich hoffe, es reicht, wenn du die zwei Zeilen löschst

use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
warningsToBrowser(1);


Beste Grüße

Ralf
dloos
Beiträge: 8
Registriert: 11.01.2024, 09:16

Re: Can't locate CGI/Carp.pm in @INC (you may need to install the CGI::Carp module)

Beitrag von dloos »

Hi Ralf,

vielen lieben Dank! Es funktioniert (fast) wieder!


Sending E-Mail ...
Use of uninitialized value $MyOOSCron::cron_use_sendmail in numeric eq (==) at .../mod_cron/crondump.pl line 1039.
SMTP Failed to connect to mail server: Connection refused
at ..../mod_cron/crondump.pl line 1112.

Habe geschaut wo die $cron_use_sendmail herkommt, werde hier aber nicht ganz schlau. Habe meine Konfiguration auch geprüft... Fehlt mir noch was?

Danke und Grüße

Dimitrij
dloos
Beiträge: 8
Registriert: 11.01.2024, 09:16

Re: Can't locate CGI/Carp.pm in @INC (you may need to install the CGI::Carp module)

Beitrag von dloos »

Hi Ralf,

habe es einfach gepatches mit $cron_use_sendmail = 1; um zu prüfen, ob es noch was kommen würde. Jetzt funktioniert alles, auch Versenden der Mails. Vielen Dank Dir nochmals!

Mal eine andere Frage: beim restore von backup geht der Skript alle Tabellen der Datenbank durch. Auch wenn ich sage, dass ich bestimmte Tabelle oder Tabellen wiederherstellen möchte. Das braucht (bei größeren DBs) zum Teil sehr lange. Gibt es hier ein Trick oder ist es zwingend nottwendig?

DAnke und Grüße

Dimitrij
Antworten