【发布时间】:2020-02-04 19:04:19
【问题描述】:
我有一个带有输入字段的应用程序,它允许用户提交一个 URL,该 URL 将显示为页面上的链接(在用 React 编写的 SPA 中)。
我希望用户能够提交相对 URL 以及绝对 URL。例如(以下所有内容都应该是一个很好的输入):
https://stackoverflow.com
stackoverflow.com
http://example.com
localhost:1234
localhost
...
我正在尝试防止 XSS 攻击。这样当用户在 URL 输入中提交javascript:alert('hacked') 时,它应该不起作用。
我想这样做的方法是简单地在输入前面加上 http://(如果它不在输入中)。这样最终的结果就是http://javascript:alert('hacked')
在服务器端,我使用的是 ASP.NET Core,并且我有一个看起来像这样的模型:
using System.ComponentModel.DataAnnotations;
namespace MyApp.Models {
public class LinkModel {
[Required]
public string Title { get; set; }
[Url]
public string Url { get; set; }
}
}
注意 Url 属性,当我测试时 - http://javascript:alert('hacked') 它是“有效的”。这让我相信它没问题,它不是 XSS 攻击向量。我还在 Chrome 和 Firefox 中进行了测试,它似乎是“安全的”。
是这样吗?我错过了什么吗?在将输入传递给服务器之前将http:// 添加到足以防止XSS 攻击的输入。如果我能澄清一下,请告诉我。
【问题讨论】:
-
你读过this section for recommendations?吗,你也可以在把文本/url放入href之前对其进行清理,例如:使用HtmlSanitizer。
-
我实际上是在将数据从 ASP.NET 控制器以 JSON 格式传递到反应前端。所以我想我的问题更笼统。 (我已经更新了我的问题,如果它可以澄清一点)。
标签: c# asp.net security asp.net-core xss