Im Internet gibt es viele schöne Anleitungen für verschiedenste Themen. Und viele davon liefern auch gleich die Shell Kommandos mit, die man nur noch markieren, kopieren, direkt in die Shell einfügen und mit Enter bestätigen muss, um sie auszuführen. NEIN, tut das niemals NIE!

Ich habe auch viele solcher Anleitungen geschrieben, die vielfach genutzt wurden. Und teilweise habe ich dann auch auf das Problem hingewiesen.

Um diesen Warnhinweis zu vereinheitlichen, habe ich einen Shortcode für Hugo erstellt, den ich in diesem Blog und auch in meinem neuen Wiki nutzen kann. Diesen werde ich in Zukunft immer in Blogbeiträge und Wikiseiten einfügen, sobald es Shell Kommandos gibt.

Update
Anmerkungen von SuperTux88 eingearbeitet. Danke :)

Wieso eigentlich nicht?

Wie sollte man Shell Kommandos nicht direkt in eine Shell einfügen und ausführen? Man kann doch sehen, was man markiert hat und was in der Shell ausgeführt werden wird?

Nein.

Ich habe das bisher noch nicht in freier Wildbahn gesehen aber es ist möglich, dass man innerhalb eines Code-Blocks z. B. via CSS, Teile versteckt. Diese werden jedoch beim Markieren mit ausgewählt und kopiert. Fügt man das direkt in die Shell ein und drückt Enter, werden die “unsichtbaren” Shell Kommandos auch ausgeführt. Es gibt vielleicht aber auch noch ältere Terminal-Emulatoren, die direkt die Kommandos ausführen.

Es gibt aber auch Möglichkeiten, das notwendige Drücken von Enter durch den Benutzer mit Steuerzeichen zu überwinden. Der Terminal-Emulator Konsole (von KDE) erkennt beim Einfügen solche Zeichen und fragt nach, ob sie herausgefiltert werden sollen. Xterm zeigt alle Kommandos an und erwartet eine Eingabe vom Benutzer. Wie sich andere Terminal-Emulatoren verhalten, habe ich nicht getestet. Ich habe aber die Rückmeldung bekommen, dass es welche gibt, die dann direkt ausführen.

Wenn auf einer Plattform normale Benutzer gar keinen CSS-Code in Beiträge einarbeiten können, sollte das auch relativ sicher sein, es sei denn, es gibt eine Sicherheitslücke.

Im Zweifel sollte man sich also nicht darauf verlassen, dass der Terminal-Emulator sicher reagiert und die folgende Methode verwenden.

Obwohl das ein ziemlich altes Problem ist, scheint es nicht bei jedem bekannt zu sein, der solchen Anleitungen folgt und die kopierten Kommandos direkt ausführt.

Und wie macht man das richtig?

Die einfachste Möglichkeit, die ich auch bevorzuge, ist ein Texteditor: Bevor man von irgendwelchen Websites Shell Kommandos nutzt, fügt man diese zuerst in einen lokalen Texteditor ein, prüft, ob alles stimmt, markiert kopiert dann die Zeile im Texteditor und nutze diese zum Einfügen in die Shell.

Beispiel

So sieht der Shortcode in Aktion aus, der auch ein Beispiel zum Kopieren enthält (anklicken zum Öffnen):

Vorsicht beim Ausführen von Shellkommandos via Copy & Paste

Man sollte Shellkommandos aus Anleitungen, die in einem Browser angezeigt werden, grundsätzlich nicht einfach ungeprüft in die Shell einfügen und ausführen.

Denn es ist möglich, Teile des Codes z. B. via CSS zu verstecken. Diese Teile werden aber trotzdem kopiert und landen auch in der Shell, wo sie ausgeführt werden.

Besser ist es, die Kommandos erst in einen lokalen Texteditor einzufügen und dort zu prüfen, bevor man die ausführt.

Kopiere doch mal dieses Beispiel und füge es – in die Shell (!NEIN) – in einen Editor ein:

echo "Befehl 1"; echo "Befehl 3"

Immer prüfen

Auch bei vertrauenswürdigen Websites oder Beiträgen sollte man Shell Kommandos immer prüfen, denn es könnte sein, dass Inhalt von Dritten verändert wurden. Auch hier im Blog oder im Wiki.

Quelltext für den Shortcode

HTML

Und das ist der Quelltext für den Shortcode

<div class="shortcode-codewarning">
    <details>
    <summary class="shortcode-codewarning summary">Vorsicht beim Ausführen von Shellkommandos via Copy & Paste</summary>
        <div class="shortcode-codewarning content"><p>
        Man sollte Shellkommandos aus Anleitungen, die in einem Browser angezeigt werden, grundsätzlich nicht einfach ungeprüft in die Shell einfügen und ausführen.</p>
        <p>Denn es ist möglich, Teile des Codes z. B. via CSS zu verstecken. Diese Teile werden aber trotzdem kopiert und landen auch in der Shell, wo sie ausgeführt werden.</p>
        <p>Besser ist es, die Kommandos erst in einen lokalen Texteditor einzufügen und dort zu prüfen, bevor man die ausführt.<p>
        <p>Kopiere doch mal dieses Beispiel und füge es – in die Shell (!NEIN) – in einen Editor ein:</p>
        <p><code>echo "Befehl 1"; <span class="shortcode-codewarning hidden">echo "Befehl 2. Im Browser unsichtbar, da font-size per CSS auf 0 gestellt wurde. Hier könnte z. B. die Festplatte gelöscht oder andere Dummheiten gemacht werden."; </span>echo "Befehl 3"</code></p></div>
    </details>
</div>

SCSS

Und hier das dazugehörige SCSS:

/* Shortcode Codewarning */
.shortcode-codewarning {
	margin-bottom: 1em;
	.hidden {
		font-size:0;
	}
	.summary {
		border-radius: 4px 4px 4px 4px;
		color: #fff;
		font-weight: 700;
		padding-left: 1em;
		margin-bottom: 0px;
		background: rgba(198, 65, 61, 0.8);
	}
	.content {
		border-radius: 4px 4px 4px 4px;
		color: #666;
		display: block;
		font-size: 1em;
		margin-bottom: 0;
		margin-top: 0;
		padding: .6em 1em;
		background: #d9d2d2;
	}
}

Einbindung in Hugo

Um den Shortcode in Hugo einzubinden, speichert man den HTML Teil als codewarning.html nach layouts/shortcodes ab, den CSS-Teil entsprechend im Theme, was sehr unterschiedlich ist.

Um den Shortcode dann innerhalb von Blogbeiträgen einzufügen, schreibt man an entsprechender Stelle:

{{< codewarning >}}