我有一个带有输入字段的应用程序,该应用程序允许用户提交URL,该URL将显示为页面上的链接。
我希望用户能够提交相对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攻击。请让我知道是否可以澄清。