通过查询字符串的安全攻击是CSRF攻击吗?如何防止查询字符串的攻击?

时间:2013-04-09 05:38:05

标签: asp.net query-string security csrf

有人试图使用无效的查询字符串来访问我们的服务器页面,这会引发异常。

查询字符串= ./ .. / .. / .. / .. / .. / .. / .. / .. / .. / windows / system32md.exe

例外

  

无法找到文件'C:\ windows \ system32md.ex'。如何预防这些   攻击类型。

2 个答案:

答案 0 :(得分:2)

这不是CSRF攻击。你可能也可能没有其中一个 - 不能说。

这是directory traversal attack

  

我们正在创建一个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。