允许用户创建链接的风险?

时间:2013-11-14 08:42:20

标签: security web xss

我正在设置一个用户可以创建链接的网络环境,他们只能修改href属性,而不能自己输入<a>标记。

所以基本上允许任何href值; HTTP / FTP /的mailto /不管。

如果我将href属性保持打开状态,我的网站是否存在任何XSS或其他风险?如果是的话,它们会是什么以及我该如何处理它们?

2 个答案:

答案 0 :(得分:2)

有一些网址方案,例如javascript:或可能data:,如果用户被欺骗点击它们,它们本身就可以充当XSS向量。您应该维护白名单已知的安全网址方案(例如httphttpsftp等),并禁止任何未开始的网址有了这样的计划。

请注意,只是黑名单已知的危险URL方案是一种安全的方法,因为您不可能知道可能被用作攻击媒介的所有方案(因为这可能)取决于用户安装的第三方软件等内容。特别要记住,URL方案应该不区分大小写;一个简单地禁止以javascript:开头的网址的天真黑名单实施可能会被jAvAsCrIpT:网址轻易绕过。

(如果你愿意,你可以允许无方案的相对URL,但如果是这样,请确保你保守地解析它们according to the standard,这样攻击者就不可能伪装一个有害的绝对URL作为相对URL。特别是,我建议在第一个斜杠(:)之前包含冒号(/)的任何URL(如果有)被视为绝对URL白名单。为了确保您可能还希望将字符串“./”添加到尚未以“/”或“./”开头的任何相对网址中排序消除任何潜在的解析歧义。)

您需要确保的另一件事是您正确地 HTML-escape 任何字符串,包括将嵌入HTML中的URL(特别是用户提供的字符串)属性。特别是,任何&字符都需要替换为&amp;字符实体,(对于双引号属性),任何"个字符都需要&quot;。将<替换为&lt;而将'替换为&#39;也可能是一个好主意,最安全的方法可能是实际替换任何字符(除了已知的安全的,如字母数字)与其相应的HTML字符实体。在任何情况下,您编程语言可能都有一个标准函数或库来执行此操作(例如PHP中的htmlspecialchars())。

Ps。另请参阅OWASP XSS Filter Evasion Cheat Sheet,了解您的实施应该能够抵制的可能攻击的一些示例。

答案 1 :(得分:1)

必须确保href值是有效的网址。如果您不会转义用户输入,则可能会导致mySQL注入攻击。

用户也可以输入javascript:

<a href="javascript:window.close();">Javascript will close the browser window on click</a>