我有一个网站,用户可以在其中共享指向其主页的链接,例如http://example.com/user
. 目前,我正在使用 PHP 函数filter_var($_POST['url'], FILTER_VALIDATE_URL)
在使用准备好的语句将其添加到数据库之前验证 URL。
但是,我意识到 PHP 过滤器函数接受输入,例如http://example.com/<script>alert('XSS');</script>
可用于跨站点脚本的输入。为了解决这个问题,我在标签htmlspecialchars
内的 URL<a>
和标签rawurlencode
的href
属性上使用。
但是rawurlencode
会导致/
URL 中的 被转换为%2f
,从而使 URL 无法识别。我正在考虑做一个preg_replace
for all %2f
back to /
。这是清理 URL 以显示为链接的方法吗?