如何检查所有值是仅文本还是仅整数?

时间:2012-10-06 18:57:07

标签: php

我试图通过着名的“1 OR 1”技术使用get变量来阻止sql注入url来检查id是否只是字符串ex:(page.php?id = abc)或整数ex:(page.php ?id = 12)

所以,我使用is_string()函数检查字符串和数字的is_numeric,但它所做的只是检查第一个字母。所以,如果(?id = ab345)它仍将返回true。

那么,有没有办法检查所有值是否为字符串,并且所有值都只是整数?

这是链接:     <a href="site.com/page.php?id=MyProfile"> My Profile </a>

此页面获取id并且数据库查询最多    if(isset($_GET['id']) {**AND IF ID IS TEXT ONLY**} {Perform code} 我缺少的是介于** **

之间

3 个答案:

答案 0 :(得分:0)

// Request: _GET['id'] = ab345
var_dump(is_numeric($_GET['id'])); // false
var_dump(is_string($_GET['id'])); // true

// Request: _GET['id'] = 345
var_dump(is_numeric($_GET['id'])); // true
var_dump(is_string($_GET['id'])); // false

答案 1 :(得分:0)

默认情况下,PHP中的所有这些输入都是 string 。如果您需要更多特定值,可以使用PHP具有的过滤器和验证函数(Data FilterDocs),例如,查看默认情况下可用的过滤器:http://www.php.net/manual/en/filter.filters.php

答案 2 :(得分:0)

您问题的许多可能答案之一是:

$id = isset(isset($_GET['id'])) ? (int) $_GET['id'] : 0;    //force to integer, or 0 if not set

这将强制id的值为整数,或者如果未在URL中设置则为零(不要忘记那些手动更改URL以尝试破坏您的网站的讨厌的脚本小子!)

但是......说实话......我有点担心你甚至认为这会阻止SQL注入攻击。我强烈建议再花一些时间阅读这个主题,这可能就是为什么你的问题被拒绝了。