c# - 如何在服务器端防止href属性的xss?
问题描述
在我的网站(服务器端是 c#)中,我让用户提交这样的链接:
<a href="$">link text</a>
无论他们输入什么,都只会保留在“href”属性中。我想通过“href”URL 阻止 XSS。
现在我检查它是否是 c# 对象 URI 的有效 url。
我的问题是:
- 使用 URI 验证 url 是否足以防止 url xss?
- 如果没有,我应该如何防止这种xss?
例如,如何防止对有效 url 的 XSS 网络钓鱼攻击:“ http://xss.rocks/xss.css ”
解决方案
验证为 URI 是一个好的开始。之后,验证是否scheme
是白名单选项,例如http
/ https
。之后,确保在输出之前对其进行编码(参见 OWASP 链接)。基本上,您完全按照您对任何 html 属性编码所做的操作,除了您还需要注意恶意方案。
需要注意的事项:(javascript:alert(1);
验证方案),https://example.com?xss=" onclick=alert(1);//
(转义输出)。
看:
- https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet
- https://msdn.microsoft.com/en-us/library/system.web.security.antixss.antixssencoder.xmlattributeencode(v=vs.110).aspx
至于您问题的第二部分,一旦用户单击链接并转到新站点,它就不再是您站点上的 XSS 了。让用户添加任何 URL 仍然是危险的,即使它不是 XSS 漏洞。他们仍然可以链接到恶意网站、非法内容等。对于这些,您也许可以根据Google 提供的网站声誉 API进行验证,但即使这样也不是万无一失的。
推荐阅读
- ios - 无法在 XIB 中设置约束 - Xcode 11.3.1
- angular - 使用 where 条件从 Firestore 实时获取数据
- c++ - 子类:*this = function_which_returns_parent_object(),可以吗?
- c# - C# Vlc Forms 音量稳定问题
- python - 在 Python Turtle 中使用循环
- python - 编写与 TensorFlow 1 和 2 兼容的代码的最佳实践
- python-3.x - 有没有办法在py3的开头打印没有空格?
- coldfusion - 如何使用 CFFTP 从 FTP 中删除 ROOT 目录
- php - 如何使用 Curl 登录 SAML 请求
- php - Laravel - API在数据库中以字符串形式返回字段