intval oder is_numeric? PHP
bin ich das abrufen ein text aus der mysql-Datenbank und ich bekomme es von ID aus in der url:
Website.php?id=1 und so weiter
Was betrachtet wird, werden die meisten sicher zu verhindern, dass sql-injection und so Zeug. Ist dieser Weg richtig:
<?php
$news_id = $_GET['news_id'];
if(!is_numeric($news_id)) die('Wrong');
//mysql_query and stuff here
?>
ODER so:
<?php
$news_id = $_GET['news_id'];
if(!intval($news_id)) die('Wrong');
//mysql_query and stuff here
?>
- Eine kleine Anmerkung zu is_numeric, ermöglicht es hexadezimalen Zeichen (keine große Sache, security-wise gesehen). Wenn Sie wirklich, wie zu überprüfen, ob ein numerischer Wert, ctype_digit verwenden, stellen Sie sicher, dass Sie eine Zeichenfolge, die nicht ein int: ctype_digit ( (int) 123 ); // false ctype_digit ( '123' ); // true
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum nicht nur verwenden Sie eine vorbereitete Anweisung, die den richtigen Umgang mit sql-injection-Angriffe.
Aber, intval verwenden, um wiederum den string in ein integer, und nur dann setzen, dass in Ihre vorbereitete Anweisung, und Sie werden geschützt werden, da der int-Wert kann eine null oder negativ, so wird nichts zurückgegeben von der Abfrage.
Vorausgesetzt
news_id
positiv ist (>0).Wenn du intval Sie nicht in der Lage sein zu verwenden news_id=0, weil intval wird immer 0 zurück, wenn news_id ist nicht eine Zahl.
is_numeric ist besser geeignet und sicherer in Ihrem Fall.
news_id
ist eine generierte Spalte, die wird nie 0 enthalten. Wenn das der Fall ist, dann gibt es keinen Schaden in mit intval( $id ) in der Anfrage, wenn die Anfrage enthielt eine ungültige id, dann werden Sie am Ende mit einem "nicht gefunden" - Fehler, das ist durchaus akzeptabel für einen bad request. Alternativ können Sie natürlich auch, wenn die 0 ist ein Wert, der nie verwendet wird, dann können Sie testen, die Ausgabe und werfen einen anderen Fehler ("bitte geben Sie einen gültigen Bezeichner") die Ablehnung des Antrags.0
s, einschließlich "0". Ist das so gewollt? Auch die+
ist nicht sinnvoll.is_numeric ist nicht ein guter Weg, um es zu überprüfen,
intval nicht true oder false zurück. so können Sie es nicht verwenden, wie du geschrieben hast.
versuchen, diese
oder