有人试图使用无效的查询字符串来访问我们的服务器页面,这会引发异常。
查询字符串= ./ .. / .. / .. / .. / .. / .. / .. / .. / .. / windows / system32md.exe
例外:
无法找到文件'C:\ windows \ system32md.ex'。如何预防这些 攻击类型。
答案 0 :(得分:2)
这不是CSRF攻击。你可能也可能没有其中一个 - 不能说。
我们正在创建一个GUID路径,如:Server.MapPath(“〜\ folder \”+ GUID)
然后,通过在GUID变量中包含“go-up-a-directory”字符串(~\folder
),该路径可以在..
根之外结束。因此,他们可以访问服务器文件系统上的任何文件 - 这不是一件好事。
在文件名中使用用户输入之前,您需要检查它是否是您期望的有限格式。除了目录遍历攻击之外,还有一些其他奇怪的事情可以用Windows文件名(如保留名称,无效名称,意外的UNC路径,不支持的Unicode字符等),因此您应该使用严格的白名单验证来确保您只获取名称你期待。
对于真正的GUID,您需要对正则表达式进行验证:
[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}
或者如果你有.NET 4.5,你可以使用Guid.TryParse。
另外:如果有人正在积极尝试利用这一点,并且公司中没有人进行经过批准的安全测试,那么您就会遇到问题并且应该调查攻击的来源。
答案 1 :(得分:0)
最佳解决方案是将白名单文件夹名称放在数据库或XML文件中。一旦检索到查询字符串,就会对列表运行它以返回TRUE和FALSE。如果它不是文件夹名称,则执行GUID模式的逻辑。我认为这不是CSRF而是XSS。