使用“(int)”输入安全性在 PHP 中?

发布于 2024-10-09 10:54:36 字数 58 浏览 4 评论 0原文

(int)$_POST['post_id'] 真的安全吗?它不允许负整数吗?

Is (int)$_POST['post_id'] really safe? Won't it allow negative integers?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

始终不够 2024-10-16 10:54:36

假设您的意思是在 SQL 注入或 XSS 攻击方面“安全”,那么“可能”是的。转换为 int 仅确保该值是整数。整数在任何情况下通常都不危险。但它不能保证整数的安全。它可能是 0,在您的代码中可能有也可能没有特殊含义,例如与 false 进行比较时。或者它可能是负面的,这同样可能会或可能不会对您的代码产生任何副作用。

“安全”并不是绝对的。字符串“1 = 1; DROP TABLE users”本身也非常安全。这仅取决于您使用它的上下文。同样,0 是完全安全的,直到您的代码包含 if (!$number) deleteAllUsers();

Assuming you mean safe in terms of SQL injection or XSS attacks, then probably yes. Casting to an int only makes sure the value is an integer. An integer is not usually dangerous in any context. It does not guarantee the safety of the integer's value though. It may be 0, which may or may not have a special meaning in your code, for example when comparing to false. Or it may be negative, which, again, may or may not have any side effects in your code.

"Safety" isn't an absolute thing. The string "1 = 1; DROP TABLE users" by itself is pretty safe, too. It just depends on the context you're using it in. Just the same, a 0 is perfectly safe until your code includes if (!$number) deleteAllUsers();.

陌上青苔 2024-10-16 10:54:36

它是“安全的”,取决于你想做什么。就 PHP 的内存使用而言,它只会将变量转换为整数。它将允许负整数。

It is "safe", depending on what you want to do. It will only cast the variable to an integer as far as PHPs memory usage is concerned. It will allow negative integers.

木格 2024-10-16 10:54:36

对于 PHP 中的 (int):

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           

切勿将未知分数转换为整数,因为这有时会导致意外结果。

查看有关整数的 PHP 文档

For (int) in 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           

Never cast an unknown fraction to an integer, as this can sometimes lead to unexpected results.

Check out the PHP documentation on integers.

残龙傲雪 2024-10-16 10:54:36

int 的使用用于类型hinting 转换,就像

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)

对于负整数是安全的

我的错误:类型提示仅适用于数组和对象

有关类型转换的更多详细信息

The use of int is for type hinting casting, like

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)

is safe for negative integers

my mistake: type hinting only applicable for array and object

more details on type casting

策马西风 2024-10-16 10:54:36

是的,就 SQL 注入或 XSS 攻击而言,它是“安全的”。

此外,如果您对数据库中的主键或其他字段使用无符号整数(无负值)(节省空间),则需要使用 PHP 函数 abs() 和强制转换来防止未处理的错误:

$safe_int = abs((int)$_POST['post_id']);

Yes, it is "safe" in terms of SQL injection or XSS attacks.

In addition, if you utilize unsigned integers (no negative values) for primary keys or other fields in your database (save space) you need to use PHP function abs() and casting to prevent unhandled errors:

$safe_int = abs((int)$_POST['post_id']);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文