将输入的字符串验证为URL - 值得为安全起见吗?

时间:2012-06-09 17:53:24

标签: security validation url

在我正在撰写的网络应用程序中,我为登录访问者提供了输入网址以附上他们上传图片的机会,作为返回其网站的链接。

我打算验证输入的字符串以确保它是一个URL,但在仔细考虑解决方案的复杂性后,我想也许没有必要。

但是,如果不这样做,我可能会遗漏任何安全隐患吗? (我正在考虑有效URL可能包含某些恶意脚本或类似情况的情况。)

3 个答案:

答案 0 :(得分:2)

URL的安全性问题与它们的有效性关系不大(尽管为了捕获错误而进行基本检查是很好的,当然,您需要使用与一般数据相同的输入验证和输出转义代码);它更多地与危险的URL方案有关。

最值得注意的是,javascript:网址根本不是真正的位置,而是将脚本内容注入到链接它们的页面中,从而导致跨站点脚本漏洞。还有其他类似问题的方案。最好只允许已知好的方案,例如检查字符串是以http://还是https://开头。

答案 1 :(得分:0)

此功能似乎是Cross-Site Request Forgery (CSRF) attack的完美示例,其中上传程序链接到触发CSRF攻击的网页。

要降低CSRF攻击的风险,请确保攻击网站无法预测具有网站效应的操作。这通常由所谓的令牌完成,该令牌是一个只为您的站点和登录访问者所知的随机值。

答案 2 :(得分:0)

正确验证网址并非易事。您可以get close,但它仍然不一定涵盖RFC允许的所有内容。只要您不是评估这些URL作为输入,运行html_escape()或您的框架等效应该是一个足够的预防措施,以保护您的网站免受偶然的字符串恶作剧。

您可能需要研究您的框架,以了解您需要针对跨站点脚本,SQL注入和其他相关问题采取哪些预防措施(如果有)。大多数可能出错的事情都与未经过抽样的输入有关,但你的里程可能会有很大差异。

如果您希望100%安全,保护用户可能不是一个合理的设计目标。毕竟,网络不是受保护的沙箱。