2012-03-20 41 views
1

我目前正在爲PHP中的留言簿寫一個PHP腳本,用戶可以在表單中放置他們的姓名,網站和消息,但是我想阻止某人將javascript: //在德網址框,以減少XSS的風險,我試着來解決這個問題:如何阻止javascript://作爲url參數

<?php filter_var($_POST['website'], FILTER_VALIDATE_URL) ?> 

但我仍然能夠把JavaScript代碼://在德URL框中我怎麼能避免這種情況?

+1

因爲這是一個有效的網址。你必須解析url並檢查使用的協議。 – 2012-03-20 18:37:41

回答

-1

用的preg_replace

$website = preg_replace("/(javascript:\/\/)/i", "http://", mysql_real_escape_string($_POST['website'])); 

或str_ireplace

$website = str_ireplace("javascript:", "http:", mysql_real_escape_string($_POST['website'])); 
+1

如果將$ Website放入,那麼如果您使用html對javascript中的任何字母進行編碼,則會繞過您的替換。 java s cript:alert(1) – Erlend 2012-03-21 06:24:01

2
$chk = parse_url($url); 

switch ($chk['scheme']) { 
case 'http': 
case 'https': 
    break; 
default: 
    // throw error here 
    break; 
} 
3

甲清潔溶液將使用PHP的parse_url功能並檢查所使用的協議是HTTP或在允許的一個列表協議,如果您允許http://和skype://例如...

$url = 'http://username:[email protected]/path?arg=value#anchor'; 
$tmp = parse_url($url); 

if ($tmp['scheme'] === 'http') { 
    echo 'is http://'; 
} 

if (in_array($tmp['scheme'], array('http', 'skype', 'call')) { 
    echo 'is allowed protocol'; 
} 
+0

感謝你們,我沒有使用parse_url() – 2012-03-20 18:56:02