2011-01-25 6 views
13

私は最近、FILTER_VALIDATE_INTがありました。PHPセキュリティ - (int)vs FILTER_VALIDATE_INT

私の質問は、多分、ユーザーからのものであろうとウェブアプリケーションから生成されたものであろうと、そしてクエリ文字列を介して渡されたものであるかどうかという点でです。

値(整数)は、mysqlクエリで表示または使用することができます。

私はこれに対して可能な限り最良のセキュリティ方法を構築しようとしています。念頭に置いて

、単にまた、差が(int)FILTER_VALIDATE_INT

+0

既存の回答を拡張するには、 'FILTER_SANITIZE_NUMBER_INT'は'(int) 'と同じです。 – mario

+3

@mario、どうすればいいですか?そうではない。 –

答えて

27

をされて使用した場合の違いは何ですか説明してください

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

それとも

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

を使用することは安全ですintへのキャストはいつもあなたにintをもたらします。これはオリジナルかもしれないし、そうでないかもしれません値。例えば。 (int)'foobar'の結果はint0となります。これにより、ほとんどのSQLの目的で安全になりますが、元の値とは何の関係もなく、そのことを知ることさえありません。 FILTER_VALIDATE_INT

filter_varは値を使用すると、SQLクエリで使用したり、ユーザーにエラーメッセージを表示するための決定をすることができるかに基づいて、intであるかどうかをを示しています。

+0

@deceze 'filter_var'と' is_int'の間に大きな違いがあるかどうか知りませんか? –

+2

@Russell Dias:少なくとも "42"の結果(文字列として表される整数)。 – zerkms

+0

@zerkmsあまりにも数字の文字列をテストするのは気づいていませんでした。例をありがとう;) –

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 
} 

数値が数値の場合は試してみてください。