PHP:" javascript:"链接注入


PHP prevent "javascript:" link injection

我正在制作一个允许用户在数据库中存储用户偏好的网站,包括链接。

但是我已经意识到,如果用户输入javascript: // Malicious code here,他们可以在页面上执行任何javascript,包括获得会话ID的能力。

(链接显示给其他用户,因此我想防止这种情况发生)

我已经尝试了以下方法来防止这种情况,但它们都不起作用:

htmlentities()
htmlspecialchars()
strip_tags()
addslashes()

快速示例:

$link  = // queried from the database.
$title = // queried from the database.
echo '<a href="'. $link .'">'. $title .'</a>';

如果你知道我怎么能解决这个问题,我将非常感激。

可以用FILTER_VALIDATE_URL测试链接

下面是一个例子

if(!filter_var($url, FILTER_VALIDATE_URL))
  {
  echo "URL is not valid";
  }
else
  {
  echo "URL is valid";
  }

您应该按协议将url列入白名单。有太多的方法来混淆javascript:通过不同的情况下,插入null, bom,空格字符等一个简单的测试,以可靠地识别所有javascript: url。

如果你想只允许带有协议

的url
    http
  1. https
  2. mailto
  3. 电话

,那么您可以根据

之类的正则表达式测试您的输入。
/'A(?:https?:'/'/|mailto:|tel:|[^:]*(?:'/|'z))/i

,它将传递任何具有上述协议之一的URL,以及任何在第一个/之前没有冒号的相对(或协议相对)URL。

您需要测试链接,可能使用正则表达式,可能是'^https?://'