如何阻止javascript://作为url参数

时间:2012-03-20 18:35:37

标签: php javascript xss

我目前正在为PHP中的留言簿编写PHP脚本,人们可以将其名称,网站和消息放在表单中,但我想阻止某人将javascript://放在de url框中以降低风险对于XSS,我试图用以下方法解决这个问题:

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

但是我仍然可以将javascript://放在de url框中,我该如何防止这种情况?

3 个答案:

答案 0 :(得分:3)

一个干净的解决方案是使用PHP的parse_url函数,并检查所使用的协议是HTTP还是允许的协议列表,如果你允许http://和skype://例如... < / p>

$url = 'http://username:password@hostname/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';
}

答案 1 :(得分:2)

$chk = parse_url($url);

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

答案 2 :(得分:-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']));