Hallo, Gast! (Registrieren)

Letzte Ankündigung: Sicherheitsupdate: MyBB 1.8.24 veröffentlicht (09.08.20)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
ACP > POST-Button legalisieren
#1
Ich habe in einem PlugIn einen Button eingebaut um eine Datei zu löschen. Der Button wird korrekt angezeigt.

So sieht der Code im PlugIn aus:
PHP-Code:
function del_file() {
 
// echo 'File löschen';
@unlink(dateiname.php);
}

if(isset(
$_POST["delete_file"])) {
    del_file();

(ob mit oder ohne dem "@" bzw. testweise ein "echo" verändert sich die untenstehende Meldung nicht. In der Sprachdatei ist der Button wie folgt eingebunden:
Code:
$l['file_check_desc'] = "Hier der Inhalt der ausgerufenen Liste.
<br /><br />
<form action=\"\" method=\"post\">
<input type=\"submit\" name=\"delete_file\" value=\"Liste löschen\"/>
</form>";

Klicke ich auf den Button wird die gewünschte Funktion korrekt ausgeführt, es erscheint jedoch die Meldung:
Zitat:Der Autorisierungscode konnte nicht bestätigt werden. Bitte bestätige, dass du diese Aktion ausführen möchtest.
Wie muss man den Vorgang ($_POST) im PlugIn legalisieren damit die Fehlermeldung nicht erscheint?

Vorab besten Dank für Tipps und Hinweise.
Wer fragt, ist gegebenenfalls für fünf Minuten ein Narr. Wer nicht fragt, bleibt ein Narr.
Wer angebotene Hilfe(n) nicht annimmt, dem ist nicht zu helfen!
Aktive Version: MyBB: 1.8.24 | PHP: 7.4.10 | SQL: 5.7.28 [Unixzeit <> Realzeit]
Zitieren
#2
Der Autorisierungscode wird nicht automatisch geprüft und der Code-Ausschnitt enthält auch keine manuelle Prüfung (aus Sicherheitsgründen aber dringend empfohlen). Daher kann ich leider nicht erkennen, wo die Fehlermeldung generiert wird.

Abgesehen davon halte ich es für unschön Formulare in Sprachdateien zu packen? Oder soll die Funktionalität (nicht Beschriftung) wirklich von der eingestellten Sprache abhängen? Davon abgesehen sollte $mybb->get_input() und nicht $_POST verwendet werden.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#3
So sieht das PHP jetzt aus.
PHP-Code:
$form_container = new FormContainer();
 
$form_container->output_row("<form action=\"\" method=\"post\">
<input type=\"submit\" name=\"delete_file\" value=\"
$lang->_delete_1\"/> $lang->delete_2
</form>"
"""");
$form_container->end();
if(isset(
$_POST["delete_file"])) {
unlink(MYBB_ROOT "/"filename);

Gleichgültig ob ich $_POST oder $mybb->input verwende, die Fehlermeldung erscheint.
auch mit:

PHP-Code:
if(isset($mybb_input["delete_log_files"] {
if(
verify_post_check($mybb->input['my_post_key']))
...

wird die Fehlermeldung erzeugt.

OK, ich kann die Fehlermeldung nach dem "unlink" mit einem META Refresh schnell ausblenden, aber das sollte sicherlich nicht der Weisheit letzter Schluss sein.
Wer fragt, ist gegebenenfalls für fünf Minuten ein Narr. Wer nicht fragt, bleibt ein Narr.
Wer angebotene Hilfe(n) nicht annimmt, dem ist nicht zu helfen!
Aktive Version: MyBB: 1.8.24 | PHP: 7.4.10 | SQL: 5.7.28 [Unixzeit <> Realzeit]
Zitieren
#4
Tut mit Leid, ich hatte nur den Beitrag und nicht den Betreff gelesen. Im Admin-CP wird der CSRF-Schutz automatisch geprüft, allerdings werden Formulare dort auch üblicherweise nicht manuell erstellt. Warum verwendest du nicht die Form-Klasse, wie das im MyBB-Code überall gemacht wird? Damit brauchst du nicht einmal HTML und erhältst ein Formular, das zum Theme passt und den Sicherheitscode enthält.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#5
Problem konnte ich nach einigen Recherchen lösen.

Anstelle von bisher:
Code:
<form action=\"\" method=\"post\">
    <input type=\"submit\" name=\"delete_file\" value=\"$lang->delete_file_1\"/> $lang->delete_file_2
    </form>
und
PHP-Code:
if(isset($_POST["delete_file"])) {
unlink(MYBB_ROOT . "/"filename);
}
  

Neu auf Grundlage z.B.  dieses Hinweises (alle dieser gefundenen Lösunsgwege zu Posten wäre zu viel) nunmehr:
Code:
<form action=\"\" method=\"post\">
    <input name=\"my_post_key\" type=\"hidden\" value=\"{$mybb->post_code}\" />
    <input type=\"submit\" name=\"delete_file\" value=\"$lang->delete_file_1\"/> $lang->delete_file_2
    </form>
und
PHP-Code:
if(isset($_POST["delete_file"]) && ($mybb->request_method == "post")) {
    
verify_post_check($mybb->input['my_post_key'], true);
    
unlink(MYBB_ROOT "/" .filename);
    
admin_redirect('index.php?module=tools-plugin_name');

Ob mit oder ohne "admin_redirect", es wird keine Fehlermeldung mehr angezeigt.

Gehe mal davon aus, dass dies nun der korrekte Lösunsgweg gewesen ist.

Besten Dank für den Hinweis bzgl. "CSRF-Schutz".
Wer fragt, ist gegebenenfalls für fünf Minuten ein Narr. Wer nicht fragt, bleibt ein Narr.
Wer angebotene Hilfe(n) nicht annimmt, dem ist nicht zu helfen!
Aktive Version: MyBB: 1.8.24 | PHP: 7.4.10 | SQL: 5.7.28 [Unixzeit <> Realzeit]
Zitieren