2011-11-08 6 views
0

ctype_digit(base64_decode(trim($_POST['id'])の場合、最初に変数を作成し、trim($_POST['id'])を代入する必要があります。なぜなら、オーバーフローする可能性がある狂ったことがあるかもしれないからです。base64_decodeまたはctype_digit例か、私はあまり強調しませんか?PHPでフォームを安全に処理するには?

+8

オム、なぜあなたはすべてで、それが必要なのでしょうか? – zerkms

+0

この投稿のすべての質問に対する回答は、「はい!」です。それらのすべて。ユーザーから受け取ったものがデフォルトで有効な入力と一致しているとは決して信じられません。任意の内容の文字列で、この文字列を残りのコードに取り込む前にすべての条件をチェックする必要があります。 – Bazzz

+0

なぜあなたはここでbase64_decodeをやっているのですか? –

答えて

0

私はあなたがそれを行うことで十分注意していると言います。しかし、ほとんどの場合、正しい方法は$ idのような変数を作成し、それにあなたのpost変数の値を代入することです。これは、開発者がテンプレートを使用して作業する必要があり、PHPプログラマとして、入力とデータベースの行をポスト/取得し、変数や配列へのアクセスが容易なテンプレートとして利用できるようにすることです。

この例では、数値IDが必要な場合にスクリプトを安全にします。通常、SQL文で使用される文字列が必要な場合は、さらに手順を実行する必要があります。最もきれいな文字列であっても、SQLインジェクションに使用できます。これは、準備されたステートメントを使用すべき場所です。

http://www.php.net/manual/en/mysqli.prepare.php

http://www.php.net/manual/en/class.mysqli-stmt.php

0

私は本当にあなたの質問を得ることはありません私は恐れています。 3つの関数を適用する前に変数に$ _POST ['id']を代入するだけで差はありません。 しかし、$ _POST ['id']が実際に設定されている(または通知を受け取る)ことを最初に検証する必要があります。また、$ _POST ['id']の値が実際に有効であることを常に検証する必要があります(悪意のある値が含まれていると攻撃を誘導することはできません)。

+0

フォームからデータを検証する標準的な方法はありますか? – JohnA

0

巨大なデータ入力を恐れている場合は、デコードする前にstrlenを追加するだけで、オーバーフローする心配はありません。また、データベースの近くで使用する前に、常にデータをチェックする必要があります。

+0

あなたのDBを保護するだけではありません。 DBを害することはできませんが、XSSも可能です。 – matthiasmullie

+0

XSSトラフファイアバグはできますか? – JohnA

関連する問題