有人试图使用抛出异常的无效查询字符串访问我们的服务器页面。
查询字符串 =./../../../../../../../../../windows/system32md.exe
例外:
找不到文件“C:\windows\system32md.ex”。如何防止这些类型的攻击。
有人试图使用抛出异常的无效查询字符串访问我们的服务器页面。
查询字符串 =./../../../../../../../../../windows/system32md.exe
例外:
找不到文件“C:\windows\system32md.ex”。如何防止这些类型的攻击。
这不是 CSRF 攻击。你可能有也可能没有其中之一——不能说。
这是一个目录遍历攻击。
我们正在创建一个带有 GUID 的路径,例如: Server.MapPath("~\folder\" + GUID)
然后,通过在 GUID 变量中~\folder
包含“go-up-a-directory”字符串 ( ),该路径可以在根目录之外结束。..
因此,他们可能能够访问服务器文件系统上的任何文件——这不是一件好事。
在文件名中使用用户输入之前,您需要检查它是否是您期望的有限格式。除了目录遍历攻击之外,您还可以对 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。
另外:如果有人正在积极尝试利用这一点,而公司中没有人在进行经批准的安全测试,那么您就会遇到问题,应该调查攻击的来源。
最好的解决方案是在数据库或 XML 文件中设置一个白名单文件夹名称。检索到查询字符串后,针对列表运行它以返回 TRUE 和 FALSE。如果不是文件夹名称,则执行 GUID 模式的逻辑。我认为这不是 CSRF 而是 XSS。