私は現在使用しています:
if (isset($_GET['b']))
{
$bb = $_GET['b'];
echo 'found';
}
else
{
$bb = 'white';
echo 'notfound';
}
と
<body bgcolor="<?php echo $bb; ?>">
ユーザーがページの色を設定できるようにするには、インジェクションを回避する最も安全な方法は何ですか?
私は現在使用しています:
if (isset($_GET['b']))
{
$bb = $_GET['b'];
echo 'found';
}
else
{
$bb = 'white';
echo 'notfound';
}
と
<body bgcolor="<?php echo $bb; ?>">
ユーザーがページの色を設定できるようにするには、インジェクションを回避する最も安全な方法は何ですか?
色を期待していると仮定すると、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
}
$bb
のみで構成されていることを常に検証できます。これによりa-zA-Z0-9
、1 語の色名 ( white
、black
、などgrey
) と 16 進数の色コード (#
つまり、先頭なし) で機能します。:)
これを使用して、特殊文字と引用符をエスケープします。
<body bgcolor="<?php echo htmlspecialchars($bb, ENT_QUOTES); ?>">
これらの種類の正規表現は、必要なものを検証できます。ここで確認できます。
// 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';
}