Rolf B: Spambots, CSRF token

Beitrag lesen

Hallo Raketenwilli,

truly

Truly Scrumptious 😀?

Das Wort heißt meines Wissens truthy, abgeleitet von truth. Analog zu falsy

Für Hank:

$name = $_POST['author'] ?? null;
if(is_null($name) || $name == '')

ließe sich wohl auch im if mit (empty($_POST['name'])) abhandeln. Im "Mail senden" Teil kann man dann vertrauensvoll $_POST['name'] verwenden (und je nach Mailformat mit htmlspecialchars oder anderen Maskierungscremes behandeln).

$email = $_POST['email'] ?? null;
is_null($email) || filter_var(...)

Analog:

if (!filter_input(INPUT_POST, 'mail', FILTER_VALIDATE_EMAIL)) {
    // error
}

Für beide:

(Token) - was aber auch zutrifft, wenn diese jeweils entweder leer, 0 oder false sind…

Die Frage mit dem $_SESSION['token'] != $_POST['token'] Vergleich ist so eine Sache. Eingangs wird isset($_SESSION['token']) geprüft, und wenn false, ein String hineingeschrieben. Sofern nicht anderswo im Code mit dem Token in der Session herummanipuliert wird, sollte das sicherstellen, dass $_SESSION['token'] nach dieser Abfrage einen String der Länge 64 enthält. Der != Test ist damit hinreichend. Eine !empty() statt is_set Abfrage wäre natürlich genauer, und !== wäre klarer. Aber auch so, wie es jetzt ist, müsste es schon ungepostete Teile des Server-Codes geben, die $_SESSION['token'] auf einen Leerstring oder null setzen, um den von RW genannten Fehlerfall zu bekommen.

Was mit $nur_ziffern_ausgefuellt ist, bleibt aber der sandgestrahlten Milchglaskugel überlassen.

Ich stimme Hank deshalb zu 99.9% zu: Wenn der Code bis zu diesem Test kommt, dann war das Token gültig. Entweder gültig von Browser submittet oder gültig von einem Bot, der hidden inputs kennt, gefaket.

Ist $nur_ziffern_ausgefuellt gesetzt, dann ist das entweder so, oder der Code, der diese Variable setzt, ist defekt. Das würde ich als nächstes prüfen.

Wenn tatsächlich ein Bot das Token senden kann, wäre wohl JavaScript als nächste Hürde aufzurichten (ein Script, das dem hidden token seinen value zuweist) - aber es gibt auch Bots, die Script entweder lesen oder sogar ausführen können. Für die braucht man dann eine Aufgabe, die Intelligenz voraussetzt und die der Absender erstmal lösen muss.

Rolf

--
sumpsi - posui - obstruxi