我目前正在使用一些现有代码,该代码从请求中获取URL并将其输入到锚点源中。这显然是XSS的开放,并且使用urlencoding不会保留锚点内url的完整性。我很好奇在不破坏链接的情况下逃避数据最安全的方法是什么。
即
<?
$url = $_REQUEST['url'];
echo '<a href="' . $url . '">sometext</a>';
?>
答案 0 :(得分:4)
htmlspecialchars($url)
会将HTML敏感字符转换为其实体等效字符。但是,也可以将javascript片段插入到URL中 - 我个人不了解其中的详细信息。更复杂的解决方案(例如HTML Purifier)可以帮助您覆盖大多数漏洞。
答案 1 :(得分:4)
还有filter_var
,其中包含一组您可以使用的预定义过滤器,其中一个我认为是针对网址的:http://php.net/manual/en/function.filter-var.php
修改:Yup:清理过滤器:http://www.php.net/manual/en/filter.filters.sanitize.php