安全性的简单数值比较

时间:2015-03-19 17:04:49

标签: php security

好的,我觉得我不会前进,甚至连一个简单的if声明都不安全,我自己也不知道......

首先让我们说我们从url GET方法中得到一个变量:

$my_number = $_GET['numb'];

现在我们制作这个简单的if语句:

if(($my_number >= 1) && ($my_number <= 12))
{
    put $my_number in database without escaping it
}

所以问题是 - 如果条件除了1-12之外的其他条件,用户是否可以传递此信息,我的意思是使用十六进制数字,评论,做那种事情?

2 个答案:

答案 0 :(得分:1)

要验证号码,请使用intval()

$my_number = intval($_GET['numb']);

只允许一个数字 这也将确保该值不会在SQL中产生错误。

我不喜欢>=<=

if(($my_number >= 1) && ($my_number <= 12))

更改为:

if(($my_number > 0) && ($my_number < 13))

答案 1 :(得分:-2)

您的代码不完全安全。如果条件与1-12之外的其他内容,用户可以传递此信息。 您可以使用以下简单代码对其进行测试:

<?php

$my_number = $_GET['numb'];

if(is_numeric($my_number)){
if(($my_number >= 1) && ($my_number <= 12))
{
echo'User Can Pass';
}else{
echo'User Can Not Pass';
}
}else{
echo'User Can Not Pass';
}    
?>

现在浏览您的网站,例如http://example.com/?numb=8http://example.com/?numb=15http://example.com/?numb=7 Samurai

我想你现在可以找到答案了。感谢。