我目前正在爲PHP中的留言簿寫一個PHP腳本,用戶可以在表單中放置他們的姓名,網站和消息,但是我想阻止某人將javascript: //在德網址框,以減少XSS的風險,我試着來解決這個問題:如何阻止javascript://作爲url參數
<?php filter_var($_POST['website'], FILTER_VALIDATE_URL) ?>
但我仍然能夠把JavaScript代碼://在德URL框中我怎麼能避免這種情況?
我目前正在爲PHP中的留言簿寫一個PHP腳本,用戶可以在表單中放置他們的姓名,網站和消息,但是我想阻止某人將javascript: //在德網址框,以減少XSS的風險,我試着來解決這個問題:如何阻止javascript://作爲url參數
<?php filter_var($_POST['website'], FILTER_VALIDATE_URL) ?>
但我仍然能夠把JavaScript代碼://在德URL框中我怎麼能避免這種情況?
用的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']));
如果將$ Website放入,那麼如果您使用html對javascript中的任何字母進行編碼,則會繞過您的替換。 java s cript:alert(1) – Erlend 2012-03-21 06:24:01
$chk = parse_url($url);
switch ($chk['scheme']) {
case 'http':
case 'https':
break;
default:
// throw error here
break;
}
甲清潔溶液將使用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';
}
感謝你們,我沒有使用parse_url() – 2012-03-20 18:56:02
因爲這是一個有效的網址。你必須解析url並檢查使用的協議。 – 2012-03-20 18:37:41