it-swarm.com.de

Enthält Wordpress "Standard" Anti-SQL-Injection-Code, der mit einem 404-Fehler reagiert?

Ich habe die "sieben Schichten des Zuckerstangenwaldes" auf diesem durchgemacht ... :)

Unser Plugin empfängt Daten über eine POST Anfrage. Auf einer bestimmten Site, auf der unser Plugin installiert ist, haben wir ein merkwürdiges Verhalten festgestellt. In einem bestimmten Szenario haben die POST -Anforderungen fälschlicherweise einen 404-Fehler (nicht gefunden) generiert.

Ich habe sehr breit angefangen und das Problem Stück für Stück eingegrenzt, bis ich das folgende Reproduktionsszenario hatte. Der Rätselfehler tritt auf für:

  1. Beliebige "POST" -Anforderung
  2. zu einer URL unter http://example.com/wp-content/
  3. das liefert x-www-form-urlencoded Daten
  4. mit or ("oder", gefolgt von einem Leerzeichen, ohne Berücksichtigung der Groß- und Kleinschreibung), gefolgt von einer Zahl an einer beliebigen Stelle in den übermittelten Daten (nicht nur Feldwerte) (z. B. an ARM or 30-year fixed-rate mortgage)

Ich habe die anderen installierten Plugins überprüft. Nichts. Ich habe die Vorlagen überprüft. Nada. Ich habe einige andere Sites mit unserem Plugin überprüft, konnte den Fehler aber immer noch nicht reproduzieren.

Soweit ich das beurteilen kann, handelt es sich hierbei um ein unglaublich spezifisches Problem auf der jeweiligen Website. Aufgrund des Reproduktionsszenarios schätze ich, dass es an einem überambitionierten Anti-SQL-Injection-Code liegt.

Gibt es in Wordpress standardmäßig Code, der dieses Problem verursachen könnte? Ich vermute, dass dieses Problem auf etwas anderes zurückzuführen ist (z. B. eine Firewall, eine .htaccess - Regel usw.) ), aber ich dachte, ich würde mich bei den Experten erkundigen! :)


Aktualisieren:

Wir haben dieses Problem auch mit Post-Daten im Format "[operator] having [string]" beobachtet, wie z. B. < having x, or having y, and having z usw. Da HAVING ein SQL-Schlüsselwort ist, vermute ich, dass dies ein weiterer Beweis für a ist schlecht konfiguriertes Sicherheitstool. Beachten Sie, dass diese verschiedenen Beobachtungen auf verschiedenen Servern gemacht wurden, so dass es auf diesem einzelnen Server nicht nur etwas Irres ist. Ich schätze , dass mehrere Server falsch konfiguriert sein könnten/strenge Sicherheitsprotokolle vorhanden sind ...


Noch ein Update: Ich bin wieder auf dieses Problem gestoßen. Dieses Mal habe ich das Problem POST payload auf die Zeichenfolge <strong> vereinfacht. Alle POST-Daten, die diese Zeichenfolge enthalten (in Übereinstimmung mit den anderen obigen Bedingungen), generieren einen 404.

5
rinogo

Wie von @Jeff Mattson vorgeschlagen, deuten stundenlange Nachforschungen und Tests darauf hin, dass dies wahrscheinlich auf mod_security zurückzuführen ist. Ich habe auch die Wahrscheinlichkeit untersucht, dass es an Suhosin liegt, aber ich glaube nicht, dass es daran schuld ist.

Das ist der Deal. Es hilft nicht wirklich, wenn wir überprüfen, ob das Problem auf mod_security zurückzuführen ist. Wir kontrollieren nicht die Server, auf denen unser Plugin läuft, und unsere Bemühungen, mod_security über .htaccess zu deaktivieren, sind fehlgeschlagen.

Zum Glück gibt es Licht am Ende des Tunnels. Unabhängig davon, was das Problem verursacht, besteht eine Lösung, die das Problem garantiert behebt, darin, einfach die Daten für POST zu ändern.

Die Lösung, die ich implementieren möchte, ist die Base62-Codierung der Daten, die wir an unser Plugin senden. Base64 würde wahrscheinlich auch funktionieren, aber ich würde dieses Problem gerne ein für alle Mal lösen und aufgrund seines begrenzten Zeichensatzes ist Base62 die sicherere Wahl, wenn es um ein neurotisches Biest wie mod_security geht.

Dies sollte funktionieren, da mod_security in übermittelten Daten nach bestimmten "problematischen" Zeichenfolgen sucht. Ich bezweifle, dass das Modul ausgereift genug ist, um eine Reihe unterschiedlicher Kodierungen auf übermittelte Daten anzuwenden (und dies würde die Leistung beeinträchtigen), so dass nahezu garantiert ist, dass unsere Probleme behoben werden.

Yay!

0
rinogo