9
votes

Sécurité d'entrée avec "(int)" en PHP?

est (int) $ _ post ['post_id'] vraiment sûr? Ne permettra pas d'intégrer des entiers négatifs?


1 commentaires

Je pense que nous avons tous une idée de ce que vous entendez par «sûr», mais vous voudrez peut-être clarifier la sécurité pour ce que .


5 Réponses :


3
votes

Il est "sûr", selon ce que vous voulez faire. Il ne permettra que la variable à un entier aussi loin que l'utilisation de la mémoire PHP S est concernée. Il permettra des entiers négatifs.


0 commentaires

1
votes

L'utilisation de int code> est pour le type Aspoque Strike> Casting, comme

php -r "var_dump( (int) '123d');"
>>> int(123)

php -r "var_dump( (int) '-123d');"
>>> int(-123)

php -r "var_dump( (int) '<script>alert(false)</script>');"
>>> int(0) (xss, no problem)


0 commentaires

3
votes

pour (int) dans PHP:

decimal     : [1-9][0-9]*
            | 0

hexadecimal : 0[xX][0-9a-fA-F]+

octal       : 0[0-7]+

binary      : 0b[01]+

integer     : [+-]?decimal
            | [+-]?hexadecimal
            | [+-]?octal
            | [+-]?binary           


0 commentaires

13
votes

En supposant que vous signiez sûr en termes de injection SQL ou xss attaque , alors probablement oui. Casting vers un INT ne garantit que la valeur est un entier. Un entier n'est pas généralement dangereux dans n'importe quel contexte. Cela ne garantit pas la sécurité de la valeur en Integer . Il peut être 0 , qui peut avoir ou non une signification particulière dans votre code, par exemple lors de la comparaison de false . Ou il peut être négatif, lequel, à nouveau, peut ne pas avoir d'effets secondaires dans votre code.

"Sécurité" n'est pas une chose absolue. La chaîne "1 = 1; Les utilisateurs de table de dépose" par lui-même sont jolis coffre-fort aussi. Cela dépend du contexte que vous utilisez. Juste la même chose, un 0 est parfaitement sûr jusqu'à ce que votre code inclue si (! $ Numéro de numéro) Supprimerlus (); .


1 commentaires

C'est très probablement ce que l'OP voulait savoir.



1
votes

Oui, c'est "sûr" en termes d'injection SQL ou d'attaques XSS.

De plus, si vous utilisez des entiers non signés (aucune valeur négative) pour les clés primaires ou d'autres champs de votre base de données (sauvegarder l'espace), vous devez utiliser la fonction PHP ABS () et la coulée pour éviter les erreurs non confonquées: < Pré> xxx


3 commentaires

Cette question a presque un an. Déjà répondu et accepté. Quel est le point de creuser?


Je sais, mais c'est une réponse améliorée afin que ce ne soit pas important, l'heure de la question initiale à nouveau de la sécurité ces jours-ci!


Il n'y a absolument rien de sécurité