2010-07-16 125 views
2

我觉得我这样做不对,但是这是我有...

if($_GET['color']) { 
    $color = "signature_"; 
echo "<img src=\"/images/+ $color \"; \"class=\"border\" alt=\"\" />"; 

我试图做的是输出的彩色基于用户输入的图像。

所以说这就是我所做的。

Http://somedomain.com/index.php?username=Ultima&color=red. 

到目前为止,我正在取代用户名,但图像无法正常工作。

我用“signature_”作为前缀,因为图像的颜色都以前缀为前缀。

我试图在输入要显示的图像:

signature_red.png 
signature_green.png 
signature_white.png 
signature_yellow.png 
signature_gold.png 
signature_silver.png 
signature_purple.png 
signature_pink.png 

__

我不知道我在做什么错我的代码......但没有人知道我是怎么使用$get['color']可以在url输入时显示正确的图像?

+4

请记住,您当前的代码受到XSS攻击。不要忘记验证参数,例如通过正则表达式或可能的颜色白名单。 – 2010-07-16 08:58:18

+0

in_array会作为白名单工作吗?谢谢你让我知道的方式。 – Ultima 2010-07-16 09:23:23

回答

4
$g=$_GET['color']; 
if(in_array($g, array('red', 'pink', 'yellow' etc...))) { 
    $color = "signature_".$g.'.png'; 
    echo '<img src="/images/'. $color.'" class="border" alt="" />'; 
} 

或类似的东西。你必须替换“etc ...”部分。
切勿将GET参数放入字符串中而不进行一些检查。

+0

谢谢你给我额外的安全检查。 =) – Ultima 2010-07-16 09:31:30

1

除非我太傻了(这是完全可能的),这需要比特改变:

if($_GET['color']) { 
    $color = "signature_"; 

应该

if($_GET['color']) { 
    $color = "signature_" . $_GET['color']; 

,它需要验证的颜色为好,别人有覆盖。

0
$color = "signature_" . $_GET['color'] . ".png"; 
echo "<img src=\"/images/$color\" class=\"border\" alt=\"\" />";