2011-08-10 24 views
1

ユーザー入力の墨塗り/検証は明確なテーマですが、特定の状況を明確にするために投稿しています。

コードのセクションは

$haystack=$_GET['user']; 

$入力は「エコー」または「印刷」のため、または任意のSQLクエリまたは任意のそのようなことに使用されることはありませんが含まれています。ユーザー入力($ haystack)をさらに使用するのは、文字列にあらかじめ定義された$針が含まれているかどうかを確認することだけです。

if (preg_match($needle,$haystack)) { 
$result="A"; 
} else { 
$result="B"; 
} 

私の心配は、悪意のあるコードの実行ではなく、ユーザの入力におけるそれの存在です。

上記のように、ユーザの入力が文脈(エコー、プリント、SQLなどでは使用されません)でのみ使用されている場合は、依然としてユーザ入力の悪意のあるコードが実行される可能性があります。

私は、コンテキストに必要なセキュリティ対策を余計に追加したかったのです。

+0

問題はないと思いますが、どの変数が消されているかを忘れた場合の最大の問題は何ですか?またはあなたがそれが消毒されていると思った後に他のプログラマーがいたら。私はそれが良い方法であることを知っています(チェックせずに忘れてしまいますが起こる可能性があります)、より良い機能を作り、どんな入力にも簡単に適用できます。または$ clean_xxx –

+0

のような明確にラベル付けされた変数名にあなたの除外された変数を入れることができます。[PHPでスーパーグローバルを直接使うのは良いですか?](http://stackoverflow.com/questions/3498207/is-using-superglobals-directly -good-or-bad-in-php) – vaxquis

答えて

0

文字列を変更することで任意のコードを実行することはできません。文字列を直接出力する場合、またはSQLで使用する場合は、本当に心配する必要があります。

+2

パターンがそれに依存している場合を除いて:)トピック以外の、申し訳ありませんが、preg_matchの/ e修飾子はコードを実行できます。 – Pelshoff

3

コンテキストでのみ使用される場合、ユーザー入力から悪質なコードを実行する方法はありません。

あなたは(感謝Pelshoff、修飾eで)、データベースクエリとecho(& printsprintf ...)、preg_replaceevalには注意する必要があります。

0

preg_match入力の実行が終了しません。隠された悪用可能なバグを持つのは簡単ではなく、簡単です。 preg_matchを実行した後に$haystackを投げた場合、あなたを傷つけることはありません。

0

$haystackは反映されない場合がありますが、明らかにプログラムフローに影響する可能性があります。あなたが投稿した(極端に短い)コードは、直接脆弱には見えませんが、あなたの入力を消毒しないと、他の脆弱性と組み合わせてコードを実行する可能性があります。

関連する問題