我目前正在使用:
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; ?>">
要允许用户设置页面的颜色,避免注入最安全的方法是什么?
假设您期待一种颜色,您可以使用正则表达式来表示十六进制颜色:
^#([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
,这将使其与单字颜色名称(例如white
, black
, grey
)以及十六进制颜色代码(没有前导#
)一起使用。:)
使用它来转义特殊字符和引号:
<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';
}