可能重复:
How to properly escape html form input default values in php?
我目前正在使用:
if (isset($_GET['b']))
{
$bb = $_GET['b'];
echo 'found';
}
else
{
$bb = 'white';
echo 'notfound';
}
和
<body bgcolor="<?php echo $bb; ?>">
允许用户设置页面的颜色,避免注入最安全的方法是什么?
答案 0 :(得分:4)
假设您期待一种颜色,可以使用十六进制颜色的正则表达式:
^#([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
}
答案 1 :(得分:1)
您始终可以验证$bb
仅包含a-zA-Z0-9
,这样可以使用单字颜色名称(例如white
,black
,{{ 1}})以及十六进制颜色代码(没有前导grey
)。 :)
答案 2 :(得分:0)
使用此选项来转义特殊字符和引号:
<body bgcolor="<?php echo htmlspecialchars($bb, ENT_QUOTES); ?>">
答案 3 :(得分:0)
这些正则表达式可以验证您的需求。你可以check it here。
// 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';
}