2017-02-21 5 views
0

隠し入力のあるフォームは、コードに自動的に割り当てられる値として整数を持ちます。隠し入力値を常に整数に消す

<form action=""> 
    <input name="pageNum" type="hidden" value="1"> 
</form> 

どのように私は値が常に指定された整数であることをことをサニタイズすることができますか?要求の値の後に'を追加して、SQLインジェクションを行うように誰かがリクエストを変更した場合でも。これは実際のケースであるため、SQLインジェクションのセキュリティインシデントとして、テストを行った後、誰かがSQLインジェクションのセキュリティインシデントとして報告しました。しかし、11\ 'になり、1\'は1の配列に存在しないため、私のコードが壊れます。

$pageNumber = $_POST['pageNum']; 

if (!is_int($pageNumber)) { // $pageNumber = "1\'" for this example 
    // what can I do to make it 1 again? 
} 

私はこれをどのように達成できるのでしょうか?これにより、コード内で内部サーバーエラーが発生し、SQLインジェクションセキュリティの脆弱性であると思うようになります。

+0

あなたはこれをあきらめましたか? – AbraCadaver

+0

申し訳ありません、ちょうど忙しいです。 – Mentos93

答えて

0

あなたはこれが単なる文字列に数値を抽出し、$番号の内側にそれを置く

+0

私はこの答えに行きます、これは私がしたことです、それで十分です。この番号がオブジェクトに与える影響については、別の場所で別の小切手を作成しました。 – Mentos93

0
$pageNumber = "1\'"; 
preg_match("|\d+|", $pageNumber, $number); 
var_dump($number); 

INTVAL($ページ番号)を試みることができます。

+0

改ざんされた値が '1asdf2'の場合、ページ番号にどの値を使用しますか? –

+0

私は彼が持っている衛生ルーチンのためにOPがそれを "1 \"として得ていると思っています。上記のコードはそのような場合にのみ抽出するものです。あなたの質問に答えるために、上記の場合、抽出される値は1になります。 – raidenace

+0

@RobertCaloveにはポイントがありますが、私は改ざんされた値にもっと多くの整数も考えていません。 – Mentos93

-1

数字の解析はちょっと難しいですが、テキストに他の数字があると、解析する数字がわからないためです。 (たとえば、1\2、#1または2を解析しますか?)

最も簡単な解決策は、解析できない場合はページのデフォルトを整数にすることです。例えば

:誰もがPOST変数を改ざんされた場合はそれだけでいつもis_int()を文字列を入力している1.

+0

'$ _POST ['pageNum']'は常に文字列であり、動作しません。 – AbraCadaver

0

$_POST値をデフォルトうとして、彼らはトリッキーな何もできないので、

if (!is_int($pageNum)) 
    $pageNum = 1; 

動作しません。

if (!is_numeric($pageNumber)) { // $pageNumber = "1\'" for this example 
    $pageNumber = '1'; 
} 

をしかし、あなたはそれが整数でなければなりません知っているので、それがない場合は数字で始まるか0場合、これは適切な番号を取得します::ちょうどis_numeric()をチェック

$pageNumber = (int)$_POST['pageNum']; 

あなたが確実にできません恐ろしいことから正しいページ番号を解析してください。また、誰かがあなたのサーバーをハックしようとしている場合は、正しいページ番号を与えることに気を付けるべきではありません。

関連する問題