2010-07-16 384 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=\"\" />";