-3

重複の可能性:
phpでhtmlフォームの入力デフォルト値を適切にエスケープする方法は?

私は現在使用しています:

if (isset($_GET['b']))
{
  $bb = $_GET['b'];
  echo 'found';
}
else
{
  $bb = 'white';
  echo 'notfound';
}

<body bgcolor="<?php echo $bb; ?>">

ユーザーがページの色を設定できるようにするには、インジェクションを回避する最も安全な方法は何ですか?

4

4 に答える 4

4

色を期待していると仮定すると、16 進数の色に正規表現を使用できます。

^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$

17 の標準色のリスト: アクア、ブラック、ブルー、フューシャ、グレー、グレー、グリーン、ライム、マルーン、ネイビー、オリーブ、パープル、レッド、シルバー、ティール、ホワイト、イエロー:

$standards = array(
    'aqua',
    'black',
    'blue',
    'fuchsia',
    'gray',
    'grey',
    'green',
    'lime',
    'maroon',
    'navy',
    'olive',
    'purple',
    'red',
    'silver',
    'teal',
    'white',
    'yellow'
);

if (in_array($bb, $standards) or preg_match('/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/', $bb)) {
    // valid
}
于 2013-01-04T13:26:29.280 に答える
1

$bbのみで構成されていることを常に検証できます。これによりa-zA-Z0-9、1 語の色名 ( whiteblack、などgrey) と 16 進数の色コード (#つまり、先頭なし) で機能します。:)

于 2013-01-04T13:27:36.310 に答える
0

これを使用して、特殊文字と引用符をエスケープします。

<body bgcolor="<?php echo htmlspecialchars($bb, ENT_QUOTES); ?>">    
于 2013-01-04T13:27:45.937 に答える
0

これらの種類の正規表現は、必要なものを検証できます。ここで確認できます。

// match ffffff & fff
if (!preg_match('/^([a-fA-F0-9]{3}|[a-fA-F0-9]{6})$/i', $bb, $matches_bb2)) {
  $color = $bb;
}

// check other color
preg_match('/[\w]+/i', $bb, $matches_bb);

// not a valid string (means no space, no accent, etc ..)
if (isset($matches_bb[0]) && $matches_bb[0] != $bb) {
  $bb = 'white';
}
于 2013-01-04T13:30:25.213 に答える