我试图通过着名的“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}
我缺少的是介于** **
答案 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注入攻击。我强烈建议再花一些时间阅读这个主题,这可能就是为什么你的问题被拒绝了。