2011-01-25 22 views
13

我最近被告知有FILTER_VALIDATE_INT,這很棒。PHP安全 - (int)vs FILTER_VALIDATE_INT

我的問題是從網站獲取一個整數值,無論是從用戶還是從Web應用程序生成,並通過查詢字符串傳遞。

可以在mysql查詢中顯示或使用值(整數)。

我想爲此構建最好的安全方法。

考慮到這一點,是它的安全簡單地使用

$myNum = (int)$_GET['num']; 

或者

if (filter_var($_GET['num'], FILTER_VALIDATE_INT)) $myNum = $_GET['num']; 

另外,請解釋什麼是使用(int)FILTER_VALIDATE_INT

+0

爲了擴大現有的答案,`FILTER_SANITIZE_NUMBER_INT`相當於`(int)`鑄造。 – mario 2011-01-25 03:31:16

+3

@mario,你怎麼這麼說?不是這樣。 – 2013-05-22 08:20:55

回答

27

的差異之間的區別一個演員到int將永遠讓你int,這可能是也可能不是原來的值。例如。 (int)'foobar'結果在int0。這對大多數SQL目標都是安全的,但與原始值無關,而且您甚至不會知道它。

filter_varFILTER_VALIDATE_INT告訴你的值是否是一個int,在此基礎上,你可以使用它在一個SQL查詢或顯示錯誤信息給用戶的決定。

0
<input type="text" name="param"></input> 


$price = filter_input(INPUT_POST, 'param', FILTER_VALIDATE_INT); 
if ($price !== false) { 
print " a number."; //works when value is number 
} 


if(is_int($_POST['param'])){ 
    print "is number."; //don't works when value is number 
} 

請在數值爲數字時嘗試測試。